标题: 单片机0到99秒表数码管显示程序 [打印本页]
作者: DAL 时间: 2018-11-1 15:54
标题: 单片机0到99秒表数码管显示程序
秒表题目要求:
应用AT89C51的定时器设计一个2位的LED数码显示作为“秒表”:显示时间为00~99s,每秒自动加1,设计一个“开始”键,按下“开始”键秒表开始计时。设计一个“复位”键,按下“复位” 键后,秒表从0开始计时。
单片机源程序如下:
- #include "reg51.h"
- #define uchar unsigned char
- #define uint unsingned int
- #define LED P0
- uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数码管码表
- uchar num,t,shi,ge;
- //------------------------------------
- void init();//定时器初始化
- void timer0();//
- void display();//显示
- void delay(uchar);
-
- sbit KEY1 = P3^6;//开始
- sbit KEY2 = P3^7;//复位
-
- void main()//主函数入口
- {
- init();//初始化
- while(1)
- {
- timer0();//查询时间
- display();//显示
- if(KEY1 == 0)//开始
- {
- if(TR0 == 0)//定时器没有打开的时候
- {
- t = 0;
- num = 0;
- TR0=1;
- }
- }
- else if(KEY2 == 0)//复位
- {
- TR0 = 0; //关闭定时器
- TF0 = 0;//清楚时间溢出标志
- t = 0;
- num = 0;
- TR0=1;
- }
-
- }
- }
-
- void init()//定时器初始化部分
- {
- num=t=0; //清楚数据
- TMOD=0x01; //定时器初始化
- TH0=(65536-15536)/256;//定时器赋初值 定时50ms
- TL0=(65536-15536)%256;
- EA=1;
- ET0=1;
- }
-
- void timer0()
- {
- if(TF0==1) //查询溢出的时间
- {
- TF0=0; //清楚溢出标志
- t++;
- if(t==20) //累计时间到1S
- {
- t=0;
- num++;
- }
- }
- }
-
- void display() //显示
- {
- if(num >= 99)
- {
- //num = 0; // 数据显示限制 最大为99
- if(TR0)
- TR0 = 0;
- }
- shi=num/10; //显示拆分
- ge=num%10;
- P2=0X00; //显示消影
- P0=0XFF;
- P2=0x01; //显示第一位
- LED=tab[shi];
- delay(5);//延时
- P2=0X00; //显示消影
- P0=0XFF;
- P2=0x02; //显示第二位
- LED=tab[ge];
- delay(5);//延时
- }
- void delay(uchar x) //延时子程序
- {
- int i,j;
- for(i=x;i>0l;i--)
- for(j=255;j>0;j--);
- }
复制代码
作者: 快乐眼泪 时间: 2018-11-1 18:49
加个暂停按键会不会更好
作者: 187236458 时间: 2018-11-6 20:32
0到999.9秒会做吗
作者: Liuliling 时间: 2020-5-26 10:59
我这样做的,但是数码管怎么不亮啊
作者: 胖啊啊 时间: 2020-6-8 18:56
三极管怎么找呜呜
作者: flyzzie 时间: 2020-6-17 15:36
如果改成0-9.9秒,每0.1秒加1,是不是只要把 if(t==20) 改成==2即可?
作者: SOLO999 时间: 2020-6-17 20:27
加个暂停按键会不会更好
作者: wozhendebuhui 时间: 2022-5-9 01:06
Liuliling 发表于 2020-5-26 10:59
我这样做的,但是数码管怎么不亮啊
我也是
作者: liuyiyi 时间: 2022-5-9 08:23
其实再加什么功能 是可以的 修改程序
作者: 疯了疯了好 时间: 2022-5-14 12:36
倒计时的话,应该怎么改啊?
作者: wukouyyq 时间: 2022-5-16 17:14
按你的做了,仿真不行呀,两个数码管显示一样的,并伴有乱码
作者: wukouyyq 时间: 2022-5-16 17:32
你是不是选的数码管是共阳极的?还有三极管是PNP的
我是照着图弄的,程序显示 是双数字,并有乱码?
这个为什么不能仿真出两个不用的数字,是不是我的PROTUES有问题?我一直在怀疑这个
我的PROTUES 是 7.10版
作者: wukouyyq 时间: 2022-5-16 17:38
倒计时可以改的,我正在弄 这个显示不了的问题,回头再做倒计时
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |