第一次发帖如有不足望指正。这个是我今天制作的.
原理图是用proteus仿真软件做的。存在不足。在定时器那快,计时速度大约快了1倍。所以最后我通过增加循环的方式大致做到1S计时。
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
也希望有大佬指出我的问题,帮助我,谢谢。
这是运行起来的图,前两位是分钟,后两位是秒。
0-99计数的另一做法单片机源程序如下:
- #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黑下载附件…………
复制代码
所有资料51hei提供下载:
简易时钟.rar
(49.02 KB, 下载次数: 14)
|