單片機-電子時鐘實驗報告_第1頁
單片機-電子時鐘實驗報告_第2頁
單片機-電子時鐘實驗報告_第3頁
單片機-電子時鐘實驗報告_第4頁
單片機-電子時鐘實驗報告_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、一、實驗任務(wù)及要求在焊接的電路板中,4個LED數(shù)碼管,設(shè)計帶有鬧鈴功能的數(shù)字時鐘,要求:1、在4位數(shù)碼管上顯示當前時間。顯示格式“時時分分”;”2、由LED閃動做秒顯示;3、利用按鍵可對時間及鬧玲進行設(shè)置,并可顯示鬧玲時間。當鬧玲時間到蜂鳴器發(fā)出聲響,按停止鍵使可使鬧玲聲停止。二、方案論證與比較2.1數(shù)字時鐘方案數(shù)字時鐘是本設(shè)計的最主要的部分。根據(jù)需要,可利用兩種方案實現(xiàn)。方案一:本方案采用Dallas公司的專用時鐘芯片DS12887A。該芯片內(nèi)部采用石英晶體振蕩器,其芯片精度不大于10ms/年,且具有完備的時鐘鬧鐘功能,因此,可直接對其以用于顯示或設(shè)置,使得軟件編程相對簡單。為保證時鐘在電網(wǎng)

2、電壓不足或突然掉電等突發(fā)情況下仍能正常工作,芯片內(nèi)部包含鋰電池。當電網(wǎng)電壓不足或突然掉電時,系統(tǒng)自動轉(zhuǎn)換到內(nèi)部鋰電池供電系統(tǒng)。而且即使系統(tǒng)不上電,程序不執(zhí)行時,鋰電池也能保證芯片的正常運行,以備隨時提供正確的時間。方案二:本方案完全用軟件實現(xiàn)數(shù)字時鐘。原理為:在單片機內(nèi)部存儲器設(shè)三個字節(jié)分別存放時鐘的時、分、秒信息。利用定時器與軟件結(jié)合實現(xiàn)5毫秒定時中斷,每產(chǎn)生一次中斷,存儲器內(nèi)相應(yīng)的計數(shù)值加1;若計數(shù)值達到200,則將其清零,并將方案一:靜態(tài)顯示。所謂靜態(tài)顯示,就是當顯示器顯示某一字符時,相應(yīng)的發(fā)光二極管恒定的導通或截止。該方式每一位都需要一個8 位輸出口控制。靜態(tài)顯示時較小的電流能獲得較高

3、的亮度,且字符不閃爍。但當所顯示的位數(shù)較多時,靜態(tài)顯示所需的I/O口太多,造成了資源的浪費。方案二:動態(tài)顯示。所謂動態(tài)顯示就是一位一位的輪流點亮各個位,對于顯示器的每一位來說,每隔一段時間點亮一次。利用人的視覺暫留功能可以看到整個顯示,但必須保證掃描速度合適,字符才不閃爍。顯示器的亮度既與導通電流有關(guān),也于點亮時間與間隔時間的比例有關(guān)。調(diào)整參數(shù)可以實現(xiàn)較高穩(wěn)定度的顯示。動態(tài)顯示節(jié)省了I/O口,降低了能耗。從節(jié)省I/O口和降低能耗出發(fā),本設(shè)計采用方案二。三、各個部分的分析1)顯示電路:通過4個LED顯示屏顯示分鐘和小時兩個兩聯(lián)的LED顯示器,通過與單片機P1接口連接實現(xiàn)顯示功能。而實現(xiàn)4個LED

4、燈動態(tài)顯示,靠的是位選電路2)位選電路 四位共陽LED數(shù)碼管,其標號分別為HourH,HourL,MinL,MinH,低電平選通,且任何時候僅有一位輸出低電平,顯示時對各顯示器進行動態(tài)掃描,顯示器分時輪流工作。雖然每次只有一個顯示器顯示,但是由于人的視覺暫留現(xiàn)象我們?nèi)詴杏X所有的顯示器都在同時顯示。P0口作為輸出口控制8個發(fā)光二極管的亮滅,控制數(shù)碼管的顯示。因此,可以實現(xiàn)4個LED在我們看來同時亮,顯示時間。3) 鬧鈴部分:使用蜂鳴器實現(xiàn)鬧鐘功能其中,buzzer端口接到單片機的P1.7輸出。(端口連接在最后介紹)4) 開關(guān)部分:使用了5個開關(guān)控制整個電路的啟動,修改時間,設(shè)置鬧鐘,關(guān)閉電路等

