51单片机常见程序附带注释.docx
- 文档编号:23797662
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:43
- 大小:22.06KB
51单片机常见程序附带注释.docx
《51单片机常见程序附带注释.docx》由会员分享,可在线阅读,更多相关《51单片机常见程序附带注释.docx(43页珍藏版)》请在冰豆网上搜索。
51单片机常见程序附带注释
51单片机常见程序
附带注释
三位数分离成3个一位数,截取
bai=num/100;//输出百位数
shi=num%100/10;//输出十位数
ge=num/10;//输出个位数
#include
当时间约为20ms,形成动态扫描,看上去全亮。
#include
#defineuintunsignedint//无符号整型,占16位数,表示围0~65536
#defineucharunsignedchar//无符号字符型占八位数,表示围0~255
voiddelayms(uint);
ucharaa;//定义变量
voidmain()
{
aa=0xfe;
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>0;j--);
}
#include
现在时间较长,多以是亮灭的流动,当时间约为20ms,形成动态扫描,看上去全亮。
#include
#defineuintunsignedint//无符号整型,占16位数,表示围0~65536
#defineucharunsignedchar//无符号字符型占八位数,表示围0~255
voiddelayms(uint);
ucharaa;//定义变量
voidmain()
{
aa=0xfe;
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>0;j--);
}
#include
用单片机和两个共阴极数码管:
使用单片机的引脚1和2,控制两个数码管静态显示00到59)
#defineucharunsignedchar
#defineuintunsignedint
sbitdula1=P1^7;//申明U1锁存器锁存端段选
sbitdula2=P0^7;//申明U1锁存器锁存端段选
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;//打开U1锁存端
P2=table[num1];//送入位选信号
dula1=0;//关闭U1锁存器
delayms(100);//延时500毫秒约0.3s
}
}
}
}
voiddelayms(uintxms)
{
uintx,y;
for(x=xms;x>0;x--)//x=xms即延时约为xms毫秒
for(y=200;y>0;y--);
}
#include
用单片机和两个共阴极数码管)
#defineucharunsignedchar
#defineuintunsignedint
sbitdula1=P1^7;//申明U1锁存器锁存端段选
sbitdula2=P2^7;//申明U1锁存器锁存端段选
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<=9;num1++)
{
dula1=1;//打开U1锁存端
P1=table[num1];//送入位选信号
dula1=0;//关闭U1锁存器
delayms(1000);//延时500毫秒约0.3s
for(num=0;num<=9;num++)
{
dula2=1;//打开U1锁存端
P1=table[num];//送入位选信号
dula2=0;//关闭U1锁存器
delayms(1000);//延时500毫秒约0.3s
}
}
}
}
voiddelayms(uintxms)
{
uintx,y;
for(x=xms;x>0;x--)//x=xms即延时约为xms毫秒
for(y=200;y>0;y--);
}
有语法错误
#include
#defineucharunsignedchar//无符号字符型占八位数,表示围0~255
#defineuintunsignedint//无符号整型,占16位数,表示围
sbitdula1=P1^6;//申明U1锁存器锁存端段选
sbitdula2=P0^7;//申明U1锁存器锁存端段选
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,//共阳极数字:
0123456789abcdefg
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xcd,0xa1,0x86,0x8e};
voiddelayms(uint);
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;//装初值12.00M晶振定时50s数为50000
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;//打开U1锁存端
P1=table[shi];//送入位选信号
dula2=0;//关闭U1锁存器
delayms(1175);//延时0.1毫秒
}
}
voiddelayms(uintxms)//延时子程序
{
uinti,j;
for(i=xms;i>0;i--)//i=xms即延时约为xms毫秒
for(j=110;j>0;j--);
}
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;//个位数
}
#include
控制时间24小时一循环)
#defineucharunsignedchar
#defineuintunsignedint
sbitdula1=P1^7;//申明U1锁存器锁存端段选
sbitdula2=P0^7;//申明U1锁存器锁存端段选
ucharnum,num1,num2,num3,num4;
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,//共阳极数字:
0123456789abcdefg
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xcd,0xa1,0x86,0x8e};
voiddelayms(uint);
voidmain()
{
while
(1)
{
for(num3=0;num3<=23;num3++)//每天24小时进位一
{
for(num2=0;num2<=59;num2++)//每60分进位一
{
for(num1=0;num1<=5;num1++)//每6*10s进位一
{
dula2=1;//打开U1锁存端
P1=table[num1];//送入位选信号
dula2=0;//关闭U1锁存器
delayms(1175);//延时0.1毫秒
for(num=0;num<=9;num++)//每1s进位一
{
dula2=1;//打开U1锁存端
P1=table[num];//送入位选信号
dula2=0;//关闭U1锁存器
delayms(1000);//延时0.1毫秒
}
}
}
}
}
}
voiddelayms(uintxms)
{
uintx,y;
for(x=xms;x>0;x--)//x=xms即延时约为xms毫秒
for(y=110;y>0;y--);
}
#include
控制时间24小时一循环,蜂鸣器每过一段时间响一次)
#defineucharunsignedchar
#defineuintunsignedint
sbitdula1=P1^7;//申明U1锁存器锁存端段选
sbitdula2=P2^7;//申明U1锁存器锁存端段选
sbitf=P0;//声明单片机P0口的第一位,也就是三极管基级的位置单片机第39接口
ucharnum,num1,num2,num3,num4;
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,//共阳极数字:
0123456789abcdefg
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xcd,0xa1,0x86,0x8e};
voiddelayms(uint);
voidmain()
{
while
(1)
{
for(num3=0;num3<=23;num3++)//每天进位一
{
for(num2=0;num2<=59;num2++)//每60分进位一
{
for(num4=0;num2<=59;num4++)//每60s进位一
{
f=0;//控制蜂鸣器的不响
for(num=0;num<=9;num++)//每1ms进位一
{
dula2=1;//打开U1锁存端
P2=table[num];//送入位选信号
dula2=0;//关闭U1锁存器
delayms(1074);//延时0.1毫秒
}
f=1;//控制蜂鸣器的响
delayms(1000);
}
}
}
}
}
voiddelayms(uintxms)
{
uintx,y;
for(x=xms;x>0;x--)//x=xms即延时约为xms毫秒
for(y=10;y>0;y--);
}
#include
用单片机和两个共阳极数码管,控制依次显示0到59,然后循环,有合适的时间间隔,程序停止)
#defineucharunsignedchar
#defineuintunsignedint
sbitdula1=P1^7;//申明U1锁存器锁存端段选
sbitdula2=P2^7;//申明U1锁存器锁存端段选
ucharnum,num1;
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,//共阳极数字:
0123456789abcdefg
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xcd,0xa1,0x86,0x8e};
voiddelayms(uint);
voidmain()
{
while
(1)
{
for(num1=0;num1<6;num1++)
{
dula1=1;//打开U1锁存端
P1=table[num1];//送入位选信号
dula1=0;//关闭U1锁存器
delayms(100);//延时500毫秒约0.3s
for(num=0;num<=9;num++)
{
dula2=1;//打开U1锁存端
P2=table[num];//送入位选信号
dula2=0;//关闭U1锁存器
delayms(100);//延时500毫秒约0.3s
}
}
}
}
voiddelayms(uintxms)
{
uintx,y;
for(x=xms;x>0;x--)//x=xms即延时约为xms毫秒
for(y=200;y>0;y--);
}
#include
用单片机和两个共阳极数码管,控制依次显示0到59,时间间隔约0.5,程序停止)
#defineucharunsignedchar
#defineuintunsignedint
sbitdula1=P1^7;//申明U1锁存器锁存端段选
sbitdula2=P2^7;//申明U1锁存器锁存端段选
ucharnum,num1;
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,//共阳极数字:
0123456789abcdefg
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xcd,0xa1,0x86,0x8e};
voiddelayms(uint);
voidmain()
{
while
(1)
{
for(num=0;num1<6;num1++)
{
dula1=1;//打开U1锁存端
P1=table[num1];//送入位选信号
dula1=0;//关闭U1锁存器
delayms(100);//延时500毫秒约0.3s
for(num=0;num<=9;num++)
{
dula2=1;//打开U1锁存端
P2=table[num];//送入位选信号
dula2=0;//关闭U1锁存器
delayms(100);//延时500毫秒约0.3s
}
}
}
}
voiddelayms(uintxms)//延时子程序
{
uintx,y;
for(x=xms;x>0;x--)//x=xms即延时约为xms毫秒
for(y=300;y>0;y--);
}
#include
用单片机和两个共阳极数码管,控制依次显示0到59,时间间隔约0.5,程序停止)
#defineucharunsignedchar
#defineuintunsignedint
sbitdula1=P1^7;//申明U1锁存器锁存端段选
sbitdula2=P2^7;//申明U2锁存器锁存端段选
ucharnum,num1;
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,//共阳极数字:
0123456789abcdefg
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xcd,0xa1,0x86,0x8e};
voiddelayms(uint);
voidmain()
{
while
(1)
{
for(num=0;num1<6;num1++)
{
dula1=1;//打开U1锁存端
P1=table[num1];//送入位选信号
dula1=0;//关闭U1锁存器
delayms(100);//延时500毫秒约0.3s
for(num=0;num<=9;num++)
{
dula2=1;//打开U2锁存端
P2=table[num];//送入位选信号
dula2=0;//关闭U1锁存器
delayms(100);//延时500毫秒约0.3s
}
}
}
}
voiddelayms(uintxms)
{
uintx,y;
for(x=xms;x>0;x--)//x=xms即延时约为xms毫秒
for(y=300;y>0;y--);
}
#include
用单片机和共阳极数码管,控制依次显示0到9,时间间隔约0.5s;)
#defineucharunsignedchar
#defineuintunsignedint
sbitdula1=P1^7;//申明U1锁存器锁存端段选
sbitdula2=P2^7;//申明U2锁存器锁存端段选
ucharnum;
ucharcodetable[]={
0xc0,0xf9,0xa4,0xb0,//共阳极数字:
0123456789abcdefg
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xcd,0xa1,0x86,0x8e};
voiddelayms(uint);
voidmain()
{
while
(1)
{
for(num=0;num<10;num++)
{
dula1=1;//打开U1锁存端
P1=table[num];//送入位选信号
dula1=0;//关闭U1锁存器
delayms(100);//延时500毫秒约0.3秒
dula2=1;//打开U2锁存端
P2=table[num];//送入位选信号
dula2=0;//关闭U2锁存器
delayms(100);//延时500毫秒约0.3秒
}
}
}
voiddelayms(uintxms)
{
uintx,y;
for(x=xms;x>0;x--)//x=xms即延时约为xms毫秒
for(y=300;y>0;y--);
}
#include
用定时器0的方式1实现第一个灯管以200ms闪烁;用定时器1的方式1实现数码管前两位59s循环计时)
#defineucharunsignedchar//无符号字符型占八位数,表示围0~255
#defineuintunsignedint//无符号整型,占16位数,表示围
sbitdula=P2^6;//申明U1锁存器锁存端段选
sbitwela=P2^7;//申明U2锁存器锁存位选
sbitled1=P1^0;//申明灯1点0
ucharcodetable[]={//共阴极数码管0123456789abcdef
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 常见 程序 附带 注释