單片機(jī)技術(shù)及其應(yīng)用_第1頁(yè)
單片機(jī)技術(shù)及其應(yīng)用_第2頁(yè)
單片機(jī)技術(shù)及其應(yīng)用_第3頁(yè)
單片機(jī)技術(shù)及其應(yīng)用_第4頁(yè)
單片機(jī)技術(shù)及其應(yīng)用_第5頁(yè)
已閱讀5頁(yè),還剩30頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、單片機(jī)技術(shù)及其應(yīng)用課程設(shè)計(jì)報(bào)告S:萬(wàn)年歷的設(shè)計(jì)班級(jí):120302學(xué)號(hào):1203010216姓名:涂劃同組人員: 湯吉鑫、高翔、王正提指導(dǎo)教師:薛蓮二0四年九月二十七日1.課程設(shè)計(jì)目的.12.課程設(shè)計(jì)題目描述和要求.13課程設(shè)計(jì)報(bào)告容.23.1設(shè)計(jì)思路 .23.2設(shè)計(jì)過(guò)程 .23.3電路的仿真及調(diào)試 .154總結(jié).175指導(dǎo)教師意見.18參考書目.18程序代碼.191.課程設(shè)計(jì)目的在學(xué)習(xí)單片機(jī)后,我們深知它在我們的生活中無(wú)處不在,而社會(huì)更好的發(fā) 展需要當(dāng)代知識(shí)分子不懈的努力。在理論知識(shí)的充溢后,我們必須通過(guò)實(shí)踐來(lái) 更好的掌握單片機(jī)技術(shù),只有自己動(dòng)手通過(guò)單片機(jī)做出自己想做的東西,才可 證明我們對(duì)單

2、片機(jī)能夠靈活的運(yùn)用。在理論與實(shí)踐結(jié)合的情況下我們可在此次 設(shè)汁小作品中自己查閱資料并自己仿真電路編寫程序設(shè)計(jì)出完整的單片機(jī)電 路。在完成課程設(shè)計(jì)的過(guò)程中我們可提升自己對(duì)電路的分析能力,及編譯程序 的能力,并且可以增強(qiáng)我們布局電路的意識(shí),從而讓我們自己全面的運(yùn)用到學(xué) 過(guò)的知識(shí),讓自己在今后的發(fā)展中能好的學(xué)以致用。2.課程設(shè)計(jì)題目描述和要求我們選擇的課題為:萬(wàn)年歷的設(shè)計(jì)。隨著當(dāng)今世界經(jīng)濟(jì)的快速發(fā)展和信息 化時(shí)代的來(lái)臨,各種各樣的小型智能家電產(chǎn)品陸續(xù)出現(xiàn)在我們的生活當(dāng)中;電 子萬(wàn)年歷作為一種功能十分強(qiáng)大的日常計(jì)時(shí)工具,它可以對(duì)年、月、日、星期、 時(shí)、分、秒進(jìn)行計(jì)時(shí),還具有閏年補(bǔ)償?shù)榷喾N功能,而且DS

3、1302的使用壽命 長(zhǎng),誤差小。對(duì)于數(shù)字電子萬(wàn)年歷采用直觀的數(shù)字顯示,可以同時(shí)顯示年、月、 日、星期、時(shí)、分、秒等信息,還具有時(shí)間校準(zhǔn)等功能,已逐步的出現(xiàn)在我們 的日常生活中。一般日常生活都使用的是紙質(zhì)日歷,紙質(zhì)日歷顯示效果不太好 并且使用壽命不長(zhǎng),造成了一定的資源浪費(fèi)。針對(duì)傳統(tǒng)的紙質(zhì)日歷局限性,本 論文設(shè)計(jì)了一款基于單片機(jī)的電子萬(wàn)年歷系統(tǒng);本設(shè)計(jì)以STC89C52單片機(jī)為 核心,構(gòu)成系統(tǒng)主控制電路,全部信息用12864液晶顯示;時(shí)間、日期調(diào)整、 鬧鈴及界面的切換山三個(gè)獨(dú)立按鍵來(lái)實(shí)現(xiàn),并可對(duì)鬧鈴開關(guān)進(jìn)行設(shè)置。日歷能 顯示陽(yáng)歷和陰歷年、月、日以及星期、時(shí)、分、秒。電子萬(wàn)年歷釆用智能電子 控制和顯