5、功能為查詢方式典型電路。其中Setbutton為復位開關(guān),swtich為轉(zhuǎn)換模式開關(guān),即工作模式和調(diào)時間模式,Increase為調(diào)時間模式中控制時間變化的按鈕,STRAT和STOP分別為開啟和結(jié)束按鈕,這5個開關(guān)分別接到P2.0-P2.5端口,以控制其輸入。5) 串轉(zhuǎn)并電路為了進一步節(jié)省I/O口,有添加了一個額外的串轉(zhuǎn)并電路由以上電路,我們將P1.0-P1.2擴展到7個I/O口,我們采用的是74HC595芯片,管腳圖如下:7)復位電路整體電路圖如下:四、軟件設(shè)計由于匯編語言繁瑣,我們采用的是C語言編程,源程序及注釋如下:#include #include /時分#define TYPE uns

6、igned char#define HOUR 0#define MIN 1/顯示狀態(tài)#define NORMAL 0#define BELLTIME 1#define SETTING_N 2#define SETTING_C 3/閃爍顯示#define NoMask 0#define MaskHour 1#define MaskMin 2#define MaskAll 3#define uchar unsigned char#define uint unsigned int/Bit Definition/數(shù)碼管sbit HourH = P13; /低電平,數(shù)碼管使能sbit HourL = P

7、14;sbit MinH = P15;sbit MinL = P16;/蜂鳴器sbit Buzzer = P17; /低電平,蜂鳴器響/鍵盤sbit SetButton = P20;/按鍵定義,設(shè)置(正常,定時顯示切換)鍵,時位分位轉(zhuǎn)換鍵,增加鍵sbit Switch =P21;sbit Increase = P22; sbit Start = P23;sbit Stop = P24;/LEDsbit SecLed = P25; /秒顯示,低電平點亮sbit ClockStartLED = P26; /鬧鐘定鬧開始/74HC595 輸入管腳定義sbit SH_CP = P10;sbit DS

8、= P11;sbit ST_CP = P12;/Function Definitionvoid delay5ms(void);void Clock();void Display();void Set();void Ring();void StopRing();void ShowANum(uchar i);void StartRing();void delaykey(void);void MaskShow(uchar Num,TYPE t);/Variable Definition/正常時間uchar hour=8;uchar min=0;uchar sec=0;uint count=0;/鬧鐘

9、定時uchar mp=1;uchar st=0;uchar cHour=8;uchar cMin=0;/模式標示uchar displayMode=NORMAL;uchar currentSelect=HOUR;/數(shù)碼管數(shù)字顯示編碼uchar H1;uchar H2;uchar M1;uchar M2;uchar temp;uchar code DSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff;/閃爍顯示uchar MaskType=NoMask;uint blinkcount=0;/音樂uchar p=0;ucha

10、r temp=0;uchar jiepai=0;uchar yindiao=0;uchar Pai1_4=20;uchar jpLength=0;/音調(diào)數(shù)組unsigned char code music=0xFF,0xFF,0xF8,0x89,0xf9,0x59,0xfa,0x13,0xfa,0x68,0xfb,0x04,0xfb,0x90,0xfc,0x0c, 0xfc,0x44,0xfc,0xad,0xfd,0x0a,0xfd,0x34,0xfd,0X82,0xfd,0xc8,0xfe,0x06, 0xfe,0x22,0xfe,0x56,0xfe,0x85,0xfe,0x9a,0xfe,

