采用80c52單片機,制作4位秒表,精確到0.01s。有啟動、暫停、清零按鍵。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
4位秒表動態.png (74.53 KB, 下載次數: 54)
下載附件
2022-11-25 18:31 上傳
4位秒表.png (72.48 KB, 下載次數: 50)
下載附件
2022-11-25 18:29 上傳
51hei.gif (103.72 KB, 下載次數: 52)
下載附件
2022-11-25 19:51 上傳
單片機源程序如下:- #include "reg52.h"
- #define uint unsigned int
- #define uchar unsigned char
- sbit k1=P1^0;
- sbit k2=P1^1;
- sbit k3=P1^2;
- uint num;
- uint sec=0;
- uint ms=0;
- uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,
- 0x92,0x82,0xf8, 0x80,0x90};
- void delay(uint a)
- {
- uint i,j;
- for(i=0;i<a;i++)
- for(j=0;j<120;j++);
-
- }
- void Scankey()
- {
- if(k1==0)
- {
- delay(5);
- if(k1==0)
- {
- TR0=1;
- }
- }
- else if(k2==0)
- {
- delay(5);
- if(k2==0)
- {
- TR0=0;
- }
- }
- else if(k3==0)
- {
- delay(5);
- if(k3==0)
- {
- sec=0;ms=0;
- }
- }
- }
- void Display()
- {
- P2=0x01;
- P0=table[sec/10];
- delay(1);
- P2=0x02;
- P0=table[sec%10]&0x7f;
- delay(1);
-
- P2=0x04;
- P0=table[ms/10];
- delay(1);
- P2=0x08;
- P0=table[ms%10];
- delay(1);
- }
- void Time0()
- {
- TMOD=0x01;
- TH0=(65535-10000)/256;
- TL0=(65535-10000)%256;
- ET0=1;
- EA=1;
- TR0=0;
- }
- /**************
- 四位數碼管顯示
- 00.00-99.99
- 1s=1000ms,定時10ms++
- **************/
- void main()
- {
- Time0();
- while(1)
- {
-
- Display();
- Scankey();
- }
-
- }
- void zd() interrupt 1
- {
- TH0=(65535-10000)/256;
- TL0=(65535-10000)%256;
- ms++;
- if(ms>=100)
- {
- ms=0;
- sec++;
- if(sec>=99)
- {
- sec=0;
- }
- }
- }
復制代碼 Keil代碼與Proteus8.13仿真下載:
4位秒表.zip
(75.13 KB, 下載次數: 62)
2022-11-25 18:30 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|