导航:首页 > 操作系统 > 最简单的单片机程序

最简单的单片机程序

发布时间:2023-08-19 14:33:43

⑴ 求个简单的单片机编程程序·

跑马灯实验

/* 实验目的:初步了解单片机I/O口的工作原理,进一步掌握51单片机的汇编指令。
* 实验内容:用汇编指令对单片机I/O口进行编程,控制8个发光二极管的流水亮灭。
*/
/* 程序详细功能介绍:
*做单一灯的左移右移,八个发光二极管L0-L7分别接在单片机的P0.0-P0.7接口上,
*输出“0”时,发光二极管亮,开始时P0.0→P0.1→P0.2→P0.3→┅→P0.7→P0.6→┅→P0.0亮,重复循环。
*/
ORG 0000H
LJMP START
ORG 0030H
START:
MOV R2,#8 ;左移次数
MOV A,#0FEH ;A的初始值,即 P0.0的L0 点亮
SETB C
LOOP: MOV P0,A
LCALL DELAY
RLC A ;左移流水灯(带进位的左移),即亮点向P0口的高位移动
DJNZ R2,LOOP

MOV R2,#8 ;右移次数
LOOP1: RRC A ;右移流水灯
MOV P0,A
LCALL DELAY
DJNZ R2,LOOP1
LJMP START

DELAY: MOV R5,#10 ;延时子程序,改变R5,R6,R7 的值,可以改变延时的时间,从而改变流水灯移动速度
D1: MOV R6,#20
D2: MOV R7,#248
DJNZ R7,$
DJNZ R6,D2
DJNZ R5,D1
RET
END

⑵ 编写简单的单片机c语言程序 1、指定数组找最大值 2、排序

#include<stdio.h>

#defineNR10//数组元素个数

/*从主函数开始*/

intmain(intargc,char**argv)

{

intar[NR];

inti;

fprintf(stdout,"请输入%d个整数: ",NR);

/*获取并检查用户输入*/

while(1)

{

/*循环获取NR个数据*/

for(i=0;i<NR;i++)

{

if(fscanf(stdin,"%d",&ar[i])!=1)

{

fprintf(stdout,"输入错误!请重新输入: ");

while(getchar()!=' ');//丢弃多余非法字符

break;//打破内层for循环

}

}

/*检查是否获取到NR个数据*/

if(i!=NR)

{

continue;

}

else

{

break;

}

}

/*查找最大值和最小值*/

intmax,min;

max=ar[0];//假定第一个数为最大值

min=ar[0];//同时假定也第一个数为最大值

/*从第二个数开始比较查找最值*/

for(i=1;i<NR;i++)

{

if(ar[i]>max)//最大值

{

max=ar[i];

}

if(ar[i]<min)//最小值,不能使用elseif,否则会跳过比较

{

min=ar[i];

}

}

fprintf(stdout,"最大值为:%d最小值为:%d ",max,min);

/*接下来:查找第二大值*/

intsecond;

/*先获取前两个数的第一大和第二大值*/

ar[0]>ar[1]?(max=ar[0],second=ar[1]):

(max=ar[1],second=ar[0]);

/*从第2个数开始比较查找*/

for(i=2;i<NR;i++)

{

if(ar[i]>max)//查找最大值:目的是为了比较第二大值

{

second=max;//先把最大值保存给第二大值

max=ar[i];

}

elseif(second<ar[i])//比最大值小的数再看看是否大于第二大值

{

second=ar[i];

}

}

fprintf(stdout,"第二大值为:%d ",second);

return0;

}

(2)最简单的单片机程序扩展阅读

一、c语言程序求数组内所有数的和:

1、通过索引的方式就可以访问到数组内部的元素,索引是从0到数组长度-1。

2、数组点Lenth就是数组的长度。

二、c语言程序冒泡排序:

1、比较相邻的两个元素的大小,如果第一个比第二个大就互换一下。

