秒表題目要求:
應(yīng)用AT89C51的定時器設(shè)計(jì)一個2位的LED數(shù)碼顯示作為“秒表”:顯示時間為00~99s,每秒自動加1,設(shè)計(jì)一個“開始”鍵,按下“開始”鍵秒表開始計(jì)時。設(shè)計(jì)一個“復(fù)位”鍵,按下“復(fù)位”鍵后,秒表從0開始計(jì)時。
上電系統(tǒng)默認(rèn)顯示00
2.按下開始鍵,秒表計(jì)數(shù)開始
3.秒表到達(dá)99
4.按下復(fù)位從0開始
單片機(jī)源程序如下:
- #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};//數(shù)碼管碼表
- uchar num,t,shi,ge;
- //------------------------------------
- void init();//定時器初始化
- void timer0();//
- void display();//顯示
- void delay(uchar);
- sbit KEY1 = P3^6;//開始
- sbit KEY2 = P3^7;//復(fù)位
- void main()//主函數(shù)入口
- {
- init();//初始化
- while(1)
- {
- timer0();//查詢時間
- display();//顯示
- if(KEY1 == 0)//開始
- {
- if(TR0 == 0)//定時器沒有打開的時候
- {
- t = 0;
- num = 0;
- TR0=1;
- }
- }
- else if(KEY2 == 0)//復(fù)位
- {
- TR0 = 0; //關(guān)閉定時器
- TF0 = 0;//清楚時間溢出標(biāo)志
- t = 0;
- num = 0;
- TR0=1;
- }
-
- }
- }
- void init()//定時器初始化部分
- {
- num=t=0; //清楚數(shù)據(jù)
- TMOD=0x01; //定時器初始化
- TH0=(65536-15536)/256;//定時器賦初值 定時50ms
- TL0=(65536-15536)%256;
- EA=1;
- ET0=1;
- }
- void timer0()
- {
- if(TF0==1) //查詢溢出的時間
- {
- TF0=0; //清楚溢出標(biāo)志
- t++;
- if(t==20) //累計(jì)時間到1S
- {
- t=0;
- num++;
- }
- }
- }
- void display() //顯示
- {
- if(num >= 99)
- {
- //num = 0; // 數(shù)據(jù)顯示限制 最大為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--);
- }
復(fù)制代碼
全部資料51hei下載地址:
0到99秒表數(shù)碼管顯示.rar
(265.93 KB, 下載次數(shù): 367)
2018-11-22 15:42 上傳
點(diǎn)擊文件名下載附件
仿真及程序
|