4、示技術(shù),改善了紙制日歷的缺陷。它集時(shí)間、日期、星期等功能于一 身,具有讀取方便、顯示直觀、功能多樣、電路簡(jiǎn)潔等諸多優(yōu)點(diǎn),符合電子儀 器儀表的發(fā)展趨勢(shì),具有廣闊的市場(chǎng)前景。本次的課程設(shè)計(jì)題H要求為:采用51系列單片機(jī)和LCD12864液晶顯示屏 設(shè)計(jì)一個(gè)萬(wàn)年歷,能夠?qū)崿F(xiàn)年、月、日、農(nóng)歷、星期、時(shí)間和定時(shí)的功能。主 要功能如下:(1) 、顯示年、月、日,時(shí)、分、秒和星期,并有相應(yīng)的農(nóng)歷顯示;(2) 、可通過(guò)鍵盤自動(dòng)調(diào)整時(shí)間;(3) 、具有鬧鐘功能;(4)、能夠顯示環(huán)境溫度,誤差小于rc;(5)、計(jì)時(shí)精度:月誤差小于20s。3.課程設(shè)計(jì)報(bào)告容3.1設(shè)計(jì)思路(1)根據(jù)設(shè)計(jì)要求,選擇AT89C52單片機(jī)

5、為核心控制器件。(2)時(shí)鐘芯片采用DS13O2實(shí)現(xiàn)計(jì)時(shí)的功能。(3)采用DS18B2O溫度傳感器與單片機(jī)P2.6 口相連實(shí)現(xiàn)溫度顯示功能。(4)使用一個(gè)PNP三極管作為蜂鳴器的驅(qū)動(dòng),接P2.7 口實(shí)現(xiàn)鬧鐘功能。3.2設(shè)計(jì)過(guò)程3.2硬件設(shè)計(jì)(1)系統(tǒng)模塊根據(jù)系統(tǒng)功能要求,可大致畫出系統(tǒng)所需硬件結(jié)構(gòu)框圖如圖3-1所示:圖3-1系統(tǒng)功能模塊圖主控模塊采用性價(jià)比較高的AT89S52單片機(jī)芯片,在其部燒寫好程序,可 通過(guò)程序的運(yùn)行控制測(cè)溫模塊進(jìn)行測(cè)溫;測(cè)溫模塊主要是山DS18B2O構(gòu)成,將 其與所測(cè)對(duì)象進(jìn)行接觸即可獲取被測(cè)對(duì)象的溫度數(shù)據(jù),而所測(cè)得的溫度和時(shí)鐘 芯片測(cè)得的實(shí)時(shí)日歷將通過(guò)顯示模塊的液晶顯示器

6、以數(shù)字形式顯示;單片機(jī)調(diào) 用程序,讀取DSI302寄存器,可以得到萬(wàn)年歷的時(shí)間數(shù)據(jù),經(jīng)過(guò)程序處理就 可以輸出在LCD上;鍵盤電路可對(duì)實(shí)時(shí)日歷進(jìn)行調(diào)整;蜂鳴器可以在作為聲音 提醒。(2)單片機(jī)模塊AT89S52是ATMEL公司生產(chǎn)的低功耗,高性能CM0S8位單片機(jī),片含8k bytes的可系統(tǒng)編程的Flash只讀程療;存儲(chǔ)器,器件采用ATMEL公司的高 密度、非易失性存儲(chǔ)技術(shù)生產(chǎn),兼容標(biāo)準(zhǔn)8051指令系統(tǒng)及引腳,它集Flash 存儲(chǔ)器既可在線編輯(ISP)也可用傳統(tǒng)方法進(jìn)行編輯及通用8位微處理器于 單片芯片中,功能強(qiáng)大AT89S52單片機(jī)可為您提供許多高性價(jià)比的應(yīng)用場(chǎng)合。 器管腳圖如圖3-2:引