2、然后每一对都做如上操作,如此一来最后一个元素肯定是最大的数了。

3、除了最后一个元素,重复以上步骤。然后倒数第二个就是次大的值了

4、一次按照这个逻辑直到没有任何数字可以比较了。

⑶ 求一个简单的单片机时钟程序

#include<reg51.h>
#defineucharunsignedchar
ucharcodeledtab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9
unsignedcharsec=0,min=0,hour=0,scanled;
unsignedcharkey,time;
unsignedchardisdat[6];
sbitK=P1^0;
voiddischg()
{
disdat[0]=sec%10;
disdat[1]=sec/10;
disdat[2]=min%10;
disdat[3]=min/10;
disdat[4]=hour%10;
disdat[5]=hour/10;
}
voidt0isr()interrupt1 //秒计时
{
TR0=0;
TH0=0x3c;
TL0=0xb0;
TR0=1;
time++;
if(time==20)
{
time=0;
sec++;
if(sec>59)
{
sec=0;
min++;
if(min>59)
{
min=0;
hour++;
if(hour>23)hour=0;
}
}
}
dischg();
}
voidt1isr()interrupt3 //显示
{
TH1=0xec;
TL1=0x78;
switch(scanled)
{
case0:
P2=0x01;
P0=~ledtab[disdat[5]];
break;
case1:
P2=0x02;
P0=~ledtab[disdat[4]]&0x7f;
break;
case2:
P2=0x04;
P0=~ledtab[disdat[3]];
break;
case3:
P2=0x08;
P0=~ledtab[disdat[2]]&0x7f;
break;
case4:
P2=0x10;
P0=~ledtab[disdat[1]];
break;
case5:
P2=0x20;
P0=~ledtab[disdat[0]];
break;
default:break;
}
scanled++;
scanled%=6;
}
main()
{
TMOD=0x11;
TH0=0x3c;
TL0=0xb0;
TH1=0xec;
TL1=0x78;
EA=1;
TR1=1;
ET0=1;
ET1=1;
sec=0;
min=0;
hour=0;
scanled=0;
time=0;
key=0;
dischg();
while(1)
{
if(K==0)
{
while(K==0);
key++;
key%=2;
}
switch(key)
{
case0:
TR0=1;
break;
case1:
TR0=0;
break;
}
}
}

⑷ 51单片机的一个简单程序

51单片机的一个简单程序如下:

ORG 0000H

LJMP MAIN
ORG 0030H
MAIN:
MOV A,P0

ANL A,#1EH

CJNE A,#02H,MAIN1

SETB P1.1

CLR P1.2

CLR P1.8

SJMP MAIN

MAIN1:
CJNE A,#04H,MAIN2

CLR P1.1

SETB P1.2

CLR P1.8

SJMP MAIN

MAIN2:
CJNE A,#1EH,MAIN3

CLR P1.1

CLR P1.2

SETB P1.8

SJMP MAIN

MAIN3:
CLR P1.1

CLR P1.2

CLR P1.8

LJMP MAIN

END

阅读全文

与最简单的单片机程序相关的资料

热点内容
裘锡圭pdf 浏览:720
android模拟器调试 浏览:129
sap命令大全 浏览:290
mysql导出数据命令 浏览:949
文件夹隐藏了出不来 浏览:562
电信网上大学源码 浏览:204
rr轮转调度算法 浏览:253
我的世界无法登入服务器怎么办 浏览:148
文件加密授权特定隐藏访问控制 浏览:801
程序员剑灵官网 浏览:516
php调用static方法 浏览:934
天正命令版 浏览:86
聚合支付加密币 浏览:313
蜜源app是什么时候创立的 浏览:706
计算机专业学51单片机 浏览:211
程序员不接受反驳 浏览:298
微软自带的压缩软件 浏览:289
中国玩家在日本服务器做什么 浏览:51
12864和单片机 浏览:898
25匹空调压缩机 浏览:649