标题: 关于单片机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)

以上摘自张志良编著《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