版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、具有報(bào)時(shí)報(bào)溫功能的電子鐘設(shè)計(jì)報(bào)告具有報(bào)時(shí)報(bào)溫功能的電子鐘設(shè)計(jì)報(bào)告電氣工程學(xué)院 電氣88班 侯欣宇 08041208電氣工程學(xué)院 電氣89班 馬歡 08041228一、引言- 3 -二、實(shí)驗(yàn)的主要目的和要求分析- 3 -1.目的:- 3 -2.實(shí)驗(yàn)要求:- 3 -三、設(shè)計(jì)說明- 4 -1.設(shè)計(jì)原理- 4 -2.系統(tǒng)目標(biāo)- 4 -四、硬件設(shè)計(jì)-4 -1. 系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)框圖- 4 -2.溫度傳感器電路- 5 -1)溫度傳感器DSl8B20- 5 -2)DS18B20的性能特點(diǎn)- 5 -3)DS18B20的工作原理- 5 -3.DS1302- 7 -1)DS1302原理簡述- 7 -2)時(shí)間模塊電
2、路- 8 -5.按鍵與顯示- 8 -1)按鍵單元- 8 -2)顯示單元- 9 -五、軟件設(shè)計(jì)- 10 -1.程序設(shè)計(jì)思想簡述- 10 -2.程序源代碼及注釋- 10 -六、實(shí)驗(yàn)總結(jié)- 21 -七、參考文獻(xiàn)- 22 -八、附錄- 22 -1.附錄A- 22 -2.附錄B- 23 -一、 引言電子時(shí)鐘是實(shí)現(xiàn)對(duì)年,月,日,時(shí),分,秒數(shù)字顯示的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭,車站, 碼頭,辦公室,銀行大廳等場所,成為人們?nèi)粘I钪械谋匦杵?。?shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度遠(yuǎn)遠(yuǎn)超過老式鐘表。鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,在此基礎(chǔ)上完成的電子時(shí)鐘精度高,功能易于擴(kuò)展
3、。可擴(kuò)展成為諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí) 廣播、自動(dòng)起閉路燈、定時(shí)開關(guān)烘箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等電路。所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字時(shí)鐘及擴(kuò)大其應(yīng)用有著非?,F(xiàn)實(shí)的意義。本設(shè)計(jì)就是數(shù)字時(shí)鐘簡單的擴(kuò)展應(yīng)用。1 設(shè)計(jì)要求本設(shè)計(jì)準(zhǔn)備實(shí)現(xiàn)的功能: (1) 顯示日期功能(年、月、日、時(shí)、分、秒以及) (2) 可通過按鍵切換年、月、日及時(shí)、分、秒的顯示狀態(tài) (3) 可隨時(shí)調(diào)校年、月、日或時(shí)、分、秒 (4) 可每次增減一進(jìn)行時(shí)間調(diào)節(jié) (5) 可動(dòng)態(tài)完整顯示年份,實(shí)現(xiàn)真正的萬年歷顯示 (6) 可顯示溫度二、 實(shí)驗(yàn)主要目的和要求分析1. 目的:(
4、1) 通過查閱相關(guān)資料,深入了解溫度測量相關(guān)知識(shí)(2) 學(xué)習(xí)動(dòng)態(tài)顯示方式的實(shí)現(xiàn)方法及原理(3) 掌握可視化操作界面設(shè)計(jì)(4) 設(shè)計(jì)具有報(bào)時(shí)報(bào)溫功能的電子鐘的原理圖,構(gòu)建硬件平臺(tái)(5) 制作出樣機(jī)并測試達(dá)到功能和技術(shù)指標(biāo)要求2. 實(shí)驗(yàn)要求:功能說明:1. 具有電子鐘基本的實(shí)時(shí)年月日顯示以及時(shí)分秒顯示功能;2. 通過DS18B20測量溫度并將測得的數(shù)據(jù)傳入到AT89C52中;3. 通過八位LED數(shù)碼管動(dòng)態(tài)顯示日期、時(shí)間與溫度,并通過按鍵切換;4. 具有校時(shí)功能,通過按鍵切換進(jìn)行校時(shí);5. 具有定鬧功能,通過按鍵切換進(jìn)行定鬧;三、 設(shè)計(jì)說明1. 設(shè)計(jì)原理本系統(tǒng)以單片機(jī)AT89C52為核心控制芯片,通
5、過傳感器DS18B20采樣溫度值,將采得的十六進(jìn)制溫度值轉(zhuǎn)換為精度為0.1°的十進(jìn)制溫度,并顯示;采用DS1302芯片作為智能顯示驅(qū)動(dòng)芯片,將其驅(qū)動(dòng)信號(hào)輸入單片機(jī)AT89C52,并通過八位LED數(shù)碼管來顯示,通過按鍵的切換來進(jìn)行時(shí)間校準(zhǔn),亦可通過按鍵來設(shè)置鬧鐘。系統(tǒng)軟件部分,采用C語言來進(jìn)行編寫,具有很好的可控性和可讀性。2. 系統(tǒng)目標(biāo)采用溫度傳感器DS18B20,實(shí)時(shí)地采集室內(nèi)的溫度,通過按鍵的切換在屏幕上顯示;通過DS1302芯片來實(shí)現(xiàn)基本的實(shí)時(shí)年月日顯示以及時(shí)分秒實(shí)時(shí)顯示;通過八位LED數(shù)碼管動(dòng)態(tài)顯示日期、時(shí)間與溫度,并通過按鍵切換;通過軟、硬件結(jié)合來實(shí)現(xiàn)校時(shí)功能,通過按鍵切換
6、進(jìn)行校時(shí);通過軟、硬件結(jié)合來實(shí)現(xiàn)定鬧功能,并通過按鍵的切換進(jìn)行設(shè)定鬧鐘;整個(gè)電子鐘的設(shè)計(jì)包括硬件系統(tǒng)與軟件系統(tǒng)的設(shè)計(jì)。四、 硬件設(shè)計(jì)1. 系統(tǒng)總體設(shè)計(jì)結(jié)構(gòu)框圖基于以上所述的實(shí)驗(yàn)要求和系統(tǒng)目標(biāo),本實(shí)驗(yàn)的具有報(bào)時(shí)報(bào)溫功能的電子鐘,需要具有定鬧、時(shí)間校準(zhǔn)等功能;而對(duì)于溫度測量,采用溫度傳感器DS18B20來測溫,而后將測得的結(jié)果送到AT89C52中;對(duì)于日期與時(shí)間,采用時(shí)鐘芯片DS1302來計(jì)時(shí);所有的顯示部分采用八位LED數(shù)碼管顯示電路。綜上所述,本設(shè)計(jì)方案形成。總體設(shè)計(jì)框圖如圖1:顯示電路DS18B20溫度采集電路單片機(jī)AT89C52DS1302時(shí)鐘電路設(shè)置電路圖1 具有報(bào)溫報(bào)時(shí)功能的電子鐘硬件
7、總體設(shè)計(jì)框圖2. 溫度傳感器電路1) 溫度傳感器DSl8B20由美國DALLAS半導(dǎo)體公司生產(chǎn)的DSl8B20型單線智能溫度傳感器,屬于新一代適配微處理器的智能溫度傳感器,可廣泛用于工業(yè)、民用、軍事等領(lǐng)域的溫度測量及控制儀器、測控系統(tǒng)和大型設(shè)備中,例如多路溫度測控儀、中央空調(diào)、大型冷庫、恒溫裝置等。DSl8B20的電源電壓范圍均擴(kuò)展到+3+5.5V,DSl8B20還能對(duì)溫度分辨力進(jìn)行編程,選擇9位12位模式下工作,在12位模式下的最高分辨力可達(dá)0.0625, 被測溫度用符號(hào)擴(kuò)展的16位數(shù)字量方式串行輸出,其工作電源既可在遠(yuǎn)端引入,業(yè)可采用寄生電源方式產(chǎn)生,多個(gè)DS18B20可以并聯(lián)到三根或者兩
8、根線上,CPU只需一根端口線就能與多個(gè)DS18B20通信,占用微處理器的端口較少,可節(jié)省大量的引線和邏輯電路。從而可以看出DS18B20可以非常方便的被用于遠(yuǎn)距離多點(diǎn)溫度檢測系統(tǒng)。綜上,在本系統(tǒng)中我采用溫度芯片DS18B20測量溫度。該芯片的物理化學(xué)性很穩(wěn)定,它能用做工業(yè)測溫元件,且此元件線形較好。在0100攝氏度時(shí),最大線形偏差小于1攝氏度。該芯片直接向單片機(jī)傳輸數(shù)字信號(hào),便于單片機(jī)處理及控制。2) DS18B20的性能特點(diǎn)(1)DSl8B20采用DALLAS公司獨(dú)特的“單線(1-Wire)總線”專有技術(shù),與單片機(jī)通信只要一根I/O線;(2)在測溫范圍是-55+125時(shí),測量誤差不超過
9、77;2,在-10+85范圍內(nèi),可確保測量誤差不超過±0.5;(3)在構(gòu)成大型溫控系統(tǒng)時(shí),允許在單線總線上掛接多片DSl8B20; (4) 低壓供電,電源范圍從35V,也可以直接從數(shù)據(jù)線上竊取電源; (5) 數(shù)據(jù)位可編程912位,轉(zhuǎn)換12位實(shí)踐為750ms(最大); (6) 用戶可自設(shè)定報(bào)警上下限溫度;(7)報(bào)警搜索命令可識(shí)別和尋址哪個(gè)器件的溫度超過預(yù)定值;3) DS18B20的工作原理DSl8B20的原理與DS1820的原理是一樣的。DS18B20繼承了DS1820的所有優(yōu)點(diǎn)。DS18B20采用3腳PR35封裝或8腳SOIC封裝,引腳排列如圖2所示(與實(shí)際外形略有差別)。I/O為數(shù)
10、據(jù)輸入輸出端(即單線總線),它屬于漏極開路輸出,外接上拉電阻后,常態(tài)下呈高電平。UDD是可供選用的外部+5V電源端,不用時(shí)需接地。GND為地,NC為空腳。 (a) PR35封裝 (b) SOIC封裝圖2 DS1820/DS18B20的引腳排列(1)DSl8B20原理DSl8B20內(nèi)部測溫電路框圖如圖3 所示。低溫度系數(shù)振蕩器用于產(chǎn)生穩(wěn)定的頻率0,高溫度系數(shù)振蕩器則相當(dāng)于T轉(zhuǎn)換器,能將被測溫度t轉(zhuǎn)換成頻率信號(hào)0圖中還隱含著計(jì)數(shù)門,當(dāng)計(jì)數(shù)門打開時(shí),DSl8B20就對(duì)低溫度系數(shù)振蕩器產(chǎn)生的時(shí)鐘脈沖0進(jìn)行計(jì)數(shù),進(jìn)而完成溫度測量。計(jì)數(shù)門的開啟時(shí)間由高溫度系數(shù)振蕩器來決定。每次測量前,首先將-55所對(duì)應(yīng)的
11、基數(shù)分別置入減法計(jì)數(shù)器、溫度寄存器中。在計(jì)數(shù)門關(guān)閉之前若計(jì)數(shù)器已減至零,溫度寄存器中的數(shù)值就增加0.5。然后,計(jì)數(shù)器依斜率累加器的狀態(tài)置入新的數(shù)值,再對(duì)時(shí)鐘計(jì)數(shù),然后減至零,溫度寄存器值又增加0.5。只要計(jì)數(shù)門仍未關(guān)閉,就重復(fù)上述過程,直至溫度寄存值達(dá)到被測溫度值。這就是DSl8B20的測溫原理。斜率累加器能對(duì)振蕩器的非線性予以補(bǔ)償,提高測量準(zhǔn)確度。 需要指出,溫度值本應(yīng)為9位(其中,符號(hào)占一位),但因符號(hào)位又被擴(kuò)展成高8位,故實(shí)際以16位補(bǔ)碼的形式讀出。其中,高8位代表符號(hào),“0”表示t>0,“1”表示t<0;低8位則以0.5LSB。 圖3 內(nèi)部測溫電路框圖DSl8B20型單線智
12、能溫度傳感器典型的測溫誤差在070范圍內(nèi),DSl8B20的上、下限測溫誤差分別為+0.5、-0.5,而典型產(chǎn)品的誤差僅為±0.25。(2)測溫電路圖圖4 測溫電路圖分析:如圖4所示。DS18B20,與單片機(jī)的T0口,即P3.4管腳相連。采用集中外部供電的方式。P3.4管腳送入單片機(jī)AT89C52。3. DS13021) DS1302原理簡述DS1302是 Dallas 公司生產(chǎn)的一種實(shí)時(shí)時(shí)鐘芯片.它通過串行方式與單片機(jī)進(jìn)行數(shù)據(jù)傳送,能夠向單片機(jī) 提供包括秒,分,時(shí),日,月,年等在內(nèi)的實(shí)時(shí)時(shí)間信息,并可對(duì)月末日期,閏年天數(shù)自動(dòng)進(jìn)行調(diào)整; 它還擁有用于主電源和備份電源的雙電源引腳,在主電
13、源關(guān)閉的情況下,也能保持時(shí)鐘的連續(xù)運(yùn)行。另外,它還能提供 31 字節(jié)的用于高速數(shù)據(jù)暫存的 RAM.鑒于上述特點(diǎn),DS1302 已在許多單片機(jī)系統(tǒng)中得 到應(yīng)用,為系統(tǒng)提供所需的實(shí)時(shí)時(shí)鐘信息。DS1302 時(shí)鐘芯片內(nèi)主要包括移位寄存器,控制邏輯電路,振蕩器,實(shí)時(shí)時(shí)鐘電路以及用于高速暫存的31 字節(jié) RAM。DS1302 與單片機(jī)系統(tǒng)的數(shù)據(jù)傳送依靠 RST,I/O,SCLK 三根端線即可完成。其工作過 程可概括為:首先系統(tǒng) RST 引腳驅(qū)動(dòng)至高電平,然后在作用于 SCLK 時(shí)鐘脈沖的作用下,通過 I/O 引腳 向 DS1302 輸入地址/命令字節(jié),隨后再在 SCLK 時(shí)鐘脈沖的配合下,從 I/O 引
14、腳寫入或讀出相應(yīng)的數(shù)據(jù) 字節(jié).因此,其與單片機(jī)之間的數(shù)據(jù)傳送是十分容易實(shí)現(xiàn)的。2) 時(shí)間模塊電路圖圖5 時(shí)間模塊電路圖4. 按鍵與顯示1)按鍵單元單片機(jī)應(yīng)用系統(tǒng)中除了復(fù)位按鍵有專門的復(fù)位電路,以及專一的復(fù)位功能外,其它的按鍵或鍵盤都是以開關(guān)狀態(tài)來設(shè)置控制功能或輸入數(shù)據(jù)。 鍵開關(guān)狀態(tài)的可靠輸入 :它是在檢測到有鍵按下時(shí),執(zhí)行一個(gè)10ms的延時(shí)程序后,再確認(rèn)該鍵電平是否仍保持閉合狀態(tài)電平,如保持閉合狀態(tài)電平則確認(rèn)為真正鍵按下狀態(tài),從而消除了抖動(dòng)影響。在本電子鐘系統(tǒng)中,按鍵處理程序首先執(zhí)行等待按鍵,并確認(rèn)有無按鍵按下的程序段。當(dāng)確認(rèn)有按鍵按下后,下一步就要識(shí)別哪一個(gè)按鍵按下。對(duì)按鍵的識(shí)別通常有兩種方
15、法:一種是常用的逐行掃描查詢法;另一種是速度較快的線反轉(zhuǎn)法。本系統(tǒng)共有5個(gè)按鍵(除了復(fù)位按鍵),用于方便設(shè)定日期、時(shí)間和鬧鐘時(shí)間,以及不同內(nèi)容顯示的切換。具體如下表:表1 按鍵功能表S1S2S3S4S5S6顯示切換1路2路3路設(shè)定復(fù)位2) 顯示單元本電子鐘系統(tǒng)為八位顯示,使用8個(gè)LED動(dòng)態(tài)數(shù)碼管。當(dāng)用于顯示時(shí)間時(shí),前兩個(gè)為1路,所顯示的是小時(shí);第三個(gè)為分隔符;第四以及第五個(gè)為2路,所顯示的是分鐘;第六個(gè)為分隔符;后兩個(gè)為3路,所顯示的是秒;當(dāng)用于顯示日期時(shí),前四個(gè)為1路,所顯示的是年;第五個(gè)以及第六個(gè)為2路,所顯示的是月份;后兩個(gè)為3路,所顯示的是日期;當(dāng)用于顯示溫度時(shí),中間幾個(gè)用于顯示溫度。
16、圖6按鍵電路圖圖7 顯示電路圖五、 軟件設(shè)計(jì)1. 程序設(shè)計(jì)思想簡述程序主體由主函數(shù)和若干子函數(shù)組成溫度讀寫子函數(shù),時(shí)間讀寫子函數(shù),延遲子函數(shù),譯碼子函數(shù),顯示子函數(shù),時(shí)間設(shè)定子函數(shù),日期設(shè)定子函數(shù),鬧鐘比對(duì)子函數(shù)。下面分別作簡要介紹:1.溫度讀寫:本系統(tǒng)利用DS18B20芯片進(jìn)行溫度的測量,將DS18B20與單片機(jī)的P3.4管腳連接來實(shí)現(xiàn)對(duì)溫度讀操作。將讀入數(shù)據(jù)進(jìn)行轉(zhuǎn)換,得到溫度符號(hào)位、整數(shù)位及小數(shù)位真值。2. 時(shí)間讀取:本系統(tǒng)利用DS1302芯片產(chǎn)生時(shí)間,將DS1302的5、6、7管腳與單片機(jī)AT89C52的P2.0、P2.1、P2.2連接來實(shí)現(xiàn)對(duì)時(shí)間、日期的讀、寫操作。校時(shí)完成后,自動(dòng)由單
17、片機(jī)AT89C52發(fā)送讀取命令,進(jìn)而讀得時(shí)間。3.時(shí)間校準(zhǔn):時(shí)間的校準(zhǔn)、設(shè)定通過對(duì)按鍵的檢測,進(jìn)而利用單片機(jī)AT89C52的P2.0、P2.1、P2.2與DS1302芯片進(jìn)行通信,來實(shí)現(xiàn)對(duì)時(shí)間、日期的調(diào)節(jié)。S5鍵按下,從主程序中跳出,進(jìn)入中斷程序;不斷按下S5,實(shí)現(xiàn)在校準(zhǔn)時(shí)間、日期、星期及鬧鐘時(shí)間之間轉(zhuǎn)換;通過對(duì)S2、S3、S4閉合檢測計(jì)數(shù),實(shí)現(xiàn)對(duì)當(dāng)前選定校時(shí)對(duì)象1、2、3路的數(shù)值的校準(zhǔn);當(dāng)S1閉合時(shí),結(jié)束中斷程序,返回到主程序中。實(shí)時(shí)顯示調(diào)整的結(jié)果實(shí)時(shí)顯示。 4. 定鬧提醒:當(dāng)?shù)搅唆[鐘設(shè)定的時(shí)間,閃爍LED燈,實(shí)現(xiàn)鬧鐘功能。鬧鐘的時(shí)間已經(jīng)設(shè)定好。將DS1302芯片輸入的時(shí)、分、秒信號(hào)和鬧鐘的
18、時(shí)間進(jìn)行比較,當(dāng)相等時(shí),交替執(zhí)行點(diǎn)亮LED燈命令,鬧鐘功能更得以實(shí)現(xiàn)。2. 程序源代碼及注釋#include<reg52.h>#include<absacc.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned int/所有接口聲明#define LATCH1 XBYTE0X0C000#define LATCH2 XBYTE0X0A000#define LATCH3 XBYTE0X6000#define jump_ROM 0xCC#define start 0x44#def
19、ine read_RAM 0xBEsbit k1=P10;sbit k2=P11;sbit k3=P12;sbit k4=P13;sbit k5=P32;sbit DQ=P34;sbit sda=P21;sbit clk=P20;sbit rst=P22;/所有數(shù)組以及緩存uchar code VOICETABLE=0x00,0x09,0x12,0x1B,0x24,0x2D,0x36,0x3F,0x48,0x51,0x5A,0x63,0x6C,0x75,0x7E,0x87,0x90,0x99,0xA8,0xB7,0xCB,0xDF,0xF3,0xFF;uchar code GONGYIN=0x
20、3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F;/0到uchar code SPECIAL=0x63,0x39,0x00,0x40;/°C空-uchar code GUANXUAN=1,2,4,8,16,32,64,128;uchar idata temperature4=0,0,0,0;/這里存的真值第一位表示正負(fù),每個(gè)元素一位,當(dāng)成松散的BCDuchar idata time3=19,19,19;/s,min,huchar idata date4=13,5,4,10;/d,m,w,y/day0,day1,month2,month3,
21、week4,year5,year6uchar idata alarmtime3=0,30,6;/second,minute,houruchar idata displaybuffer8;/變量uchar showflag=1;/0鬧鐘1時(shí)間2日期3星期4溫度uchar adjustflag=0;uchar timecount=20;/子函數(shù)void DelayMS(uint x) uchar i; while(x-) for(i=0;i<120;i+);void yima(uchar flag) reentrant/0鬧鐘1時(shí)間2日期3星期4溫度 switch(flag) uchar i
22、; case 0:/e.g 23-10-30 displaybuffer0=GONGYINalarmtime2/10; displaybuffer1=GONGYINalarmtime2%10; displaybuffer2=SPECIAL3; displaybuffer3=GONGYINalarmtime1/10; displaybuffer4=GONGYINalarmtime1%10; displaybuffer5=SPECIAL3; displaybuffer6=GONGYINalarmtime0/10; displaybuffer7=GONGYINalarmtime0%10; break
23、; case 1: displaybuffer0=GONGYIN(time2/10); displaybuffer1=GONGYIN(time2%10); displaybuffer2=SPECIAL3; displaybuffer3=GONGYIN(time1/10); displaybuffer4=GONGYIN(time1%10); displaybuffer5=SPECIAL3; displaybuffer6=GONGYIN(time0/10); displaybuffer7=GONGYIN(time0%10); break; case 2: /10 04 22 displaybuff
24、er0=GONGYIN2; displaybuffer1=GONGYIN0; displaybuffer2=GONGYIN(date3/10); displaybuffer3=GONGYIN(date3%10)|0x80; displaybuffer4=GONGYIN(date1/10); displaybuffer5=GONGYIN(date1%10)|0x80; displaybuffer6=GONGYIN(date0/10); displaybuffer7=GONGYIN(date0%10); break; case 3: /-7/date4=5,1,6,10;/d,m,w,y/ dis
25、playbuffer0=SPECIAL2; for(i=1;i<6;i+) displaybufferi=SPECIAL3; displaybuffer6=GONGYINdate2; displaybuffer7=SPECIAL2; break; case 4: /-15.6°C displaybuffer0=SPECIAL2; displaybuffer1=SPECIALtemperature0+2; displaybuffer2=GONGYINtemperature1; displaybuffer3=GONGYINtemperature2|0x80; displaybuff
26、er4=GONGYINtemperature3; displaybuffer5=SPECIAL0; displaybuffer6=SPECIAL1; displaybuffer7=SPECIAL2; break; default: break; void display() /顯示displaybuffer uchar i; for(i=0;i<8;i+) LATCH1=displaybufferi; LATCH2=GUANXUANi; DelayMS(2); LATCH2=0; /-void delay(uchar n) int i; for(i=0;i<n;i+);uchar
27、reset() uchar deceive_ready; DQ=0; delay(29); DQ=1; delay(3); deceive_ready=DQ; delay(25); return(deceive_ready);uchar read_bit() unsigned char i; DQ=0; /總線拉低,啟動(dòng)讀 DQ=1;/ 總線拉高,準(zhǔn)備讀取 for(i=0;i<3;i+); return(DQ);void write_bit(uchar bitval) DQ=0; if(bitval=1) DQ=1; delay(5); DQ=1;void write_byte(ucha
28、r val) uchar i,temp; for(i=0;i<8;i+) temp=val>>i; temp=temp&0x01; write_bit(temp); delay(5); uchar read_byte() uchar i,m,receive_data; m=1; receive_data=0; for(i=0;i<8;i+) if (read_bit() receive_data=receive_data+(m<<i); delay(6); return(receive_data);void read_temp(uchar *p)/讀
29、溫度存入?yún)⒘繑?shù)組 uchar temp1,tmph,tmpl; reset(); display(); write_byte(jump_ROM); display(); write_byte(read_RAM); display(); tmpl=read_byte(); display(); tmph=read_byte(); display(); temp1=(tmph<<4)|(tmpl>>4); *p+=temp1>>7;/讀符號(hào)位 temp1=temp1&0x7F;/0111 1111,取正值 *p+=temp1/10;/得到的十位真值 *p
30、+=temp1%10;/0000#作為個(gè)位,需加小數(shù)點(diǎn) temp1=tmpl&0x0f;/取小數(shù)部分# *p=temp1*5/8;/小數(shù)真值 display(); reset(); display(); write_byte(jump_ROM); display(); write_byte(start); display();/-/寫字節(jié)到DS1302中void writeabyte(uchar x) uchar i; for(i=0;i<8;i+) sda=x&1; clk=1;/use positive edge to write clk=0; x>>=1
31、; uchar readabyte() uchar i,b,t; for(i=0;i<8;i+) /b=0000 0000;#000 0000;#00 0000;when i=7,# #0 b>>=1; t=sda;/there is a falling edge after command written b|=t<<7;/t=LSB first,every new bit is added to MSB of b clk=1; clk=0; /BCD to HEX(real value) return b/16*10+b%16;/從DS1302的確定位置讀字節(jié)
32、uchar readdata(uchar addr) uchar dat; rst=0; clk=0;/-They rst=1; writeabyte(addr);/-are dat=readabyte();/-matched clk=1; rst=0; return dat;/寫字節(jié)到DS1302中void writedata(uchar addr,uchar dat) clk=0; rst=1; writeabyte(addr); writeabyte(dat); clk=0; rst=0;void set_time() writedata(0x8e,0x00);/addr=8eH -&g
33、t;write protect,dat=00H means cancel WP /真值,要轉(zhuǎn)成BCD給DS1302,依次秒,分,時(shí) writedata(0x80,(time0/10<<4)|(time0%10); writedata(0x82,(time1/10<<4)|(time1%10); writedata(0x84,(time2/10<<4)|(time2%10); writedata(0x8e,0x80);/WPvoid read_time() time0=readdata(0x81);/ss time1=readdata(0x83);/mm ti
34、me2=readdata(0x85);/hhvoid set_date() writedata(0x8e,0x00);/addr=8eH ->write protect,dat=00H means cancel WP /依次日,月,星期,年 writedata(0x86,(date0/10<<4)|(date0%10); writedata(0x88,(date1/10<<4)|(date1%10); writedata(0x8A,(date2/10<<4)|(date2%10); writedata(0x8C,(date3/10<<4)|
35、(date3%10); writedata(0x8e,0x80);/WPvoid read_date() date0=readdata(0x87);/day date1=readdata(0x89);/month date2=readdata(0x8B);/week date3=readdata(0x8D);/year/-void check_alarm() uchar i; if (alarmtime2=time2) if (alarmtime1=time1) if(alarmtime0=time0) for(i=0;i<150;i+) /點(diǎn)亮FLAG(交替) /實(shí)現(xiàn)閃爍方式的鬧鐘提醒
36、 k1=0; DelayMS(50); k1=0;display(); /-void main() read_date(); read_time(); EX0=1; IT0=1;/IT0=1;falling edge trigger ET0=1; TMOD=0x01;/MODE1 16位不自動(dòng)置數(shù) TL0=0x00; TH0=0x4C; EA=1; TR0=1; while(1) read_time(); if(k1=0) DelayMS(50); if(k1=0) showflag+; if(showflag=5) showflag=0; yima(showflag); display();
37、 check_alarm(); void TIMEADJUST() interrupt 0 /優(yōu)先級(jí)最高 /k5進(jìn)中斷就不再出去了,負(fù)責(zé)選擇adjustflag調(diào)整對(duì)象 /從左到右共位,分別由k2,k3,k4調(diào)節(jié)增加 /k1為確認(rèn),改寫,退出中斷 uchar adjustflag=1; bit O_K_=1; while(O_K_) yima(adjustflag);/1時(shí)間,日期,星期,鬧鐘時(shí)間 display(); if(k5=0)/調(diào)整對(duì)象,時(shí)間,日期,星期,鬧鐘時(shí)間 DelayMS(50); if(k5=0) adjustflag+; if(adjustflag=4) adjustfl
38、ag=0; if (k2=0)/第一位增加 DelayMS(50); if(k2=0) /時(shí)間小時(shí) if(adjustflag=1) time2=(time2+1)%24;/a fantastic skill of % /日歷年 if(adjustflag=2) date3=(date3+1)%100; /鬧鐘小時(shí) if(adjustflag=0) alarmtime2=(alarmtime2+1)%24; if (k3=0)/第二位增加 DelayMS(50); if(k3=0) /時(shí)間分鐘 if(adjustflag=1) time1=(time1+1)%60; /日歷月 if(adjustflag=2) date1=date1+1; if(date1=13) date1=1; /鬧鐘分鐘 if(adjustflag=0) alarmtime1=(alarmtime1+1)%60; if (k4=0)/第三位增加 DelayMS(50); if(k4=0); /時(shí)間秒 if(adjustflag=1) time0=(t
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度寵物用品連鎖店承包經(jīng)營服務(wù)協(xié)議4篇
- 二零二五版明星代言合同合作方責(zé)任與義務(wù)協(xié)議4篇
- 建設(shè)工程設(shè)計(jì)合同(2篇)
- 聚氨酯管殼施工方案
- 二零二五版數(shù)碼產(chǎn)品典當(dāng)借款服務(wù)協(xié)議4篇
- 2025年度個(gè)人貸款還款計(jì)劃合同模板8篇
- 中央處理器GPU:性能躍遷與行業(yè)應(yīng)用的深度剖析 頭豹詞條報(bào)告系列
- 班會(huì)安全教育模板
- 二零二五年度民間擔(dān)保機(jī)構(gòu)與企業(yè)合作協(xié)議4篇
- 鯨的自述200字5篇
- 2023-2024學(xué)年度人教版一年級(jí)語文上冊(cè)寒假作業(yè)
- 軟件運(yùn)維考核指標(biāo)
- 空氣動(dòng)力學(xué)仿真技術(shù):格子玻爾茲曼方法(LBM)簡介
- 對(duì)表達(dá)方式進(jìn)行選擇與運(yùn)用
- GB/T 18488-2024電動(dòng)汽車用驅(qū)動(dòng)電機(jī)系統(tǒng)
- 投資固定分紅協(xié)議
- 高二物理題庫及答案
- 職業(yè)發(fā)展展示園林
- 2024版醫(yī)療安全不良事件培訓(xùn)講稿
- 中學(xué)英語教學(xué)設(shè)計(jì)PPT完整全套教學(xué)課件
- 移動(dòng)商務(wù)內(nèi)容運(yùn)營(吳洪貴)項(xiàng)目五 運(yùn)營效果監(jiān)測
評(píng)論
0/150
提交評(píng)論