7、腳結(jié)構(gòu)PDIP(T2P1.0 匚140 VCC(T2EX)P1.1 匚239 PO O (ADO)P1.2 E338 PO1 (AD1)P1.3IZ 437 P0.2 (AD2)Pt4E538 PO.3 (AD3)(MOSDP1.5 匚6: PC.4 (心)(MISOP1,6L7A PO.5 (AD5)(SCK)F1.7 匚833 PO.6 (AD6)RST匚e32 PO.7 (AD7)(RXD)P3.OE1031 SVPP(TXDP3.1E1130 ALEROG(INTCW3.2 匚1229 P3EN:rTr?P3.3 匚1328 P27 (A 15)(TO) P3.4 匚14丁 P2.6

8、(A 14)(THP3.5 匚1520 P2.5 (A 13)(:.P3,6 匚1625 P2.4 (A 12)(RD) P3.7 C172- P2.3 (A11)XTAL2 匚1823 P2.2 (A 10)XTAL1匚102Z P2.1 (AB)GND匚2021 P2,0 A8)圖3-2 AT89S52管腳圖在本系統(tǒng)中,AT89S52單片機(jī)部的功能單元已經(jīng)能夠滿足系統(tǒng)設(shè)計(jì)需要, 不需要系統(tǒng)擴(kuò)展。AT89S52具有以下的特點(diǎn):主要性能與MCS-51單片機(jī)產(chǎn)品兼容8K字節(jié)在系統(tǒng)可編程Flash存儲(chǔ)器1000次擦寫周期全靜態(tài)操作:0Hz33Hz三級(jí)加密程序存儲(chǔ)器 32個(gè)可編程I/O 口線三個(gè)16

9、位定時(shí)器/計(jì)數(shù)器八個(gè)中斷源全雙工UART串行通道低功耗空閑和掉電模式掉電后中斷可喚醒看門狗定時(shí)器雙數(shù)據(jù)指針掉電標(biāo)識(shí)符AT89S52是一種低功耗、高性能CM0S8位微控制器,具有8K在系統(tǒng)可編 程Flash存儲(chǔ)器。使用Atmel公司高密度非易失性存儲(chǔ)器技術(shù)制造,與工業(yè)80C51 產(chǎn)品指令和引腳完全兼容。片上Flash允許程序存儲(chǔ)器在系統(tǒng)可編程,亦適于 常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編程Flash,使得 AT89S52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、超有效的解決方案。(3)時(shí)鐘模塊DS1302為美國(guó)DALLAS公司的一種實(shí)時(shí)時(shí)鐘芯片,主要特點(diǎn)是釆用串行數(shù) 據(jù)傳輸,可為掉

10、電保護(hù)電源提供可編程的充電功能,并且可以關(guān)閉充電功能。采 用32.768Hz晶振。它可以對(duì)年、月、日、星期、時(shí)、分、秒進(jìn)行計(jì)時(shí),且具有閏 年補(bǔ)償?shù)榷喾N功能。DS1302用于數(shù)據(jù)記錄,特別是對(duì)某些具有特殊意義的數(shù)據(jù) 點(diǎn)的記錄上,能實(shí)現(xiàn)數(shù)據(jù)與出現(xiàn)該數(shù)據(jù)的時(shí)間同時(shí)記錄。這種記錄對(duì)長(zhǎng)時(shí)間的連 續(xù)測(cè)控系統(tǒng)結(jié)果的分析以及對(duì)異常數(shù)據(jù)岀現(xiàn)的原因的查找有重要意義。在本設(shè)計(jì) 中,它的實(shí)際電路圖如圖3-2所示:vcc時(shí)鐘芯片54148Y132.768KVCC2GND18273645U2VCC1SCLKP22IO P21RST P20BT1BATTERY 卩DS 1302圖3-3 DS 1302與單片機(jī)的連接DS 1

11、302需要外接32.768K的晶振,1號(hào)引腳接主電源VCC (5V)電源,8 號(hào)引腳接備用電池(3V),當(dāng)主電源掉電后,備用電源為DS1302提供電源,維 持DS1302數(shù)據(jù)不丟失。DS1302的各引腳的功能如下:1 : VCC2主電源2, 3: XI, X2振蕩源,外接32768HZ晶振4: GND地線5 : RST復(fù)位/片選線6: I/O串行數(shù)據(jù)輸入/輸出端(雙向)7 :SCLK串行數(shù)據(jù)輸入端8 :VCC1后備電源時(shí)鐘芯片DS 1302的性能特性:實(shí)時(shí)時(shí)鐘,可對(duì)秒、分、時(shí)、日、周、月以及帶閏年補(bǔ)償?shù)哪赀M(jìn)行計(jì)數(shù); 用于高速數(shù)據(jù)暫存的31 X8位RAM:最少引腳的串行I/O; 2.55.5V電

12、壓工作 圍;2.5V時(shí)耗電小于300nA:用于時(shí)鐘或RAM數(shù)據(jù)讀/寫的單字節(jié)或多字節(jié)(脈 沖方式)數(shù)據(jù)傳送方式;簡(jiǎn)單的3線接口;可選的慢速充電(至VCC1)的能 力。時(shí)鐘芯片DS1302的工作原理:DS1302在每次進(jìn)行讀、寫程序前都必須初始化,先把SCLK端置“0”, 接著把RST端置“1”,最后才給予SCLK脈沖;讀/寫時(shí)序如下圖4所示。圖5 為DS1302的控制字,此控制字的位7必須置1,若為0則不能把對(duì)DS1302進(jìn) 行讀寫數(shù)據(jù)。對(duì)于位6,若對(duì)程序進(jìn)行讀/寫時(shí)RAM=1,對(duì)時(shí)間進(jìn)行讀/寫時(shí), CK=0o位1至位5指操作單元的地址。位0是讀/寫操作位,進(jìn)行讀操作時(shí), 該位為1;該位為0則

13、表示進(jìn)行的是寫操作。控制字節(jié)總是從最低位開始輸入/ 輸出的??刂谱止?jié)如圖3-4所示。765432101RA”A4A31A 2 A 1AO/CK圖3-4 DS1302控制字節(jié)DS1302時(shí)間日期寄存器及相應(yīng)位定義: 表3-5為DS1302時(shí)間寄存器信息:讀春存器歸存器BIT 7BIT 6BIT 5BIT 4BIT 3BIT 2BIT1BITO范圍S1h80hCHic秒秒00-5983h8211w分分00-591085h84h12/兀0PM時(shí)1-12/0-2-87 h86h0010 0a1-3189h881100010月廠1-128Bh8A11 二0o :000周日1-78Dh8Ch10年00-9

14、98Fh8EhWP0000000一 I表3-5為DS 1302時(shí)間寄存器信息DS 1302數(shù)據(jù)的輸入和輸出在控制指令字輸入后的下一個(gè)SCLK時(shí)鐘的上升沿時(shí)數(shù)據(jù)被寫入DS1302, 數(shù)據(jù)輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個(gè)SCLK 脈沖的下降沿讀出DS1302的數(shù)據(jù),讀出數(shù)據(jù)時(shí)從低位0位至高位7。BLAP14 RSTP13 CS2P12 CS1P37 DB7P36 DB6P35 DB5P34 DB4P33 DB3P32 DB2P31 DB1P30 DB0P17 EP16 R/WP15 RSV0VDDVSSJ220191817161514131211101286412864

15、液晶圖37 LCD 12864模塊圖36 DS 1302的時(shí)序(4)顯示模塊本設(shè)計(jì)顯示模塊主要采用LCD 12864液晶顯示器,其電路原理圖如下:BLKJ3DS18B20VCC工LCD12864液晶顯示器通過(guò)數(shù)據(jù)端口也即端口 714與主控芯片AT89S52的I/O端口P3相連接實(shí)現(xiàn)數(shù)據(jù)與指令的傳輸,再通過(guò)控制端口 RS、RW、EN也即端口 46與主控芯片P1.5, P16 P1.7端口相接實(shí)現(xiàn)對(duì)數(shù)據(jù)和指令傳輸?shù)目刂疲?)溫度模塊傳統(tǒng)的溫度傳感器系統(tǒng)大都采用放大、調(diào)理、A/D轉(zhuǎn)換,轉(zhuǎn)換后的數(shù)字信 號(hào)送入計(jì)算機(jī)處理,處理電路復(fù)雜、可靠性相對(duì)較差,占用計(jì)算機(jī)的資源比較 多,本設(shè)計(jì)測(cè)溫模塊釆用一線制總

16、線數(shù)字溫度傳感器DS18B20,可將溫度信號(hào) 直接轉(zhuǎn)換成數(shù)字信號(hào)送給微處理器,電路簡(jiǎn)單,成本低,其電路原理圖如圖3-8 所示:R44.7KP26溫度傳感器圖3-8 DS18B20溫度模塊從圖中可看出,將溫度傳感器的一線制總線通過(guò)端口 2與本設(shè)il主控芯片STC12C5A6S2的端口標(biāo)號(hào)為DS18B20的相連即可實(shí)現(xiàn)相互之間的通信。設(shè)計(jì)中的測(cè)溫元 件采用的是DS18B20測(cè)溫元件,DS18B2O是由DALLAS(達(dá)拉斯)公司生產(chǎn)的一種溫度傳感 器。超小的體積,超低的硬件開消,抗干擾能力強(qiáng),精度高,附加功能強(qiáng),使得DS18B20 很受歡迎。這是世界上第一片支持“一線總線接口的溫度傳感器。DS18B

17、20數(shù)字溫度計(jì)提 供9位(二進(jìn)制)溫度讀數(shù),指示器件的溫度。信息經(jīng)過(guò)單線接口送入DS18B20或從DS18B20 送岀,因此從單片機(jī)到DS18B20僅需一條線連接即可。它可在1秒鐘(典型值)把溫度變換 成數(shù)字。(6)蜂鳴器模塊蜂鳴器模塊是本設(shè)計(jì)中體現(xiàn)人機(jī)交互的乂一大設(shè)計(jì)亮點(diǎn),其電路原理圖如圖3-9蜂鳴器模塊(7)蜂鳴器的介紹 蜂鳴器的作用:蜂鳴器是一種一體化結(jié)構(gòu)的電子訊響器,采用直流電壓 供電,廣泛應(yīng)用于計(jì)算機(jī)、打印機(jī)、復(fù)印機(jī)、報(bào)警器、電子玩具、汽車電子設(shè) 備、機(jī)、定時(shí)器等電子產(chǎn)品中作發(fā)聲器件。 蜂鳴器的分類:蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩類。 蜂鳴器的電路圖形符號(hào):蜂鳴器在電路中

18、用字母“H”或“HA”(舊標(biāo)準(zhǔn)用 “FM”、“LB”、“JD”等)表示。本設(shè)計(jì)里,我們采用有源蜂鳴器,由于蜂鳴器的工作電流一般比較大,以至于單片機(jī) 的I/O 口是無(wú)法直接驅(qū)動(dòng)的,所以要利用放大電路來(lái)驅(qū)動(dòng),我們使用三極管來(lái)放大電流, 驅(qū)動(dòng)蜂鳴器,此模塊只要通過(guò)BELL (連接到到單片機(jī)P2.7)輸入的PWM波既可以使蜂 鳴器分出聲音,我們?cè)O(shè)計(jì)的這款萬(wàn)年歷可以在鬧鐘立時(shí)中作為聲音提醒信號(hào)。(8) 獨(dú)立鍵盤模塊鍵盤是人與萬(wàn)年歷實(shí)現(xiàn)信息交互的接口,本設(shè)計(jì)中,我們釆用3個(gè)獨(dú)立鍵 盤,電路原理如下圖3-9:A14P26AI3ZP25AI2T24Al l.復(fù)位RV1rofiwc ro.vAi Kuua RT

