60分鐘100秒倒計時,數(shù)碼管實現(xiàn)。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機源程序如下:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar u,j,sum,qian,bai,shi,ge;
- char fen,miao;
- uchar code table[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};
- sbit wei1=P2^3;
- sbit wei2=P2^2;
- sbit wei3=P2^1;
- sbit wei4=P2^0;
-
-
- sbit k5=P1^4; // 復(fù)位
- sbit k6=P1^5; //暫停或繼續(xù)
-
-
- sbit duan=P3^2;
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void dsq();//定時器
- void anjian() //按鍵子函數(shù)
- {
- if(k6==0) //開始、復(fù)位
- {
- delay(10);
- if(k6==0)
- {
- EA=!EA;
-
- }
- while(!k6);
- delay(10);
- while(!k6);
- }
- if(k5==0)
- {
- delay(10);
- if(k5==0)
- {
- fen=60;
- miao=99;
- }
- while(!k5);
- delay(10);
- while(!k5);
- }
- }
- void display() //顯示子程序
- {
- wei1=0;
- duan=1;
- P0=table[ge];
- duan=0;
- delay(3);
- wei1=1;
-
- wei2=0;
- duan=1;
- P0=table[shi];
- duan=0;
- delay(3);
- wei2=1;
- wei3=0;
- duan=1;
- P0=table1[bai];
- duan=0;
- delay(3);
- wei3=1;
- wei4=0;
- duan=1;
- P0=table[qian];
- duan=0;
- delay(3);
- wei4=1;
-
- }
- void main()
- {
- dsq();
- fen=60;
- miao=0;
-
- while(1)
- {
- anjian();
- display();
- if(u==20)
- {
- u=0;
- qian=fen/10;
- bai=fen%10;
- shi=miao/10;
- ge=miao%10;
- miao--;
-
- }
- if(miao==-1)
- {
- miao=99;
- fen--;
- }
- if(fen==-1)
- {
- fen=60;
- miao=0;
- }
-
-
- }
- }
-
- void T0_time() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- u++;
-
- }
- void dsq()//定時器
- {
- TMOD=0X11;
- TH0=(65535-50000)/256;
- TL0=(65535-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- }
復(fù)制代碼
所有資料51hei提供下載:
60分鐘100秒倒計時仿真.rar
(119.61 KB, 下載次數(shù): 71)
2020-3-30 23:01 上傳
點擊文件名下載附件
|