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

下載本文檔

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

文檔簡介

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

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

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

4、和小時兩個兩聯(lián)的 LED 顯示器,通過與單片機 P1 接口連接實現(xiàn)顯示功能。而實現(xiàn)4 個 LED 燈動態(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

5、 端口接到單片機的 P1.7 輸出。(端口連接在最后介紹)4)開關部分:使用了 5 個開關控制整個電路的啟動,修改時間,設置鬧鐘,關閉電路等功能為查詢方式典型電路。其中 Setbutton 為復位開關, swtich 為轉(zhuǎn)換模式開關, 即工作模式和調(diào)時間模式, Increase 為調(diào)時間模式中控制時 間變化的按鈕, STRAT 和 STOP 分別為開啟和結束按鈕,這 5 個開關分別 接到 P2.0-P2.5 端口,以控制其輸入。5) 串轉(zhuǎn)并電路為了進一步節(jié)省 I/O 口,有添加了一個額外的串轉(zhuǎn)并電路 由以上電路,我們將 P1.0-P1.2 擴展到 7 個 I/O 口,我們采用的是 74HC59

6、5 芯片,管腳圖如下:7)復位電路整體電路圖如下:四、軟件設計由于匯編語言繁瑣,我們采用的是 C 語言編程,源程序及注釋如下: #include <reg52.h>#include <intrins.h>/ 時分#define TYPE unsigned char#define HOUR 0#define MIN1/ 顯示狀態(tài)#define NORMAL0#define BELLTIME 1#define SETTING_N2#define SETTING_C 3/ 閃爍顯示#define NoMask 0#define MaskHour 1#define MaskMi

7、n 2#define MaskAll 3#define uchar unsigned char#define uint unsigned int/Bit Definition/ 數(shù)碼管sbit HourH = P1A3;/低電平,數(shù)碼管使能sbit HourL = PM4;sbit MinH = P1A5;sbit MinL = P1A6;/ 蜂鳴器sbit Buzzer = P1A7;/ 低電平,蜂鳴器響/ 鍵盤sbit SetButton = P2A0;/ 按鍵定義,設置(正常,定時顯示切換)鍵,時 位分位轉(zhuǎn)換鍵,增加鍵sbit Switch =P2A1;sbit Increase = P

8、2A2;sbit Start = P2八3;sbit Stop = P2A4;/LEDsbit SecLed = P2A5;/秒顯示,低電平點亮sbit ClockStartLED = P2A6;/ 鬧鐘定鬧開始/74HC595 輸入管腳定義sbit SH_CP = P1A0;sbit DS = P1A1;sbit ST_CP = P1A2;/Function Definitionvoid delay5ms(void);void Clock();void Display();void Set();void Ring();void StopRing();void ShowANum(uchar i

9、);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;/ 鬧鐘定時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;uc

10、har M2;uchar temp;uchar codeDSY_CODE=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x ff;/ 閃爍顯示 uchar MaskType=NoMask;uint blinkcount=0;/ 音樂uchar p=0;uchar 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,0x1

11、3,0xfa,0x68,0xfb,0x04,0xfb,0x 90,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,0xc1,0xfe,0xe4,0xff,0x0350xff,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,

12、/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,1,4,2,8,0xff,0x00/ 結束標記;void main()/ 設置 T0,T1TMOD= 0x11;TH0 =0x0EC;TL0 =0x78;TH1 =0x0F0;TL1 =0x60;ET0=1;ET1=1;EA=1;TR0=1;/ 設置定時器的優(yōu)先級PT0=1;

13、 /5ms 標準時鐘設為高優(yōu)先級,保證計時的準確性PT1=0;/ 順序執(zhí)行(主循環(huán))while(1)/ 設置何時開啟 T1 定時器if(displayMode!=NORMAL|mp=0)TR1=1;elseTR1=0;MaskType=NoMask;/ 方法并行Display();Display();Set();StartRing();Ring();StopRing();void Clock() interrupt 1TH0 = 0x0EC;TL0 = 0x78;count+;if(mp=0)/ 控制音樂節(jié)拍if(jpLength-<=0)jiepai=Mmusic2*p+1;jpLen

14、gth=Pai1_4*jiepai; / 控制每個音調(diào)持續(xù)多少個 1/4 節(jié)拍 p+;if(Mmusic2*p+1=0x00)p=0; / 重放/ 控制屏幕隨樂曲閃爍 if(MaskType=NoMask)MaskType=MaskAll;elseMaskType=NoMask;if(count%100=0)/ 控制秒燈閃爍,每秒閃一次SecLed=SecLed;void MaskClock() interrupt 3if(mp=0) / 生成音調(diào)頻率方波yindiao=Mmusic2*p;TH1=music2*yindiao;TL1=music2*yindiao+1;Buzzer=Buzze

15、r;else / 響鈴時,屏蔽閃爍顯示的功能if(displayMode=BELLTIME|displayMode=SETTING_C)TH1 = 0x0F0;TL1 = 0x60;elseTH1 = 0x0F8;TL1 = 0x30;blinkcount+;if(blinkcount>=100)blinkcount=0;if(displayMode=BELLTIME)if(MaskType=NoMask)MaskType=MaskAll;elseMaskType=NoMask;else if(displayMode=SETTING_C|displayMode=SETTING_N)if(

16、currentSelect=HOUR)if(MaskType=NoMask)MaskType=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()

17、if(Stop=0)Buzzer=1;mp=1;p=0;ClockStartLED=1;st=0;MaskType=NoMask;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=ho

18、ur%10;M1=min/10;M2=min%10;MaskShow(H1,HOUR);HourH=0; delay5ms();HourH=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;MaskSho

19、w(H1,HOUR);HourH=0;delay5ms();HourH=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; void MaskShow(uchar Num,TYPE t)if(MaskType=MaskHour)if(t=HOUR)ShowANum(10);elseShowANum(Num);else if(MaskType=MaskMin)if(t=MIN)Show

20、ANum(10);elseShowANum(Num);else if(MaskType=MaskAll)ShowANum(10);elseShowANum(Num);void ShowANum(uchar Num)uchar i;temp=DSY_CODENum;/ 串行輸入 74HC595for(i=0;i<8;i+) temp<<=1; DS=CY; SH_CP=1; _nop_(); nop_(); SH_CP=0;/ 傳送至存儲寄存器,出現(xiàn)在輸出端ST_CP=0;_nop_();ST_CP=1;_nop_();ST_CP=0;void Set()/ 響鈴時,顯示模式鎖

21、定在正常,停鬧后解除 if(mp=0)displayMode=NORMAL;/ 顯示轉(zhuǎn)換鍵作用(注:響鈴時,屏蔽顯示轉(zhuǎn)換)if(mp!=0&&SetButton=0)delaykey();if(SetButton=0)displayMode+;if(displayMode>=4)displayMode=0;/ 設置模式下,時分轉(zhuǎn)換鍵作用if(Switch=0&&(displayMode=SETTING_C|displayMode=SET TING_N)delaykey();if(Switch=0)currentSelect=!currentSelect;/ 設置模式下,數(shù)值增加鍵作用if(Increase=0&&displayMode=SETTI

溫馨提示

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

評論

0/150

提交評論