|
(一)設(shè)計任務(wù)
1、采用四位LED動態(tài)顯示小時、分單元。
2、具有自動整點(diǎn)報時功能。
3、可以通過四個開關(guān)設(shè)定修改時間,保證準(zhǔn)確性。
4、通過LED燈的顯示,實(shí)現(xiàn)整點(diǎn)報時。
(二)設(shè)計方案
顯示時、分,打開電源時,應(yīng)當(dāng)顯示的數(shù)據(jù)為00:00,秒鐘通過右邊的LED燈的閃爍來顯示,每閃爍一次代表計時一秒,然后電路會自動開始計時。電路中應(yīng)當(dāng)有時、分的時間調(diào)整按鈕。當(dāng)顯示數(shù)據(jù)變?yōu)?0:00時,而不是24:00。時間調(diào)整按鈕按下時間小于1s時,時鐘進(jìn)入休眠狀態(tài);大于1s時,進(jìn)入時間調(diào)整狀態(tài),每按1次,顯示值加1。K1~K4每按一下,開關(guān)狀態(tài)取反。當(dāng)鬧鐘開關(guān)k1開啟,則顯示鬧鐘設(shè)置時間,且中間藍(lán)色LED指示燈亮(藍(lán)色LED滅則顯示時鐘時間),K2進(jìn)行小時+1設(shè)置,K3進(jìn)行分鐘+1設(shè)置,若開關(guān)k4開啟,則允許鬧鐘開啟,當(dāng)時間到達(dá)鬧鐘設(shè)定時間時,左邊鬧鐘的綠色LED燈閃爍,進(jìn)行報時,閃爍延時一分鐘后熄滅。
程序執(zhí)行后工作LED指示燈閃動,表示程序開始執(zhí)行,LCD顯示“00:00”,按下操作鍵K1~K4動作如下:
(1) K1—顯示鬧鐘設(shè)置的時間。
(2) K2—時調(diào)整
(3) K3—分調(diào)整
(4) K4—鬧鈴ON/OFF的狀態(tài)設(shè)置,ON鬧鐘開啟,OFF鬧鐘關(guān)閉。
(三)設(shè)計原理
本設(shè)計中實(shí)現(xiàn)的是4位數(shù)的顯示。一般來說,控制多位數(shù)碼管常采用的方法是掃描顯示法,即各位數(shù)碼管共用輸入數(shù)據(jù),但各數(shù)碼管的顯示控制線則單獨(dú)控制。 用掃描顯示法來完成多位數(shù)字顯示設(shè)計,程序執(zhí)行時,先使要顯示的數(shù)字位數(shù)對應(yīng)的數(shù)碼管允許點(diǎn)亮;然后,將要顯示的數(shù)據(jù)輸出到數(shù)碼管;顯示時間到了之后,再切換到下一個數(shù)碼管來顯示,秒鐘通過右邊LED閃爍來顯示,每一秒閃一下。 報時方面設(shè)計采取使用左邊的LED燈閃爍進(jìn)行報時,燈閃爍一分鐘后熄滅。
(四)硬件電路設(shè)計
電路設(shè)計:由以上的分析知,電路中除了單片機(jī)之外,還需要4個數(shù)碼管,4個開關(guān)按鈕,三個LED閃關(guān)燈和三個電阻
1.PNG (199.42 KB, 下載次數(shù): 106)
下載附件
2017-10-29 14:49 上傳
2.PNG (309.47 KB, 下載次數(shù): 96)
下載附件
2017-10-29 14:49 上傳
(五)程序設(shè)計及流程圖
流程圖:
3.PNG (21.42 KB, 下載次數(shù): 93)
下載附件
2017-10-29 14:50 上傳
單片機(jī)源程序如下:
- #include<reg52.h>
- unsigned char code table[]={0X3F,0X06,0X5B,0X4F,0X66,0X6D,0X7D,0X07,0X7F,0X6F};
- unsigned int num,tt;
- unsigned char ALARM,ALA_SWITCH,ALA_SHI,ALA_FEN,SHI,FEN,num1,num2,num3,num4;
- sbit K1=P1^0;
- sbit K2=P1^1;
- sbit K3=P1^2;
- sbit K4=P1^3;
- sbit GLED=P0^0;
- sbit RLED=P0^1;
- sbit CLOCK_ADJ=P0^2;
- void delay(unsigned int a);
- void display(unsigned char a,unsigned char b);
- void readkey();
- void main()
- {
- RLED=0;
- ALARM=0;
- ALA_SWITCH=0;
- CLOCK_ADJ=1;
- ALA_SHI=12;
- ALA_FEN=0;
- SHI=0;
- FEN=0;
- num=0;
- tt=0;
- TMOD=0x01;
- EA=1;
- ET0=1;
- TR0=1;
- TH0=(65536-50000)/256;//50ms
- TL0=(65536-50000)%256;
- while(1)
- {
- if(tt>=10)
- { RLED=!RLED;
- tt=0;
- num++;
- if(num>=120)
- {
- num=0;
- FEN++;
- }
- if(FEN>=60)
- {
- FEN=0;
- SHI++;
- }
- if(SHI>=24) SHI=0;
- }
- if(ALA_SHI>=24)ALA_SHI=0;
- if(ALA_FEN>=60)ALA_FEN=0;
- if(SHI==ALA_SHI&&FEN==ALA_FEN)ALARM=1;
- else ALARM=0;
- readkey();
- if(CLOCK_ADJ==1)display(SHI,FEN);
- if(CLOCK_ADJ==0)display(ALA_SHI,ALA_FEN);
- }
- }
- void delay(unsigned int a)
- {
- unsigned int x,y;
- for(x=a;x>0;x--)
- for(y=100;y>0;y--);
- }
- void time0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- tt++;
- if(ALARM==1&&ALA_SWITCH==1)GLED=!GLED;
-
- }
- void display(unsigned char a,unsigned char b)
- {
- num1=a/10;
- num2=a%10;
- num3=b/10;
- num4=b%10;
-
- P3=0xFF;
- P2=table[num1];
- P3=0x0E;
- delay(2);
-
- P3=0xFF;
- if(num%2==0)
- P2=table[num2]|0x80;
- else P2=table[num2];
- P3=0X0D;
- delay(2);
-
- P3=0xFF;
- P2=table[num3];
- P3=0X0B;
- delay(2);
-
- P3=0xFF;
- P2=table[num4];
- P3=0X07;
- delay(2);
- }
- void readkey()
- {
- if(K1==0)
- {
- delay(5);
- delay(5);
- if(K1==0)CLOCK_ADJ=!CLOCK_ADJ;
- while(!K1) ;
- delay(5);
- delay(5);
- }
- if(K2==0)
- {
- delay(5);
- delay(5);
- if(K2==0)
- {
- if(CLOCK_ADJ==1)SHI++;
- if(CLOCK_ADJ==0)ALA_SHI++;
- }
- while(!K2);
- delay(5);
- delay(5);
- }
- if(K3==0)
- {
- delay(5);
- delay(5);
- if(K3==0)
- if(CLOCK_ADJ==1)FEN++;
- if(CLOCK_ADJ==0)ALA_FEN++;
- while(!K3) ;
- delay(5);
- delay(5);
- }
- if(K4==0)
- {
- delay(5);
- delay(5);
- if(K4==0)
- {
- GLED=1;
- ALA_SWITCH=!ALA_SWITCH;
- }
- while(!K4);
- delay(5);
- delay(5);
- }
- }
復(fù)制代碼
(六)設(shè)計方案的改進(jìn)
1、本系統(tǒng)只采用了4個數(shù)碼管,而是通過LED燈閃爍來實(shí)現(xiàn)秒的計數(shù),電路中可多加兩個數(shù)碼管,來顯示秒的計時,來提高電子鬧鐘的準(zhǔn)確性。
2、我們可以把LED燈閃爍報時換成蜂鳴器音樂報時,這樣更能實(shí)現(xiàn)“鬧鐘”報時功能,使我們更能感知到。
3、數(shù)碼顯示管可以外加一些三極管,電阻和電容,讓電路設(shè)計更合理。
|
評分
-
查看全部評分
|