|
|
(一)設(shè)計(jì)任務(wù)
1、采用四位LED動(dòng)態(tài)顯示小時(shí)、分單元。
2、具有自動(dòng)整點(diǎn)報(bào)時(shí)功能。
3、可以通過四個(gè)開關(guān)設(shè)定修改時(shí)間,保證準(zhǔn)確性。
4、通過LED燈的顯示,實(shí)現(xiàn)整點(diǎn)報(bào)時(shí)。
(二)設(shè)計(jì)方案
顯示時(shí)、分,打開電源時(shí),應(yīng)當(dāng)顯示的數(shù)據(jù)為00:00,秒鐘通過右邊的LED燈的閃爍來顯示,每閃爍一次代表計(jì)時(shí)一秒,然后電路會(huì)自動(dòng)開始計(jì)時(shí)。電路中應(yīng)當(dāng)有時(shí)、分的時(shí)間調(diào)整按鈕。當(dāng)顯示數(shù)據(jù)變?yōu)?0:00時(shí),而不是24:00。時(shí)間調(diào)整按鈕按下時(shí)間小于1s時(shí),時(shí)鐘進(jìn)入休眠狀態(tài);大于1s時(shí),進(jìn)入時(shí)間調(diào)整狀態(tài),每按1次,顯示值加1。K1~K4每按一下,開關(guān)狀態(tài)取反。當(dāng)鬧鐘開關(guān)k1開啟,則顯示鬧鐘設(shè)置時(shí)間,且中間藍(lán)色LED指示燈亮(藍(lán)色LED滅則顯示時(shí)鐘時(shí)間),K2進(jìn)行小時(shí)+1設(shè)置,K3進(jìn)行分鐘+1設(shè)置,若開關(guān)k4開啟,則允許鬧鐘開啟,當(dāng)時(shí)間到達(dá)鬧鐘設(shè)定時(shí)間時(shí),左邊鬧鐘的綠色LED燈閃爍,進(jìn)行報(bào)時(shí),閃爍延時(shí)一分鐘后熄滅。
程序執(zhí)行后工作LED指示燈閃動(dòng),表示程序開始執(zhí)行,LCD顯示“00:00”,按下操作鍵K1~K4動(dòng)作如下:
(1) K1—顯示鬧鐘設(shè)置的時(shí)間。
(2) K2—時(shí)調(diào)整
(3) K3—分調(diào)整
(4) K4—鬧鈴ON/OFF的狀態(tài)設(shè)置,ON鬧鐘開啟,OFF鬧鐘關(guān)閉。
(三)設(shè)計(jì)原理
本設(shè)計(jì)中實(shí)現(xiàn)的是4位數(shù)的顯示。一般來說,控制多位數(shù)碼管常采用的方法是掃描顯示法,即各位數(shù)碼管共用輸入數(shù)據(jù),但各數(shù)碼管的顯示控制線則單獨(dú)控制。 用掃描顯示法來完成多位數(shù)字顯示設(shè)計(jì),程序執(zhí)行時(shí),先使要顯示的數(shù)字位數(shù)對(duì)應(yīng)的數(shù)碼管允許點(diǎn)亮;然后,將要顯示的數(shù)據(jù)輸出到數(shù)碼管;顯示時(shí)間到了之后,再切換到下一個(gè)數(shù)碼管來顯示,秒鐘通過右邊LED閃爍來顯示,每一秒閃一下。 報(bào)時(shí)方面設(shè)計(jì)采取使用左邊的LED燈閃爍進(jìn)行報(bào)時(shí),燈閃爍一分鐘后熄滅。
(四)硬件電路設(shè)計(jì)
電路設(shè)計(jì):由以上的分析知,電路中除了單片機(jī)之外,還需要4個(gè)數(shù)碼管,4個(gè)開關(guān)按鈕,三個(gè)LED閃關(guān)燈和三個(gè)電阻
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è)計(jì)及流程圖
流程圖:
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ì)方案的改進(jìn)
1、本系統(tǒng)只采用了4個(gè)數(shù)碼管,而是通過LED燈閃爍來實(shí)現(xiàn)秒的計(jì)數(shù),電路中可多加兩個(gè)數(shù)碼管,來顯示秒的計(jì)時(shí),來提高電子鬧鐘的準(zhǔn)確性。
2、我們可以把LED燈閃爍報(bào)時(shí)換成蜂鳴器音樂報(bào)時(shí),這樣更能實(shí)現(xiàn)“鬧鐘”報(bào)時(shí)功能,使我們更能感知到。
3、數(shù)碼顯示管可以外加一些三極管,電阻和電容,讓電路設(shè)計(jì)更合理。
|
評(píng)分
-
查看全部評(píng)分
|