1)用單片機STC89C52RC設計一個8位LED數碼顯示秒表,顯示時間為00S~99S。每秒自動加一。
2)設計一個“開始”按鍵,“復位”按鍵。
3)接通電源后,從00開始計時一直到99結束。
4)采用proteus\protel軟件仿真電路,給出并分析仿真結果。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
仿真圖
壓縮包內文件
單片機源程序如下:
- #include "reg52.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 = P1^0;//開始
- sbit KEY2 = P1^1;//復位
- 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--);
- }
復制代碼
所有資料51hei提供下載:
秒表設計.zip
(72.32 KB, 下載次數: 74)
2018-12-8 11:54 上傳
點擊文件名下載附件
仿真圖+源程序
|