第一次發(fā)帖如有不足望指正。這個是我今天制作的.
原理圖是用proteus仿真軟件做的。存在不足。在定時器那快,計時速度大約快了1倍。所以最后我通過增加循環(huán)的方式大致做到1S計時。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
1.png (74.48 KB, 下載次數(shù): 36)
下載附件
2017-12-3 19:36 上傳
也希望有大佬指出我的問題,幫助我,謝謝。
2.png (74.81 KB, 下載次數(shù): 27)
下載附件
2017-12-3 19:37 上傳
這是運行起來的圖,前兩位是分鐘,后兩位是秒。
0-99計數(shù)的另一做法單片機源程序如下:
- #include<reg51.h>
- sbit key1=P1^5;//開始按鍵
- sbit key2=P1^6;
- sbit key3=P1^7;
- #define uchar unsigned char
- #define uint unsigned int
- uchar seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- uchar counter=0,second=0,second_1=0,second_0=0,min=0,min_1=0,min_0=0;
-
- void delay(uint m)
- {
- uint i,j;
- for(i=0;i<m;i++)
- for(j=0;j<10;j++);
- }
- void display(void)
- {
- P2=seg[second_1];
- P3=0x02;
- delay(20);
- P3=0x00;
- P2=seg[second_0];
- P3=0x01;
- delay(20);
- P3=0x00;
- P2=seg[min_0];
- P3=0x04;
- delay(20);
- P3=0x00;
- P2=seg[min_1];
- P3=0x08;
- delay(20);
- P3=0x00;
- }
- void key(void)
- {
- if(key1==0)//判斷按鍵是否被按下
- delay(10);//按鍵消抖*/
- if(key1==0)//再次判斷是否被下
- {
- EA=1;
- TR0=1;
- while(!key1)//等待按鍵釋放
- {
- display( );
- }
- }
- if(key2==0)//判斷按鍵是否被按下
- delay(10);//按鍵消抖*/
- if(key2==0)//再次判斷是否被下
- {
- display();
- EA=0;
- if(min==60)min=0;
- while(!key2)//等待按鍵釋放
- {
- display( );
- }
- }if(key3==0)//判斷按鍵是否被按下
- delay(10);//按鍵消抖*/
- if(key3==0)//再次判斷是否被下
- {
- second=0;
- min=0;
- while(!key3)//等待按鍵釋放
- {
- display( );
- }
- }
- }
-
-
- void main( )
- {
- TMOD=0X01;
- TL0=0X3C;
- TH0=0XB0;
- ET0=1;
-
- while(1)
- {
- key();
- min_0=min%10;
- min_1=min/10;
- second_1=second/10;
- second_0=second%10;
- display( );
- }
- }
- void timer()interrupt 1
- {
- ET0=0;
- TL0=0X3C;
- TH0=0XB0;
- counter++;
- if(counter==40){
- counter=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
0.png (18.18 KB, 下載次數(shù): 44)
下載附件
2017-12-3 23:07 上傳
所有資料51hei提供下載:
簡易時鐘.rar
(49.02 KB, 下載次數(shù): 14)
2017-12-3 19:35 上傳
點擊文件名下載附件
簡易時鐘 下載積分: 黑幣 -5
|