11、0xc1,0xfe,0xe4,0xff,0x03, 0xff,0x11;/音樂編碼unsigned char code Mmusic=/音階測試/1,4,2,4,3,4,4,4,5,4,6,4,7,4,8,4,/9,4,10,4,11,4,12,4,13,4,14,4,15,4,/16,4,17,4,18,4,19,4,20,4,21,4,22,4,/兩只老虎1,4,2,4,3,4,1,8,1,4,2,4,3,4,1,8,3,2,4,8,5,5,3,2,4,8,5,5,5,5,6,2,5,5,4,4,3,4,1,8,5,5,6,2,5,5,4,4,3,4,1,8,3,4,1,4,2,8,3,4

12、,1,4,2,8,0xff,0x00/結(jié)束標記;void main()/設(shè)置T0,T1TMOD = 0x11; TH0 = 0x0EC; TL0 = 0x78; TH1 = 0x0F0; TL1 = 0x60;ET0=1;ET1=1;EA=1;TR0=1;/設(shè)置定時器的優(yōu)先級PT0=1; /5ms標準時鐘設(shè)為高優(yōu)先級,保證計時的準確性PT1=0;/順序執(zhí)行(主循環(huán))while(1)/設(shè)置何時開啟T1定時器if(displayMode!=NORMAL|mp=0)TR1=1;elseTR1=0;MaskType=NoMask;/方法并行Display();Display();Set();Start

13、Ring();Ring();StopRing();void Clock() interrupt 1TH0 = 0x0EC; TL0 = 0x78;count+;if(mp=0) /控制音樂節(jié)拍if(jpLength-=100)blinkcount=0;if(displayMode=BELLTIME)if(MaskType=NoMask)MaskType=MaskAll;elseMaskType=NoMask;else if(displayMode=SETTING_C|displayMode=SETTING_N)if(currentSelect=HOUR)if(MaskType=NoMask)M

14、askType=MaskHour;elseMaskType=NoMask;if(currentSelect=MIN)if(MaskType=NoMask)MaskType=MaskMin;elseMaskType=NoMask;void StartRing()if(Start=0)ClockStartLED=0;st=1;Start=1;void Ring()if(st=1&cHour=hour&cMin=min)/Buzzer=0;mp=0;void StopRing()if(Stop=0)Buzzer=1;mp=1;p=0;ClockStartLED=1;st=0;MaskType=NoM

15、ask;void Display()/分析COUNT,合成HOUR,MINif(count=200)count=count-200;sec+;if(sec=60)sec=0;min+;if(min=60)min=0;hour+;if(hour=25)hour=0;/顯示時間if(displayMode=NORMAL|displayMode=SETTING_N) HourH=1;HourL=1; MinH=1;MinL=1; H1=hour/10;H2=hour%10; M1=min/10;M2=min%10; MaskShow(H1,HOUR);HourH=0;delay5ms();HourH

16、=1; MaskShow(H2,HOUR); HourL=0; delay5ms(); HourL=1;MaskShow(M1,MIN);MinH=0;delay5ms();MinH=1; MaskShow(M2,MIN); MinL=0;delay5ms(); MinL=1; if(displayMode=BELLTIME|displayMode=SETTING_C) H1=cHour/10; H2=cHour%10; M1=cMin/10; M2=cMin%10; MaskShow(H1,HOUR); HourH=0; delay5ms(); HourH=1; MaskShow(H2,HO

17、UR); HourL=0; delay5ms(); HourL=1; MaskShow(M1,MIN); MinH=0; delay5ms(); MinH=1; MaskShow(M2,MIN); MinL=0; delay5ms(); MinL=1;void MaskShow(uchar Num,TYPE t)if(MaskType=MaskHour)if(t=HOUR)ShowANum(10);elseShowANum(Num);else if(MaskType=MaskMin)if(t=MIN)ShowANum(10);elseShowANum(Num);else if(MaskType

18、=MaskAll)ShowANum(10);elseShowANum(Num);void ShowANum(uchar Num)uchar i;temp=DSY_CODENum;/串行輸入74HC595for(i=0;i8;i+)temp=4)displayMode=0;/設(shè)置模式下,時分轉(zhuǎn)換鍵作用if(Switch=0&(displayMode=SETTING_C|displayMode=SETTING_N)delaykey();if(Switch=0)currentSelect=!currentSelect;/設(shè)置模式下,數(shù)值增加鍵作用if(Increase=0&displayMode=SETTING_C)delaykey();if(Increase=0)if(currentSe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論