19、VW FO.於), ras沁 FOAWK17AWFZDieF2JM f2JH rzAii r2.k*E !3A*rn F7A*1 叨沁BCLK M XZ0AU BAT1pam P3ZWC P33WHF3.MTOP2W1 P3J7W1_1MF-KTEZfLn丄23r圖 3-14.aLgeruor/iuQ1.BIJZ1!1LxJ經(jīng)過(guò)數(shù)天的程序編寫,一步步解決問(wèn)題后我們終于寫完了完整的程序,將其在Keil u Vision2軟件的編譯下可得到hex文件,將其下載到仿真電路的單片機(jī)中 則可得到萬(wàn)年歷的效果并可實(shí)現(xiàn)要求功能,效果圖如圖3-15所示。圖 3-154.總結(jié)在硬件電路焊接和軟件程序設(shè)計(jì)分別完成

20、的基礎(chǔ)之上,進(jìn)行軟硬件的結(jié)合與 調(diào)試。通過(guò)下載將在電腦上已完成的程序下載到單片機(jī)芯片中。在調(diào)試中發(fā)現(xiàn)軟 件中存在的問(wèn)題,及時(shí)解決問(wèn)題,確保系統(tǒng)能正常工作并達(dá)到設(shè)訃要求。通過(guò)反 復(fù)的調(diào)試與實(shí)驗(yàn),可以證明該系統(tǒng)能夠較好地完成設(shè)計(jì)所需的基本要求。即能夠 正確的顯示萬(wàn)年歷。在完成軟件系統(tǒng)時(shí),對(duì)時(shí)間要求很精確,山于晶振的不同造成了讀數(shù)據(jù)的錯(cuò) 誤,經(jīng)過(guò)這次調(diào)試,讓我更清晰的認(rèn)識(shí)到了時(shí)序?qū)υ骷闹匾?。在設(shè)計(jì)中, 因?yàn)榭紤]到鬧鐘定時(shí)功能,我們希望我們?cè)O(shè)置的鬧鐘時(shí)刻不會(huì)因?yàn)橄到y(tǒng)的掉電而 丟失,考慮到DS1302是有鋰電池作為電源的,不會(huì)因?yàn)橹飨到y(tǒng)掉電丟失部數(shù)據(jù), 所以我們將鬧鐘的定時(shí)時(shí)刻放到了 DS1302

