版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、B-1 多功能電子鐘設(shè)計報告 組員:彭希靈、馮旭鑫、張正鵬 完成時間:2016年5月9日 目錄1.摘要42.設(shè)計任務(wù)4 2.1基本要求4 2.2發(fā)揮部分53.方案論證與比較5 3.1顯示部分5 3.2時鐘部分5 3.3鬧鈴部分6 3.4溫度采集部分64.總體方案7 4.1工作原理 7 4.2總體設(shè)計75.系統(tǒng)硬件設(shè)計8 5.1 STC89C51單片機(jī)最小系統(tǒng)8 5.2時鐘模塊8 5.3 LCD液晶顯示模塊9 5.4鬧鐘響鈴模塊10 5.5溫度測量模塊116.系統(tǒng)軟件設(shè)計11 6.1 main模塊11 6.2 ds1302模塊12 6.3 lcd12864模塊12 6.4 key模塊13 6.5
2、 ringlock模塊13 6.6 menu模塊和DS18B20模塊137.測試與結(jié)果分析148.總結(jié)14參考文獻(xiàn)15附錄一15附錄二161.摘要 本設(shè)計采用LCD12864液晶屏幕顯示系統(tǒng),以STC89C52單片機(jī)為核心,由鈴聲響鈴模塊、DS1302時鐘控制模塊、LCD12864顯示模塊、鍵盤控制模塊、菜單模塊和DS18B20溫度模塊等功能模塊組成?;陬}目的基本要求,本系統(tǒng)對時間顯示、鬧鐘的設(shè)定和控制以及時間日期的設(shè)定進(jìn)行了重點設(shè)計。此外,還擴(kuò)展了掉電存儲、紅外遙控、溫度采集等功能。本系統(tǒng)大部分功能由軟件來實現(xiàn)。在該設(shè)計中不僅成功的實現(xiàn)了題中的基本要求,多數(shù)發(fā)揮部分也得到了實現(xiàn),而且還具有
3、一定的創(chuàng)新功能。2.設(shè)計任務(wù) 2.1基本要求(1)準(zhǔn)確計時,以數(shù)字形式顯示年月、日、時、分、秒。(2)小時以24小時計時形式,分秒計時為60進(jìn)位,日期平年和閏年將自行更換。(3)采用矩陣按鍵和4個獨立按鍵對電子表進(jìn)行控制,可進(jìn)行鬧鐘設(shè)定、控制及時間日期的設(shè)定。 (4)鬧鐘功能:可任意設(shè)定鬧鐘時間,一旦走時到該時間,能以蜂鳴器發(fā)聲、LED發(fā)光的形式告警提示。 2.2發(fā)揮部分 (1)掉電后所顯示的時間進(jìn)行存儲,待通電可恢復(fù)斷電前的時間。 (2)鬧鐘時間到,蜂鳴器能發(fā)出有節(jié)奏的音樂,并且LED燈發(fā)光節(jié)奏隨音樂變化。(3)通過紅外遙控能使鬧鐘停止。(4)其它發(fā)揮部分:添加了一個主菜單,增加了一個溫度模
4、塊3.方案論證與比較 3.1顯示部分顯示部分是本次設(shè)計的重要部分,一般有以下兩種方案:方案一:采用LED顯示,分靜態(tài)顯示和動態(tài)顯示。對于靜態(tài)顯示方式,所需的譯碼驅(qū)動裝置很多,引線多而復(fù)雜,且可靠性也較低。而對于動態(tài)顯示方式,雖可以避免靜態(tài)顯示的問題,但設(shè)計上如果處理不當(dāng),易造成亮度低,有閃爍等問題。方案二:采用LCD顯示。LCD液晶顯示具有豐富多樣性、靈活性、電路簡單、易于控制而且功耗小等優(yōu)點,對于信息量多的系統(tǒng),是比較適合的。鑒于上述原因,我們采用方案二。 3.2時鐘部分時鐘是本設(shè)計的核心的部分。根據(jù)需要可采用以下兩種方案實現(xiàn):方案一:方案完全用軟件實現(xiàn)數(shù)字時鐘。原理為:在單片機(jī)內(nèi)部存儲器設(shè)
5、三個字節(jié)分別存放時鐘的時、分、秒信息。利用定時器與軟件結(jié)合實現(xiàn)1秒定時中斷,每產(chǎn)生一次中斷,存儲器內(nèi)相應(yīng)的秒值加1;若秒值達(dá)到60,則將其清零,并將相應(yīng)的分字節(jié)值加1;若分值達(dá)到60,則清零分字節(jié),并將時字節(jié)值加1;若時值達(dá)到24,則將時字節(jié)清零。該方案具有硬件電路簡單的特點,但當(dāng)單片機(jī)不上電,程序?qū)⒉粓?zhí)行。而且由于每次執(zhí)行程序時,定時器都要重新賦初值,所以該時鐘精度不高。方案二:方案采用Dallas公司的專用時鐘芯片DS1302。該芯片內(nèi)部采用石英晶體振蕩器,其芯片精度不大于10ms/年,且具有完備的時鐘鬧鐘功能,因此,可直接對其以用于顯示或設(shè)置,使得軟件編程相對簡單。為保證時鐘在電網(wǎng)電壓不
6、足或突然掉電等突發(fā)情況下仍能正常工作,芯片內(nèi)部包含鋰電池。當(dāng)電網(wǎng)電壓不足或突然掉電時,可使系統(tǒng)自動轉(zhuǎn)換到內(nèi)部鋰電池供電系統(tǒng)。而且即使系統(tǒng)不上電,程序不執(zhí)行時,鋰電池也能保證芯片的正常運(yùn)行,以備隨時提供正確的時間?;跁r鐘芯片的上述優(yōu)點,本設(shè)計采用方案二完成時鐘的功能。 3.3鬧鈴部分一般的時鐘都帶有鬧鈴,實現(xiàn)鬧鈴方式可采用以下兩種:方案一:將鬧鐘信息存放在單片機(jī)自帶的存儲器中。該方案成本低而且易于實現(xiàn),但是一但掉電會造成之前信息的丟失。方案二:將鬧鐘信息存放在非易失儲存器AT24C02中。該方案即使在完全的掉電的情況下也不會造成鬧鐘信息的丟失,可避免方案一帶來的麻煩。在此設(shè)計中,我們采用的是方
7、案一,為了防止其數(shù)據(jù)的丟失,我們對掉電后所顯示的時間進(jìn)行了存儲。 3.4溫度采集部分由于現(xiàn)在用品追求多樣化,多功能化,給系統(tǒng)加上溫度測量顯示模塊,能夠方便人們的生活,使該設(shè)計具有人性化。方案一:采用熱敏電阻,可滿足40攝氏度至90攝氏度測量范圍,但熱敏電阻精度、重復(fù)性、可靠性較差,對于檢測小于1攝氏度的信號是不適用的。方案二:采用溫度傳感器DS18B20。DS18B20可以滿足從-55攝氏度到+125攝氏度測量范圍,且DS18B20測量精度高,增值量為0.5攝氏度,在一秒內(nèi)把溫度轉(zhuǎn)化成數(shù)字,測得的溫度值的存儲在兩個八位的RAM中,單片機(jī)直接從中讀出數(shù)據(jù)轉(zhuǎn)換成十進(jìn)制就是溫度,使用方便?;贒S1
8、8B20的以上優(yōu)點,我們決定選取DS18B20來測量溫度。4.總體方案 4.1工作原理 本設(shè)計采用STC89C51單片機(jī)作為本系統(tǒng)的控制模塊。單片機(jī)可把由DS18B20、DS1302中的數(shù)據(jù)利用軟件來進(jìn)行處理,從而把數(shù)據(jù)傳輸?shù)斤@示模塊,實現(xiàn)時間、鬧鈴和溫度的顯示。以LCD液晶顯示器為顯示模塊,把單片機(jī)傳來的數(shù)據(jù)顯示出來,并且顯示多樣化。在顯示電路中,主要靠按鍵來實現(xiàn)各種顯示要求的選擇與切換。 4.2總體設(shè)計總體框架如圖1所示P17圖1 總體框架5.系統(tǒng)硬件設(shè)計本設(shè)計采用的是學(xué)校實驗單片機(jī),由于單片機(jī)中蜂鳴器聲音較小,現(xiàn)外接一個喇叭的簡單電路,當(dāng)鬧鐘時間一到時,以能較清晰的聽到有節(jié)奏的音樂。設(shè)計
9、中還將原來的12M晶振換成了24M晶振,用以減小一半的周期,以達(dá)到提高單片機(jī)運(yùn)行速度和穩(wěn)定時鐘頻率的效果。 5.1 STC89C51單片機(jī)最小系統(tǒng)單片機(jī)最小系統(tǒng)包括晶體振蕩電路、復(fù)位開關(guān)和電源部分。圖2為STC89C51單片機(jī)的最小系統(tǒng)。 圖2 STC89C51最小系統(tǒng)電路圖 5.2時鐘模塊時鐘模塊采用DS1302芯片,DS1302是DALLAS公司推出的涓流充電時鐘芯片,內(nèi)含有一個實時時鐘/日歷和31字節(jié)靜態(tài)RAM,通過簡單的串行接口可與單片機(jī)進(jìn)行通信,實時時鐘/日歷電路能計算2100年前的年、月、日、星期、時、分、秒的信息以及每月的天數(shù)和閏年的天數(shù),還可自動調(diào)整時鐘操作,可通過AM/PM指
10、示決定采用24或12小時格式,DS1302與單片機(jī)之間能簡單地采用同步串行的方式進(jìn)行通信,且僅需用到三個口線:RST復(fù)位、I/O數(shù)據(jù)線、SCLK串行時鐘。時鐘/RAM的讀/寫數(shù)據(jù)以一個字節(jié)或多達(dá)31個字節(jié)的字符組方式通信。DS1302工作時功耗很低,保持?jǐn)?shù)據(jù)和時鐘信息時功率小于1mW,其接線電路如圖3所示。圖3 時鐘電路 5.3 LCD液晶顯示模塊LCD液晶顯示模塊采用LCD12864型號,具有很低的功耗,邏輯工作電壓為4.5V-5.5V。通過編程實現(xiàn)自動關(guān)閉屏幕能夠更有效的降低功耗。其接線如圖4所示。圖4 LCD12864顯示電路 5.4鬧鐘響鈴模塊在原有的蜂鳴器的基礎(chǔ)上并聯(lián)了一個100K的
11、電阻,用以分壓,減少功率的損耗,并且把蜂鳴器換成了喇叭,以增大音量。接線如圖5所示P17P17圖5 喇叭發(fā)聲電路 5.5溫度測量模塊 溫度測量傳感器采用DALLAS公司DS18B20的單總線數(shù)字化溫度傳感器,測溫范圍為-55125,可編程為9位12位A/D轉(zhuǎn)換精度,測溫分辨率達(dá)到0.0625,采用寄生電源工作方式,CPU只需一根口線便能與DS18B20通信,占用CPU口線少,可節(jié)省大量引線和邏輯電路。接口電路如圖6所示。圖6 DS18B20溫度測量電路6.系統(tǒng)軟件設(shè)計整個程序是在Keil 4環(huán)境下編寫運(yùn)行的,程序包含了main,ds1302,lcd12864,key,ringlock,menu
12、,DS18B20等模塊組成。整個程序能實現(xiàn)對多功能電子鐘的各種操作。下面分別對各個模塊進(jìn)行簡要介紹。6.1 main模塊該模塊是對所有模塊的匯總,是整個程序的核心部分。在該模塊中包含了主函數(shù),時鐘顯示函數(shù),中斷函數(shù),設(shè)置時間函數(shù),延時函數(shù),設(shè)置鬧鐘函數(shù)。主函數(shù)void main():在該函數(shù)開始調(diào)用了LCD12864_Init(),Ds1302Init1(),ClockInit(),四個函數(shù)對LCD12864,DS1302進(jìn)行了初始化設(shè)置;renum=menu()是菜單返回值控制進(jìn)入哪個設(shè)置;接著對中斷作了相應(yīng)的設(shè)置,如打開中斷之類的;然后是一個while(1)的無限循環(huán)。在該部分中用了兩個i
13、f語句來判斷是進(jìn)入時間的設(shè)定,還是進(jìn)入鬧鐘的設(shè)定,在設(shè)定時間和鬧鐘的同時,時鐘不會停止,仍舊在運(yùn)行中。時鐘顯示函數(shù):在void LcdDisplay()、void LcdDisplay1()兩個函數(shù)中通過LCD12864_SetWindow()函數(shù)的調(diào)用來確定LCD12864顯示的哪一行,通過LCD12864_WriteData()函數(shù)的調(diào)用來顯示時間年、月、日、時、分、秒、星期;中斷函數(shù)void Int0() interrupt 0:判斷有沒有按按鍵K17(單片機(jī)上的按鍵標(biāo)號,下同),按一下進(jìn)入設(shè)置時間部分,設(shè)置好時間后,再按一下,時鐘開始從設(shè)置的時間運(yùn)行。6.2 ds1302模塊在該模塊中
14、包含了向DS1302寫入地址和數(shù)據(jù)的函數(shù)void Ds1302Write(uchar addr, uchar dat),從DS1302讀取一個地址的數(shù)據(jù)的函數(shù)uchar Ds1302Read(uchar addr),對DS1302進(jìn)行初始化的函數(shù)void Ds1302Init(),讀取時鐘信息的函數(shù)void Ds1302ReadTime(),對DS1302時鐘進(jìn)行設(shè)置的函數(shù)void Ds1302Set()以及恢復(fù)掉電前數(shù)據(jù)的函數(shù)void Ds1302Init1()。該模塊能實現(xiàn)對DS1302時鐘的控制,其需輸入addr,dat兩個數(shù)據(jù)。6.3 lcd12864模塊該模塊中包含了位接收函數(shù)uch
15、ar BitReverse32(uchar number),延時函數(shù)void LCD12864_Delay1ms(uint c),寫命令函數(shù)void LCD12864_WriteCmd(uchar cmd),檢測LCD12864是否正忙函數(shù)uchar LCD12864_Busy(void),寫數(shù)據(jù)函數(shù)void LCD12864_WriteData(uchar dat),對LCD12864進(jìn)行初始化的函數(shù)void LCD12864_Init(),讀取數(shù)據(jù)函數(shù)uchar LCD12864_ReadData(void)以及在基本指令模式下設(shè)置顯示坐標(biāo)的函數(shù)void LCD12864_SetWindo
16、w(uchar x, uchar y)(其中,x是設(shè)置行,y是設(shè)置列)。該模塊中對LCD12864進(jìn)行了相關(guān)的操作。6.4 key模塊該模塊中只包含了兩個函數(shù)延時函數(shù)void delay7(uint z)和鍵盤控制函數(shù)uchar KeyData(void),以實現(xiàn)鍵盤控制功能。在本設(shè)計中一共用到了六個按鍵(四個獨立按鍵、兩個矩陣鍵盤中的按鍵),其功能如下表所示: 按鍵及其功能表按鍵標(biāo)號(同單片機(jī)上標(biāo)示)按鍵功能K15運(yùn)行時鐘K16進(jìn)入鬧鐘的設(shè)置K17進(jìn)入中斷,設(shè)置時鐘K18控制設(shè)置時間或鬧鐘的選位K19設(shè)置時間或鬧鐘時的加一鍵K20設(shè)置時間或鬧鐘時的減一鍵6.5 ringlock模塊該模塊是鈴
17、聲響鈴模塊,該模塊能使喇叭發(fā)出有節(jié)奏的音樂,還能實現(xiàn)紅外遙控對鬧鐘的控制。該模塊中對鬧鐘部分進(jìn)行了初始化void ClockInit(void),采用定時器中斷0來控制音樂節(jié)拍void int1() interrupt 1,用了一個延時函數(shù)來控制頻率延時void delay1 (unsigned char m),還存在一個毫秒延時子程序void delayms1(unsigned char a),接著是這個模塊的核心響鈴函數(shù)void ring() ,最后是紅外控制鬧鐘的一個中斷子函數(shù)void ReadIr() interrupt 2。6.6 menu模塊和DS18B20模塊這兩個模塊的內(nèi)容是自
18、己添加的,也屬于一個創(chuàng)新點。menu模塊用以進(jìn)入時鐘前顯示一個菜單,在菜單中可以選擇是運(yùn)行時鐘,還是設(shè)置鬧鐘,這個菜單的設(shè)置讓使用者能方便的使用這個電子鐘,因此具有較強(qiáng)的實用性。DS18B20模塊是在顯示時間的同時采集當(dāng)時的溫度并且顯示出來,由于現(xiàn)在用品追求多樣化,多功能化,給系統(tǒng)加上溫度測量顯示模塊,能夠方便人們的生活,使該設(shè)計具有人性化的特點。7.測試與結(jié)果分析1)系統(tǒng)上電后,首先顯示“多功能電子時鐘”的字樣,接著進(jìn)入主菜單,LCD12864顯示“功能選擇:1 運(yùn)行時鐘 2 設(shè)置鬧鐘”。按各功能鍵執(zhí)行相應(yīng)的功能(時鐘操作方法詳見附錄一)。2)設(shè)定鬧鈴時間,當(dāng)鬧鈴時間到時響鈴。 可用紅外遙控
19、來停止鬧鐘。3)顯示時間時通過與秒表對比,測試的系統(tǒng)時鐘走時準(zhǔn)確,誤差很小。4)上電后記錄下時間,然后使單片機(jī)斷電,隔一段時間再次通電,測得系統(tǒng)時鐘仍舊走時準(zhǔn)確。8.總結(jié)本次設(shè)計的多功能電子鐘采用LCD12864液晶屏幕顯示系統(tǒng),以STC89C51單片機(jī)為核心,通過DS1302芯片能準(zhǔn)確計時,以數(shù)字形式顯示年月、日、時、分、秒,而且能自動進(jìn)行平年、閏年的轉(zhuǎn)換,在DS1302中還能編程以實現(xiàn)掉電后存儲數(shù)據(jù)的功能,以使電子鐘重新上電時的時間不受掉電的影響。在該時鐘中小時以24小時計時形式,分秒計時為60進(jìn)位。該電子鐘可通過矩陣按鍵和4個獨立按鍵來對電子表進(jìn)行控制,可進(jìn)行鬧鐘設(shè)定、控制及時間日期的設(shè)
20、定。當(dāng)鬧鐘時間一到,新加的喇叭能發(fā)出有節(jié)奏的音樂,并且LED燈發(fā)光節(jié)奏隨音樂變化,而且可以通過紅外遙控來停止鬧鐘,這在現(xiàn)實生活中顯得十分方便。為了更加方便使用者,本設(shè)計中還特地加上了溫度顯示以及主菜單的設(shè)計??偠灾?,此多功能電子鐘的設(shè)計完成了設(shè)計任務(wù)的基本要求和多數(shù)發(fā)揮部分的內(nèi)容,還有一定的創(chuàng)新部分,而且在設(shè)計過程中考慮到了現(xiàn)實要求,設(shè)計得頗為人性化和智能化,是一個較為完美的設(shè)計。參考文獻(xiàn)1 張毅剛,等. 單片機(jī)原理及接口技術(shù)(第2版).人民郵電出版社,2015.2 張毅剛. 單片機(jī)原理及接口技術(shù)(C51編程).人民郵電出版社,2015.3 張義和,等. 例說51單片機(jī)(C語言版)(第3版)
21、.人民郵電出版社,2013. 附錄一多功能電子時鐘的操作方法 1)將LCD12864接入單片機(jī),并且把相應(yīng)的接口用線連接好(接線圖如下所示),準(zhǔn)備就緒后給單片機(jī)上電; 2)單片機(jī)上電后,LCD12864上會先顯示“多功能電子時鐘”的字樣,接著會自動跳轉(zhuǎn)至功能選擇的主菜單;3)鬧鐘設(shè)定:按下K16可開始設(shè)置鬧鐘,LCD上會先顯示“設(shè)置鬧鐘開始”,然后自動跳轉(zhuǎn)至鬧鐘設(shè)置界面,按K18可選擇是設(shè)置年月日星期,還是設(shè)置時分秒,通過K19、K20來加減位,設(shè)置完成后,按下K17可進(jìn)入時鐘,LCD上顯示“鬧鐘設(shè)定成功 進(jìn)入時鐘”,當(dāng)設(shè)置的鬧鐘時間一到,喇叭會發(fā)出有節(jié)奏的音樂,LED燈閃爍,按下紅外遙控開關(guān)
22、可停止鬧鐘。4)在沒設(shè)置鬧鐘時,可以按K17來進(jìn)行時鐘時間的設(shè)定,按K15運(yùn)行時鐘。接地接并行口接VCC附錄二多功能電子時鐘完整程序main.c(主程序)#include"main.h"uchar SetState,SetPlace;uchar renum,x,y,mn,i,nm,m;uchar code CharCode6="鬧鐘設(shè)定成功 進(jìn)入時鐘"uchar code CharCode7="時間設(shè)定中"uchar code CharCode8="鬧鐘設(shè)定中"void IrInit();void DelayMs2
23、(unsigned int);void redwear(void);void Delay10ms(void);sbit K1=P20;sbit K2=P21;sbit K3=P22;sbit K4=P23; void main()LCD12864_Init();Ds1302Init1();ClockInit();renum=menu();IT0=1; EX0=1; PX0=0;EA=1; while(1)if(renum=0) settime(); else m=0;setclock(); m+;displaylcd(CharCode6);delay8(3000);settime(); voi
24、d LcdDisplay()LCD12864_SetWindow(0, 0); LCD12864_WriteData('2');LCD12864_WriteData('0');LCD12864_WriteData('0'+TIME6/16);LCD12864_WriteData('0'+(TIME6&0x0f); LCD12864_WriteData('-');LCD12864_WriteData('-');LCD12864_WriteData('0'+TIME4/16);
25、LCD12864_WriteData('0'+(TIME4&0x0f);LCD12864_WriteData('-');LCD12864_WriteData('-');LCD12864_WriteData('0'+TIME3/16); LCD12864_WriteData('0'+(TIME3&0x0f); LCD12864_WriteData(' '); LCD12864_WriteData(' '); LCD12864_WriteData(' ')
26、; LCD12864_WriteData(' ');LCD12864_SetWindow(1, 0); LCD12864_WriteData('0'+TIME2/16);LCD12864_WriteData('0'+(TIME2&0x0f); LCD12864_WriteData('-');LCD12864_WriteData('-');LCD12864_WriteData('0'+TIME1/16);LCD12864_WriteData('0'+(TIME1&0x0
27、f);LCD12864_WriteData('-');LCD12864_WriteData('-');LCD12864_WriteData('0'+TIME0/16);LCD12864_WriteData('0'+(TIME0&0x0f); LCD12864_SetWindow(2, 0);LCD12864_WriteData('w');LCD12864_WriteData('e');LCD12864_WriteData('e');LCD12864_WriteData(
28、9;k'); LCD12864_WriteData(' ');LCD12864_WriteData('0'+(TIME5&0x07); DS18B20(); void Int0() interrupt 0 Delay10ms();if(K1=0) LCD12864_WriteCmd(0x0c);SetState=SetState;SetPlace=0;nm=0;if(mn=0)displaylcd(CharCode7);delay8(3000);mn+; if(m=0)Ds1302Init1();elseDs1302Init();void Del
29、ay10ms(void) unsigned char a,b,c; for(c=1;c>0;c-) for(b=38;b>0;b-) for(a=130;a>0;a-);void settime() po=0;b:while(clock()=0)if(SetState=0)mn=0;Ds1302ReadTime(); LcdDisplay();elsemn+; if(K2=0) SetPlace+;if(SetPlace>=7)SetPlace=0;while(i<50)&&(K2=0) Delay10ms();i+;i=0;if(K3=0|K4=
30、0) if(K3=0)TIMESetPlace+; if(TIMESetPlace&0x0f)>9) TIMESetPlace=TIMESetPlace+6; elseTIMESetPlace-;if(TIMESetPlace&0x0f)>9) TIMESetPlace=TIMESetPlace-6;if(TIMESetPlace>=0x60)&&(SetPlace<2)TIMESetPlace=0;if(TIMESetPlace>=0x24)&&(SetPlace=2) TIMESetPlace=0;if(TIME
31、SetPlace>=0x32)&&(SetPlace=3) TIMESetPlace=0;if(TIMESetPlace>=0x13)&&(SetPlace=4) TIMESetPlace=0;if(TIMESetPlace>=0x8)&&(SetPlace=5) TIMESetPlace=1;while(i<50)&&(K3=0)|(K4=0) Delay10ms();i+;i=0;LcdDisplay();if(nm=0) LcdDisplay(); nm+;switch (SetPlace) case
32、 0: y=4;x=1; break; case 1: y=2;x=1; break; case 2: y=0;x=1; break; case 3: y=5;x=0; break; case 4: y=3;x=0; break; case 5: y=2;x=2; break; case 6: y=1;x=0; break;LCD12864_SetWindow(x,y);LCD12864_WriteCmd(0x0f); ring();goto b;uchar numb;void LcdDisplay1()LCD12864_SetWindow(0, 0); LCD12864_WriteData(
33、'2');LCD12864_WriteData('0');LCD12864_WriteData('0'+CLK6/16);LCD12864_WriteData('0'+(CLK6&0x0f);LCD12864_WriteData('-');LCD12864_WriteData('-');LCD12864_WriteData('0'+CLK4/16);LCD12864_WriteData('0'+(CLK4&0x0f);LCD12864_WriteDat
34、a('-');LCD12864_WriteData('-');LCD12864_WriteData('0'+CLK3/16);LCD12864_WriteData('0'+(CLK3&0x0f); LCD12864_SetWindow(1, 0); LCD12864_WriteData('0'+CLK2/16); LCD12864_WriteData('0'+(CLK2&0x0f); LCD12864_WriteData('-');LCD12864_WriteData
35、('-');LCD12864_WriteData('0'+CLK1/16);LCD12864_WriteData('0'+(CLK1&0x0f);LCD12864_WriteData('-');LCD12864_WriteData('-');LCD12864_WriteData('0'+CLK0/16);LCD12864_WriteData('0'+(CLK0&0x0f); LCD12864_SetWindow(2, 0); LCD12864_WriteData(
36、39;w');LCD12864_WriteData('e');LCD12864_WriteData('e'); LCD12864_WriteData('k'); LCD12864_WriteData(' ');LCD12864_WriteData('0'+(CLK5&0x07); DS18B20(); void setclock() mn=1;while(1)if(SetState!=0)SetState=0; break; elseif(K2=0) numb+;if(numb>=7)numb
37、=0;while(i<50)&&(K2=0) Delay10ms();i+;i=0;if(K3=0|K4=0)if(K3=0)CLKnumb+;if(CLKnumb&0x0f)>9) CLKnumb=CLKnumb+6; elseCLKnumb-;if(CLKnumb&0x0f)>9) CLKnumb=CLKnumb-6; if(CLKnumb>=0x60)&&(numb<2) CLKnumb=0;if(CLKnumb>=0x24)&&(numb=2) CLKnumb=0;if(CLKnumb&
38、gt;=0x32)&&(numb=3)CLKnumb=0;if(CLKnumb>=0x13)&&(numb=4)CLKnumb=0;if(CLKnumb>=0x8)&&(numb=5)CLKnumb=1;while(i<50)&&(K3=0)|(K4=0) Delay10ms();i+;i=0;LcdDisplay1();if(nm=0) LcdDisplay1(); nm+; switch (numb) case 0: y=4;x=1; break; case 1: y=2;x=1; break; case 2
39、: y=0;x=1; break; case 3: y=5;x=0; break; case 4: y=3;x=0; break; case 5: y=2;x=2; break; case 6: y=1;x=0; break;LCD12864_SetWindow(x,y);LCD12864_WriteCmd(0x0f);uchar clock()uint pi; for (pi = 0; pi < 7; pi+) if (CLKpi != TIMEpi) return 0; break; return 1;ds1302.c(時鐘控制)#include"ds1302.h"
40、;#include"lcd12864.h"uchar code READ_RTC_ADDR7 = 0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d; uchar code WRITE_RTC_ADDR7 = 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c;void Ds1302Write(uchar addr, uchar dat)uchar n;RST = 0;_nop_();SCLK = 0;_nop_();RST = 1; _nop_();for (n=0; n<8; n+)DSIO = addr
41、 & 0x01;addr >>= 1;SCLK = 1;_nop_();SCLK = 0;_nop_();for (n=0; n<8; n+)DSIO = dat & 0x01;dat >>= 1;SCLK = 1;_nop_();SCLK = 0;_nop_(); RST = 0;_nop_();uchar Ds1302Read(uchar addr)uchar n,dat,dat1;RST = 0;_nop_();SCLK = 0;_nop_();RST = 1;_nop_();for(n=0; n<8; n+)DSIO = addr &
42、amp; 0x01;addr >>= 1;SCLK = 1;_nop_();SCLK = 0;_nop_();_nop_();for(n=0; n<8; n+)dat1 = DSIO;dat = (dat>>1) | (dat1<<7);SCLK = 1;_nop_();SCLK = 0;_nop_();RST = 0;_nop_();SCLK = 1;_nop_();DSIO = 0;_nop_();DSIO = 1;_nop_();return dat;void Ds1302Init()uchar n;Ds1302Write(0x8E,0X00);
43、for (n=0; n<7; n+)Ds1302Write(WRITE_RTC_ADDRn,TIMEn);Ds1302Write(0x8E,0x80);void Ds1302ReadTime()uchar n;for (n=0; n<7; n+)TIMEn = Ds1302Read(READ_RTC_ADDRn);void Ds1302Set()uchar TIME17 ;uchar n;LCD12864_SetWindow(0, 0); Ds1302Write(0x8E,0X00);for (n=0; n<7; n+)Ds1302Write(WRITE_RTC_ADDRn,
44、TIME1n);Ds1302Write(0x8E,0x80); void Ds1302Init1()uchar n; if(Ds1302Read(0xc1)!=0xaa) Ds1302Write(0x8E,0X00); for (n=0; n<7; n+) Ds1302Write(WRITE_RTC_ADDRn,TIMEn); Ds1302Write(0xc0,0xaa);lcd12864.c(LCD液晶顯示)#include"lcd12864.h"uchar BitReverse32(uchar number) uchar res = 0; uint i; for(
45、i = 1; i <= 8; i+) res |= (number&1) << (8-i); number >>= 1; return res; void LCD12864_Delay1ms(uint c) uchar a,b;for(; c>0; c-) for(b=199; b>0; b-) for(a=1; a>0; a-);uchar LCD12864_Busy(void)uchar i = 0;LCD12864_RS = 0; LCD12864_RW = 1;LCD12864_EN = 1;LCD12864_Delay1ms(1
46、);LCD12864_DATAPORT = BitReverse32(LCD12864_DATAPORT);while(LCD12864_DATAPORT & 0x80) = 0x80)i+;if(i > 100)LCD12864_EN = 0;return 0; LCD12864_EN = 0;return 1;void LCD12864_WriteCmd(uchar cmd)uchar i;i = 0;while( LCD12864_Busy() = 0)LCD12864_Delay1ms(1);i+;if( i>100)return; LCD12864_RS = 0; LCD12864_RW = 0; LCD12864_EN = 0; LCD12864_DATAPORT = cmd; LCD12864_DATAPORT = BitReverse32(LCD12864_DATAPORT);LCD12864_EN = 1; LCD12864_Delay1ms(5);LCD12864_EN = 0; void LCD12864_WriteData(uchar dat)uchar i;i = 0;while( LCD12864_Busy() = 0)LCD12864_Delay1ms(1);i+;if( i>100)r
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度曹瑞與張麗離婚協(xié)議中子女撫養(yǎng)及生活費(fèi)用協(xié)議3篇
- 2025年度家禽飼料原料采購與家禽買賣合同書3篇
- 2024版鐵塔公司基站用地租賃協(xié)議樣本一
- 2025年度醫(yī)療器械展承辦合同4篇
- 2024庭院立體綠化設(shè)計與施工合同3篇
- 2025年P(guān)VC消防管道設(shè)備采購銷售專項合同3篇
- 2025年金麗麻布項目投資可行性研究分析報告
- 教案資源:小熊的彩虹滑梯課件公開課教學(xué)設(shè)計資料
- 2025年安徽通 用生物系統(tǒng)有限公司招聘筆試參考題庫含答案解析
- 2025年度個人公司資產(chǎn)剝離合同范本:評估與定價策略4篇
- 新教材人教版高中物理選擇性必修第二冊全冊各章節(jié)課時練習(xí)題及章末測驗含答案解析(安培力洛倫茲力電磁感應(yīng)交變電流等)
- 初級養(yǎng)老護(hù)理員培訓(xùn)全套
- 集中供熱管網(wǎng)系統(tǒng)一次網(wǎng)的調(diào)節(jié)方法
- GB/T 41095-2021機(jī)械振動選擇適當(dāng)?shù)臋C(jī)器振動標(biāo)準(zhǔn)的方法
- MRP、MPS計劃文檔教材
- 甲狀腺疾病護(hù)理查房課件
- 安全安全帶檢查記錄表
- GB∕T 26520-2021 工業(yè)氯化鈣-行業(yè)標(biāo)準(zhǔn)
- 2022年浙江省紹興市中考數(shù)學(xué)試題及參考答案
- Listen-to-this-3-英語高級聽力-(整理版)
- 生活垃圾焚燒處理建設(shè)項目評價導(dǎo)則(2022)
評論
0/150
提交評論