标题:
关于单片机LED数字倒计时的程序但是看不太懂
[打印本页]
作者:
没工资的新手
时间:
2017-5-2 15:02
标题:
关于单片机LED数字倒计时的程序但是看不太懂
我网上找了一个关于单片机LED数字倒计时的程序但是看不太懂
有没有大神帮我注释一下意思 再弄个protues 仿真电路图
# include <reg51.h>
sbit kh=P1^1;
sbit km=P1^1;
sbit ks=P1^2;
sbit st=P1^3;
sbit b=P3^7;
unsigned char
table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88, 0x83,0xc6,0xa1,0x86,0x8e};
unsigned char i=0,hour=0,minute=0,second=0;
void delayms(unsigned int x)
{ unsigned char a=160;
while(x--) { while(a--); a=160; } }
main() { TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TMOD=1;
TR0=0;
ET0=1;
EA=1;
while(1) {
P0=table[hour/10];
P2=0x20;
delayms(1);
P2=0xff;
P0=table[hour%10];
P2=0x10;
delayms(1);
P2=0xff;
P0=table[minute/10];
P2=0x08;
delayms(1);
P2=0xff;
P0=table[minute%10];
P2=0x04;
delayms(1);
P2=0xff;
P0=table[second/10];
P2=0x02;
delayms(1);
P2=0xff;
P0=table[second%10];
P2=0x01;
delayms(1);
P2=0xff;
if(!kh)
{ delayms(200);
hour++;
if(hour>23)
hour=23; }
else if(!km)
{ delayms(200);
minute++;
if(minute>59)
minute=59; }
else if(!ks)
{ delayms(200);
second++;
if(second>59)
second=59; }
if(!st)
{ delayms(200);
TR0=1; }
if(TR0==1&&hour==0&&minute==0&&second<3) b=!b; delayms(1); } }
void t0() interrupt 1 { TH0=(65536-50000)/256; TL0=(65536-50000)%256;
i++;
if(i>=20)
{ i=0; second--;
if(second>59)
{ second=59;
minute--;
if(minute>59)
{ minute=59;
hour--;
if(hour>23)
{hour=0; minute=0; second=0; TR0=0; } } } } }
作者:
没工资的新手
时间:
2017-5-2 15:42
自己解决算了 !
作者:
zl2168
时间:
2017-5-2 20:55
本帖最后由 zl2168 于 2017-5-2 21:02 编辑
给你介绍一个能仿真、语句有注释的倒计时案例
能预置初值的倒计时秒表
先Proteus仿真一下,确认有效。
实例96 能设置初值的倒计时秒表.rar
(40 KB, 下载次数: 14)
2017-5-2 21:01 上传
点击文件名下载附件
能预置初值的倒计时秒表.jpg
(182.34 KB, 下载次数: 95)
下载附件
2017-5-2 21:02 上传
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,书中电路和程序设计有详细说明,电路与程序真实可靠可信可行,程序语句条条有注解。
作者:
没工资的新手
时间:
2017-5-4 09:58
谢谢了
作者:
_少年放肆的梦
时间:
2017-5-4 23:04
直接用数字电路可以搭出来
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1