标题: 单片机倒计时编程求注释 [打印本页]
作者: MJ1281360478 时间: 2017-11-25 17:51
标题: 单片机倒计时编程求注释
本人才学单片机,准备从看别人的程序学起,已自学了一些简单的程序知识,但不足以读懂以下程序,希望有大神帮忙!!!这是一个倒计时器的程序。
- #include<reg51.h>
- sbit kh=P1^0;
- 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; //为什么是160
- while(x--) //递减函数
- {
- while(a--);
- a=160;
- }
- }
- main()
- {
- TH0=(65536-50000)/256; //这个计算不懂
- TL0=(65536-50000)%256;
- TMOD=1; //这些赋值什么意思
- TR0=1;
- ET0=1;
- EA=1;
- while(1)//这是函数里面的内容写的是什么
- {
- P0=table[hour/10];
- P2=0x20;
- delayms(1);
- P2=0;
- P0=table[hour%10];
- P2=0x10;
- delayms(1);
- P2=0;
- P0=table[minute/10];
- P2=0x08;
- delayms(1);
- P2=0;
- P0=table[minute%10];
- P2=0x04;
- delayms(1);
- P2=0;
- P0=table[second/10];
- P2=0x02;
- delayms(1);
- P2=0;
- P0=table[second%10];
- P2=0x01;
- delayms(1);
- P2=0;
- 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;
- }
- }
- }
- }
- }
复制代码
作者: 999333 时间: 2017-11-25 20:55
一:为什么是160;因为160时为1ms;二:TH0=(65536-50000)/256; //这个计算不懂 TL0=(65536-50000)%256;定时器最高可以65536(相当于65ms左右)TH0为高位(65536-50000)相当于得到50ms然后整除256(256是因为单片机为8位机)得出高四位,后面TL0得的取余是第四位;三:while(1)//这是函数里面的内容写的是什么;那是写把数据拆分分别放到数组中;四:void t0() interrupt 1 { TH0=(65536-50000)/256; //为什么这里又有这个计算 TL0=(65536-50000)%256;是因为要在定时器是要重置
作者: zl2168 时间: 2017-11-26 11:52
实例96 能预置初值的倒计时秒表
先Proteus仿真一下,确认有效。
以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil C和Proteus》清华大学出版社ISBN 978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,书中电路和程序设计有详细说明,电路与程序真实可靠可信可行,程序语句条条有注解。若需99.99秒,硬件电路增加一位595。软件程序增加0.01s(10ms)计数器,并修改相应计数显示程序。仿真电路和Hex文件能在清华出版社网站免费下载,程序源代码只能到书上看了。到图书馆借,或到新华书店翻阅,或到网上书店打折购买。
作者: MJ1281360478 时间: 2017-11-28 10:51
我仿真跑了一下程序,重置按钮不起作用,是什么原因
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |