51单片机常见程序附带注释Word格式.docx
《51单片机常见程序附带注释Word格式.docx》由会员分享,可在线阅读,更多相关《51单片机常见程序附带注释Word格式.docx(35页珍藏版)》请在冰豆网上搜索。
while
(1)
{
P2=aa;
//控制单片机接口p2,循环亮
delayms(500);
//当500换成5,看起来全亮,实际上灯一直亮灭,原因是视觉延迟
aa=_crol_(aa,1);
}
}
voiddelayms(uintxms)//子程序,延时,通过数数
{
uinti,j;
for(i=xms;
i>
0;
i--)
for(j=110;
j>
j--);
现在时间较长,多以是亮灭的流动,当时间约为20ms,形成动态扫描,看上去全亮。
#include<
//52系列单片机头文件(目标:
用单片机和两个共阴极数码管:
使用单片机的引脚1和2,控制两个数码管静态显示00到59)
#defineucharunsignedchar
#defineuintunsignedint
sbitdula1=P1^7;
//申明U1锁存器锁存端段选
sbitdula2=P0^7;
ucharnum,num1;
ucharcodetable[]={//共阴极数码管0123456789abcdef
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
voiddelayms(uint);
voidmain()
{
while
(1)
{
for(num1=0;
num1<
=5;
num1++)
{
for(num=0;
num<
=9;
num++)
{
dula2=1;
//打开U1锁存端
P1=table[num];
//送入位选信号
dula2=0;
//关闭U1锁存器
delayms(100);
//延时500毫秒约0.3s
dula1=1;
P2=table[num1];
dula1=0;
}
}
}
voiddelayms(uintxms)
uintx,y;
for(x=xms;
x>
x--)//x=xms即延时约为xms毫秒
for(y=200;
y>
y--);
用单片机和两个共阴极数码管)
sbitdula2=P2^7;
{
dula1=1;
P1=table[num1];
dula1=0;
delayms(1000);
delayms(1000);
有语法错误
//52系列单片机头文件
#defineucharunsignedchar//无符号字符型占八位数,表示范围0~255
#defineuintunsignedint//无符号整型,占16位数,表示范围
sbitdula1=P1^6;
//申明U1锁存器锁存端段选
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,//共阳极数字:
0123456789abcdefg
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xcd,0xa1,0x86,0x8e};
voiddisplay(uchar,uchar);
ucharnum,num2,shi,ge;
voidmain()
TMOD=0x11;
//设置定时器0和1为工作方式1(M1M0为01,000100
TH0=(65535-50000)/256;
//装初值12.00M晶振定时50s数为50000
TL0=(65535-50000)%256;
TH1=(65535-50000)/256;
TL1=(65535-50000)%256;
EA=1;
//开总中断
ET0=1;
//开定时器0中断
ET1=1;
//开定时器1中断
TR0=1;
//启动定时器0
TR1=1;
//启动定时器1
while
(1)//程序停止在这里不停的对数码管动态扫描同时等待中断的发生
display(shi,ge);
dula2=1;
P1=table[shi];
dula2=0;
delayms(1175);
//延时0.1毫秒
voiddelayms(uintxms)//延时子程序
uinti,j;
for(i=xms;
i--)//i=xms即延时约为xms毫秒
for(j=110;
voidT1_time()interrupt1
TH1=(65536-50000)/256;
//重装初值
TL1=(65536-50000)%256;
num2++;
//num每加1次判断一次是否到20次
if(num2==20)
num2=0;
//然后把num2清0重新再计数20次
num++;
if(num==60)//这个数用来送数码管显示,到60后归0
num=0;
shi=num/10;
//把一个2位数分离后分别送数码管显示,十位数
ge=num%10;
//个位数
控制时间24小时一循环)
ucharnum,num1,num2,num3,num4;
for(num3=0;
num3<
=23;
num3++)//每天24小时进位一
for(num2=0;
num2<
=59;
num2++)//每60分进位一
{
for(num1=0;
num1++)//每6*10s进位一
{
P1=table[num1];
delayms(1175);
for(num=0;
num++)//每1s进位一
{
dula2=1;
P1=table[num];
dula2=0;
delayms(1000);
}
}
for(y=110;
控制时间24小时一循环,蜂鸣器每过一段时间响一次)
sbitf=P0;
//声明单片机P0口的第一位,也就是三极管基级的位置单片机第39接口
num3++)//每天进位一
for(num4=0;
num4++)//每60s进位一
{
f=0;
//控制蜂鸣器的不响
num++)//每1ms进位一
{
dula2=1;
P2=table[num];
dula2=0;
delayms(1074);
}
f=1;
//控制蜂鸣器的响
delayms(1000);
for(y=10;
用单片机和两个共阳极数码管,控制依次显示0到59,然后循环,有合适的时间间隔,程序停止)
6;
delayms(100);
P2=table[num];
用单片机和两个共阳极数码管,控制依次显示0到59,时间间隔约0.5,程序停止)
for(num=0;
voiddelayms(uintxms)//延时子程序
for(y=300;
//申明U2锁存器锁存端段选
//打开U2锁存端
用单片机和共阳极数码管,控制依次显示0到9,时间间隔约0.5s;
)
ucharnum;
10;
P1=table[num];
//延时500毫秒约0.3秒
P2=table[num];
dula2=0;
//关闭U2锁存器
用定时器0的方式1实现第一个灯管以200ms闪烁;
用定时器1的方式1实现数码管前两位59s循环计时)
sbitdula=P2^6;
sbitwela=P2^7;
//申明U2锁存器锁存位选
sbitled1=P1^0;
//申明灯1点0
0x39,0x5e,0x79,