21、的空余寄存器里面。U2Q1R1RP1復(fù)位RV1T27EfBPS rz.i/0f23fn片saF2XTAW9AT2 DA71慮創(chuàng)Xi /0025WO9/27 Sat占:罵:怖九月初四2?(t鑿昶聽乩rcur/iz怛oz FtK/AXC經(jīng)過(guò)萬(wàn)年歷的設(shè)計(jì),讓我學(xué)到了很多,讓我認(rèn)識(shí)到了學(xué)習(xí)基礎(chǔ)知識(shí)的重要性, 當(dāng)設(shè)計(jì)完整的系統(tǒng)時(shí),要考慮到硬件和軟件兩者的結(jié)合,有時(shí)碩件的不足,我們 可以用軟件程序來(lái)彌補(bǔ),從而節(jié)約硬件成本,在設(shè)計(jì)軟件程序時(shí)要模塊化,可以 提高程序的可讀性。5指導(dǎo)教師意見參考書目1群芳,肖看,單片機(jī)原理接口及應(yīng)用,淸華大學(xué),20072譚浩強(qiáng),C語(yǔ)言程序設(shè)計(jì),淸華大學(xué),2006義和,王敏男,許

22、宏昌等,例說(shuō)51單片機(jī),人民郵電,20084坤,宋戈,紅波等,51單片機(jī)C語(yǔ)言應(yīng)用技術(shù)開發(fā)技術(shù)大全,人民郵電,20085白延敏,51單片機(jī)典型系統(tǒng)開發(fā)實(shí)例精講,電子工業(yè),20096周麗娜,Protel99SE電路設(shè)計(jì)技術(shù),中國(guó)鐵道,2009程序代碼*萬(wàn)年歷*/include ”main.h” include NLCD.hninclude NDS1302.hMinclude ”buz乙h”包含頭文件buzz.h時(shí)間變量時(shí)間變量時(shí)間變屋時(shí)間變量時(shí)間變量包含頭文件main.h包含頭文件LCD.h包含頭文件DS1302.hinclude Hword.hH包含頭文件 word.hinclude luna

23、r_calendar.hH 包含頭文件 lunar_calendar.hTIME time, tmp_time; ALARM alarm;bit Alarm_flag=O;bit Clock_flag=0;bit flag=O;sbit DQ=P2A6; /DS18B20 pin 溫度傳感器引腳/ -18B20-unsigned char L_18B20.H8B20.zhcngshu、shangwcn,xiawcn; 溫度用變量unsigned int fg=0,xiaoshu_a:溫度用變量/ -18B20-/ -音樂(lè)-uint8 code SONG_TONE=音樂(lè)數(shù)據(jù)212,212,190

24、,212,159,169,212,212,190,212,142,159,212,212,106,126,129,169,190,119,119,126.159,142J 59.0;uint8 code SONG_LONG=/9,3,12,12,12,24.9,3,122,12,2493,12,12,12,12,12.9,3,12,12,12,24.0;/ - void delay(uintl6 n)/延時(shí) us 級(jí) while (n-);/ 函數(shù):LCD_Dclay()unsigned int i,j; for(i=0;it;i+)循環(huán)t次for(j=0;j113;j卄)循環(huán) 113 次 每

25、次約 3us/-播放音樂(lè)-void PlayMusicOuintl6 i =O,j.k;while(SONG_LONGi !=OIISONG_TONEi !=0)for(j=0;jSONG_LONGi*20;j+)讀取數(shù)據(jù)BEEP = -BEEP;蜂鳴器取反for(k=0:k0; i)循環(huán) 8 次DQ = 0;DQ 輸岀 0DQ = dat&0 x01;delay8B20(5); 延時(shí)DQ=1; dat=l;/DQ輸出1/右移位unsigned char ReadOneChar(void) unsigned char i=0;unsigned char dat = 0:for (i=8;i0;

26、i-)DQ = 0;/給脈沖信號(hào)dat=l; DQ=1; if(DQ)移位/給脈沖信號(hào)如果DQ=h執(zhí)行下面的語(yǔ)句datl=0 x80;delay.l8B20(4)7/ 延時(shí)return(dat);返回?cái)?shù)據(jù)void rcad_18B20(void)Init_DS18B20();WriteOneChar(OxCC); /跳過(guò)讀序號(hào)列號(hào)的操作WriteOneChar(Ox44); / 啟動(dòng)溫度轉(zhuǎn)換delay_18B20(100);/ this message is wery importantint8 scan_key(void)int8 val=-l;if (Keyin 1 =0)val = 1;

