標題: 單片機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.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |