|
功能 :倒計(jì)時(shí)八數(shù)碼管顯示,最小1秒,最大24小時(shí);計(jì)時(shí)結(jié)束蜂鳴器報(bào)警響10次;如果做實(shí)物,可以用繼電器作開關(guān)控制強(qiáng)電。
設(shè)置方法:
1.按K1鍵第一次,秒位閃爍,短按加減鍵加減1,長(zhǎng)按連加連減;
2.按K1鍵第二次,分位閃爍,短按加減鍵加減1,長(zhǎng)按連加連減;
3.按K1鍵第三次,時(shí)位閃爍,短按加減鍵加減1,長(zhǎng)按連加連減;
4.按K1鍵第四次,退出設(shè)置;
5.按K4鍵啟動(dòng)倒計(jì)時(shí)(非設(shè)置狀態(tài)下時(shí)分秒其中之一不為0才能啟動(dòng)計(jì)時(shí));
6.計(jì)時(shí)的時(shí)候,按K4鍵1次可以暫停計(jì)時(shí)并關(guān)閉輸出,再按一次恢復(fù)計(jì)時(shí)并啟動(dòng)輸出,按K6鍵停止計(jì)時(shí)并清零,關(guān)閉輸出;
7.非計(jì)時(shí)狀態(tài)下,K5手動(dòng)開關(guān)控制輸出。
完整工程文件見附件
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
QQ截圖20180516104608.jpg (172.85 KB, 下載次數(shù): 155)
下載附件
2018-5-16 11:05 上傳
單片機(jī)源程序:
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- #define duan P1
- #define wei P3
- sbit key1 = P2^3; //設(shè)置
- sbit key2 = P2^4; //加
- sbit key3 = P2^5; //減
- sbit key4 = P2^6; //啟動(dòng)
- sbit key5 = P2^7; //手動(dòng)
- sbit out = P2^2; //輸出控制 ,低電平有效
- sbit di = P2^0; //蜂鳴器
- bit flag=0,flag1=0,shan=0;
- uchar knum,shan_cont;
- uchar shi=0,fen=0,miao=0,cont,cont1,cont2;
- uchar code duanma[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰段碼表
- //uchar code weima[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//位碼
- uchar code weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位碼 加反相器用
- void delay(uint z)
- {
- uint x,y;
- for(x=z; x>0; x--)
- for(y=114; y>0; y--);
- }
- void init()
- {
- TMOD |= 0x01; //定時(shí)器0 工作方式1
- TH0 = (65536-50000)/256; //50ms初值 @12MHz
- TL0 = (65536-50000)%256;
- EA = 1;
- ET0 = 1;
- TR0 = 1;
- }
- void dispaly(uchar shi,uchar fen,uchar miao)
- {
-
- duan = 0;
- wei = weima[5];
- duan = 0x40;
- delay(1);
- duan = 0;
- wei = weima[2];
- duan = 0x40;
- delay(1);
- if(knum==0)
- {
- duan = 0;
- wei = weima[7];
- duan = duanma[shi/10];
- delay(1);
-
- duan = 0;
- wei = weima[6];
- duan = duanma[shi%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[4];
- duan = duanma[fen/10];
- delay(1);
-
- duan = 0;
- wei = weima[3];
- duan = duanma[fen%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[1];
- duan = duanma[miao/10];
- delay(1);
-
- duan = 0;
- wei = weima[0];
- duan = duanma[miao%10];
- delay(1);
- }
- else
- {
- if(knum==1)
- {
- if(shan==1)
- {
- duan = 0;
- wei = weima[7];
- duan = duanma[shi/10];
- delay(1);
-
- duan = 0;
- wei = weima[6];
- duan = duanma[shi%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[4];
- duan = duanma[fen/10];
- delay(1);
-
- duan = 0;
- wei = weima[3];
- duan = duanma[fen%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[1];
- duan = duanma[miao/10];
- delay(1);
-
- duan = 0;
- wei = weima[0];
- duan = duanma[miao%10];
- delay(1);
- }
- else
- {
- duan = 0;
- wei = weima[7];
- duan = duanma[shi/10];
- delay(1);
-
- duan = 0;
- wei = weima[6];
- duan = duanma[shi%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[4];
- duan = duanma[fen/10];
- delay(1);
-
- duan = 0;
- wei = weima[3];
- duan = duanma[fen%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[1];
- duan = 0;
- delay(1);
-
- duan = 0;
- wei = weima[0];
- duan = 0;
- delay(1);
-
- }
- }
-
- if(knum==2)
- {
- if(shan==1)
- {
- duan = 0;
- wei = weima[7];
- duan = duanma[shi/10];
- delay(1);
-
- duan = 0;
- wei = weima[6];
- duan = duanma[shi%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[4];
- duan = duanma[fen/10];
- delay(1);
-
- duan = 0;
- wei = weima[3];
- duan = duanma[fen%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[1];
- duan = duanma[miao/10];
- delay(1);
-
- duan = 0;
- wei = weima[0];
- duan = duanma[miao%10];
- delay(1);
- }
- else
- {
- duan = 0;
- wei = weima[7];
- duan = duanma[shi/10];
- delay(1);
-
- duan = 0;
- wei = weima[6];
- duan = duanma[shi%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[4];
- duan = 0;
- delay(1);
-
- duan = 0;
- wei = weima[3];
- duan = 0;
- delay(1);
-
-
- duan = 0;
- wei = weima[1];
- duan = duanma[miao/10];
- delay(1);
-
- duan = 0;
- wei = weima[0];
- duan = duanma[miao%10];
- delay(1);
-
- }
- }
-
- if(knum==3)
- {
- if(shan==1)
- {
- duan = 0;
- wei = weima[7];
- duan = duanma[shi/10];
- delay(1);
-
- duan = 0;
- wei = weima[6];
- duan = duanma[shi%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[4];
- duan = duanma[fen/10];
- delay(1);
-
- duan = 0;
- wei = weima[3];
- duan = duanma[fen%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[1];
- duan = duanma[miao/10];
- delay(1);
-
- duan = 0;
- wei = weima[0];
- duan = duanma[miao%10];
- delay(1);
- }
- else
- {
- duan = 0;
- wei = weima[7];
- duan = 0;
- delay(1);
-
- duan = 0;
- wei = weima[6];
- duan = 0;
- delay(1);
-
-
- duan = 0;
- wei = weima[4];
- duan = duanma[fen/10];
- delay(1);
-
- duan = 0;
- wei = weima[3];
- duan = duanma[fen%10];
- delay(1);
-
-
- duan = 0;
- wei = weima[1];
- duan = duanma[miao/10];
- delay(1);
-
- duan = 0;
- wei = weima[0];
- duan = duanma[miao%10];
- delay(1);
-
- }
- }
- }
- }
- void keysan()
- {
- uchar i;
- if(knum==0)
- {
- if(key4 == 0 ) //啟動(dòng) 暫停
- {
-
- i++; //消抖
- if( (key4 == 0 && i>12 )|| (miao != 0) || (fen != 0) || (shi != 0) )
- { //時(shí)分秒都為0時(shí),不能啟動(dòng)輸出,只要其中之一不為0,就能啟動(dòng)輸出
- i=0;
- while(!key4)
- dispaly(shi,fen,miao);
- flag = !flag;
- out = !out;
- }
- }
- }
-
- if(key5 == 0 ) //手動(dòng)開關(guān),在沒有倒計(jì)時(shí)的狀態(tài)下才有用
- {
- delay(5);
- // i++;
- if( key5 == 0 )
- {
- // i=0;
- while(!key5)
- dispaly(shi,fen,miao);
- if(shi==0 && fen==0 && miao==0)
- out = !out;
- }
- }
-
- if(key1==0) //設(shè)置
- {
- i++;
- if(key1 ==0 && i>12)
- {
- i=0;
- while(!key1)
- dispaly(shi,fen,miao);
- knum++;
- if(knum==4)
- knum = 0;
- }
- }
- if(knum==1)
- {
- if(key2==0)
- {
- i++;
- if(key2 ==0 && i>20)
- {
- i=0;
- miao++;
- if(miao==60)
- miao = 0;
- }
- }
-
- if(key3==0)
- {
- i++;
- if(key3 ==0 && i>20)
- {
- i=0;
- miao--;
- if(miao==255)
- miao = 59;
- }
- }
- }
- if(knum==2)
- {
- if(key2==0)
- {
- i++;
- if(key2 ==0 && i>20)
- {
- i=0;
- fen++;
- if(fen==60)
- fen = 0;
- }
- }
-
- if(key3==0)
- {
- i++;
- if(key3 ==0 && i>20)
- {
- i=0;
- fen--;
- if(fen==255)
- fen = 59;
- }
- }
- }
- if(knum==3)
- {
- if(key2==0)
- {
- i++;
- if(key2 ==0 && i>20)
- {
- i=0;
- shi++;
- if(shi==24)
- shi = 0;
- }
- }
-
- if(key3==0)
- {
- i++;
- if(key3 ==0 && i>20)
- {
- i=0;
- shi--;
- if(shi==255)
- shi = 23;
- }
- }
- }
- }
- void main()
- {
- init();
- wei = 0x00;
- while(1)
- {
- keysan();
- dispaly(shi,fen,miao);
- if(shi==0 && fen==0 && miao==0 && flag == 1) //倒計(jì)時(shí)時(shí)間到
- {
- flag=0; //停止計(jì)時(shí)
- flag1=1; //啟動(dòng)蜂鳴器標(biāo)志置1
- out=1; //關(guān)閉輸出
- }
- }
- }
- void timer() interrupt 1
- {
- TH0 = (65536-50000)/256; //50毫秒初值
- TL0 = (65536-50000)%256;
-
- if(flag)
- {
- cont++;
- if(cont == 20)
- {
- cont = 0;
- miao--;
- if(miao==255)
- {
- miao=59;
- fen--;
- if(fen==255)
- {
- fen=59;
- shi--;
- if(shi==255)
- {
- shi=0;
- }
- if(shi==0)
- fen=59;
- if(fen==0 && shi==0)
- fen=0;
- }
- }
- }
- }
- if(flag1) //倒計(jì)時(shí)時(shí)間到,啟動(dòng)蜂鳴器
- {
- cont1++;
- if(cont1==10) //500ms蜂鳴器響一次
- {
- cont1=0;
- di=!di;
- cont2++;
- if(cont2==20)//500*20=10000ms=10s,蜂鳴器響10s后停止
- {
- cont2=0;
- flag1=0;
- }
- }
- }
- if(knum != 0)
- {
- shan_cont++;
- if(shan_cont==5) //250ms閃爍時(shí)間
- {
- shan_cont=0;
- shan = !shan;
- }
- }
- }
復(fù)制代碼
全部資料51hei下載地址:
24小時(shí)倒計(jì)時(shí)仿真文件.rar
(180.63 KB, 下載次數(shù): 324)
2018-5-16 11:06 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|