27、while (Kevin 1 =else if (Kcyln2 = 0)val = 2;while (Keyln2 =else if (Kcyln3 = 0)val = 3;while (Keyln3 = /if (val 0)/buzzer_sound();return val;初始化鍵值為-1判斷=0?有無(wú)按鍵按鍵鍵值=10): /等待按鍵釋放判斷=0?有無(wú)按鍵按鍵鍵值=20)等待按鍵釋放判斷=0?有無(wú)按鍵按鍵鍵值=30);/等待按鍵釋放返回鍵值WriteOncChar(OxCC); 跳過(guò)讀序號(hào)列號(hào)的操作WriteOneChar(OxBE); 讀取溫度寄存器等(共可讀9個(gè)寄存器)前兩個(gè)就是

28、溫度delay. 18B20( 100);延時(shí)L_18B20=ReadOneChar(); 讀取低八位數(shù)據(jù)H_18B20=RcadOneChar(); 讀取髙八位數(shù)據(jù)zhengshu=L_18B20/16+H J8B20B6;/ 整數(shù)部分 xiaoshu_a=(L_l 8B20&OxOf)* 10/16; 小數(shù)第一位 / -DS18B20 -/*按鍵掃描*/*主界而框架*/void main_frame(void)play32(80, 2, 10);/顯示數(shù) play32(32, 2, 10);/顯示數(shù) play8(16. 0, S_xie)7/顯示斜線 play8(40,0, S_xie)7

29、/顯示斜線 /play8(96,0, RH);/ play8(l 20,0, S_percent);play8(120,6, S_du);/顯示度*主界而*/void main_show(bit refresh)uint8 lunar2;if (refresh)read_time(uint8 *)&time)7/ 讀時(shí)間函數(shù)/ 時(shí)間if (refresh II (time.sec != tmp_time.sec) / 秒更新tmp_time.sec = time.sec;讀取秒數(shù)據(jù)play8_num( 104. 6.zhengshu);溫度顯示play32_num(96 2, time.sec

30、);顯示秒if (refresh) main_framc();/刷新界面if (refresh II (time.min != tmp_time.min) / 分更新 if (! refresh)flag = 0;tmpjime.min = time.min;/ 讀取分 play32_num(4& 2, time.min); 顯示分if (refresh II (time.hour != tmpjime.hour) / 時(shí)更新if (!refresh)&(Clock_flag) alarm_sound();tmpjime.hour = time.hour;/讀取時(shí)play32_num(0,2,

31、 time.hour);顯示時(shí)if (refresh II (time.day != tmpjime.day) /日更新tmpjime.day = time.day;讀取日play8_num(48,0, time.day);顯示日/農(nóng)歷turn_lunar_calendar(&time, lunar);playJunar_calendar(O. 6, lunarfO, lunarfl);if (refresh II (time.week != tmp_time.week) / 周更新tmpjime.week = time.week;讀取周play_weck(6& 0, time.week);i

32、f (refresh II (tiine.mon != tmpjime.mon)顯不周/月更新tmpjime.mon = time.mon; play8_num(24, 0. timenon);/農(nóng)歷turn_lunar_calendar(&time, lunar);/讀取月顯不月轉(zhuǎn)換農(nóng)歷月playJunar_calendar(O. 6, lunarfO, lunarfl); 顯示農(nóng)歷月if (refresh II (time.year != tmp_time.year) / 年更新tmp_time.year = time.year; pIay8jium(0. 0, time.year);/農(nóng)

33、歷turn_lunar_calendar(&time, lunar);play_lunar_calendar(O, 6, lunarfO, lunarfl);讀取年數(shù)據(jù)/顯示年/轉(zhuǎn)換農(nóng)歷年顯示農(nóng)歷年*主機(jī)界而設(shè)置*/void main_set(void)int8 kcy_val, state= I;變量play32_num(96,210 x80, time.sec);/顯示秒 while (1) key_val = scan_key();/ 鍵盤掃描if(key_val = 1)/ 設(shè)置if (state = 7)state = 0;位置2設(shè)置分加按下?加1減1elsestate卄;位置狀態(tài)加

34、1set_time(uint8 *)&time);設(shè)置時(shí)間main_show( 1);顯示主界而switch (state) case 0: set_time(uint8 )&time); break:/設(shè)置時(shí)間case 1: play32_num(96,210 x80, time.sec); break;/ 顯示秒 case 2:play32_num(4& 210 x80, time.min); break;/顯示分case 3: play32_num(0, 210 x80, time.hour); break;/顯示時(shí)case 4:play_week(6& 010 x80. time.we

35、ek); break7/顯示周case 5:play8_num(48, 010 x80, time.day); break; 顯示日case 6:play8_num(24, 010 x80, time.mon); break; /顯示月case 7: play8_num(0,010 x80, time.year); break; /顯示年 default: break; 退出循環(huán)else if (key.val 1)/按鍵值大于 1if (state = 1)/位置1設(shè)置秒if (key.val = 3)/加按下?time.sec+y/秒加 1elsetime.sec-; 秒減 1if (ti

36、me.sec = 60)time.sec = 0:else if (time.sec = 60) time.min = 0;else if (time.min = 24)time.hour = 0;else if (time.hour = 8)time.week = 1;else if (time.week = 32) time.day = 1;else if (time.day = 13)time.mon = I;else if (time.mon = 100)time.year = 0:0年else if (time.year 0)time.year = 99;99年play8_num(0

37、,010 x80. time.year);/顯示年 elsebreak;退出循環(huán)if (state = 0)break;退出循環(huán)*鬧鐘界面顯示*/void alarm.showfvoid)int8 key_val, state=l; uint32 t=0;play 16(0. 0, nao);顯示鬧play 16( 16, 0, zhong);鐘play 16(32, 0, maohao);/冒號(hào):if (Alarm_flag) play 16(4& 0. kai); else開play 16(4& 0, guan)y/關(guān) play32_num(32, 2, alarm.hour); 時(shí) pl

38、ay32(64, 29 10);冒號(hào)play32_num(80,2, alarm.min); 分 play 16(0, 6, zheng);顯示 整play 16( 16, 6, dian); play 16(32, 6. bao);play 16(48, 6, shi);play 16(64, 6, maohao);顯示冒號(hào)顯示開顯不關(guān)鍵盤掃描獲取鍵值判斷數(shù)據(jù)判斷數(shù)拯/完成設(shè)置判斷數(shù)據(jù)if (Clock_flag)play 16(80, 6. kai);elseplay 16(80. 6, guan); for (t=0; t 1)break;else if (key_val = 1)if

39、(Alarm_flag) play 16(4&010 x80, kai);/顯示 開 elseplay16(48,010 x80, guan)7/關(guān)while (1)keyval = scan_key();/鍵盤掃描 獲取鍵值if (kcy_val = 1)if (state = 4)state = 0;elsestate+;if (Alarm_flag)play 16(4& 0. kai);顯示開elseplay 16(4& 0. guan);顯不關(guān)play32_num(32, 2, alarm.hour);鬧鐘時(shí)顯示play32_num(80, 2, alarm.min);鬧鐘分顯示if

40、(Clock_flag)play 16(80, 6. kai);顯示開elseplay 16(80, 6, guan);顯不關(guān)switch (state) /判斷數(shù)據(jù)case 1:if (Alarm_flag) 判斷數(shù)據(jù)play 16(48,010 x80, kai); 顯示 開elseplay 16(4& 010 x80, guan);顯示關(guān)break;case 2:play32_num(80, 210 x80. alarni.min);/鬧鐘 分 顯示break;case 3:play32_num(32, 210 x80, alarm.hour);/鬧鐘時(shí)顯示 break;case 4:if (Clock.flag)/ 判斷數(shù)據(jù)play 16(80, 610 x80, kai);顯示 開elseplay 16(80,610 x80, guan)7/顯示 關(guān) break;default: break;else if (kcy_val 1)/判斷數(shù)據(jù)i

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論