基于單片機具有語音提示的LCD電子時鐘_第1頁
基于單片機具有語音提示的LCD電子時鐘_第2頁
基于單片機具有語音提示的LCD電子時鐘_第3頁
基于單片機具有語音提示的LCD電子時鐘_第4頁
基于單片機具有語音提示的LCD電子時鐘_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、湖南鐵道職業(yè)技術(shù)學(xué)院電氣工程學(xué)院 智能電子111班 歐陽志勇基于單片機,1760語音模塊的液晶lcd時鐘專業(yè)系部:電氣工程系 班 級:智能電子111學(xué)生姓名:歐 陽 志 勇 完成日期:2013年5月 摘 要我設(shè)計的lcd時鐘溫度系統(tǒng)是由中央控制器、溫度檢測器、時鐘系統(tǒng)、語音模塊,lcd液晶顯示器及鍵盤部分組成。控制器采用單片機at89c52,溫度檢測部分采用ds18b20溫度傳感器,時鐘系統(tǒng)用時鐘芯片ds1302,用lcd液晶12864作為顯示器,用語音模塊1706構(gòu)成報警器。單片機通過時鐘芯片ds1302獲取時間數(shù)據(jù),對數(shù)據(jù)處理后顯示時間;溫度傳感器ds18b20采集溫度信號送該給單片機處理

2、;單片機再把時間數(shù)據(jù)和溫度數(shù)據(jù)送液晶顯示器lcd12864顯示,鍵盤是用來調(diào)時,調(diào)鬧鐘,調(diào)顯示時間,播放鈴聲。語音模塊用來播放鈴聲;關(guān)鍵字:單片機 lcd液晶 ds18b20 ds1302 lcd12864語音1760;一、 設(shè)計目的及意義1.隨著人們生活水平的不斷提高,單片機控制無疑是人們追求的目標之一,它所給人帶來的方便也是不可否定的,要為現(xiàn)代人工作、科研、生活、提供更好的更方便的設(shè)施就需要從數(shù)單片機技術(shù)入手,一切向著數(shù)字化控制,智能化控制方向發(fā)展。本設(shè)計是數(shù)據(jù)采集及處理,鍵盤控制,顯示系統(tǒng)及報警系統(tǒng)與單片機有效結(jié)合,意義:本設(shè)計是通過在“單片機原理及應(yīng)用”課堂上學(xué)習(xí)的知識的綜合應(yīng)用,以及

3、查閱資料,并且引導(dǎo)一種創(chuàng)新的思維,把學(xué)到的知識應(yīng)用到日常生活當中。在設(shè)計的過程中,不斷的學(xué)習(xí),思考和同學(xué)間的相互討論,運用科學(xué)的分析問題的方法解決遇到的困難,掌握單片機系統(tǒng)一般的開發(fā)流程,學(xué)會對常見問題的處理方法,積累設(shè)計系統(tǒng)的經(jīng)驗,充分發(fā)揮教學(xué)與實踐的結(jié)合。全能提高個人系統(tǒng)開發(fā)的綜合能力,開拓了思維,為今后能在相應(yīng)工作崗位上的工作打下了堅實的基礎(chǔ)。二、方案設(shè)計及方案論證1.時鐘溫度的總體設(shè)計思路按照系統(tǒng)的設(shè)計功能要求,本時鐘,鈴聲,溫度系統(tǒng)的設(shè)計必須采用單片機軟件系統(tǒng)實現(xiàn),用單片機的自動控制能力配合按鍵控制,來控制時鐘、溫度的調(diào)整,鬧鈴及顯示。獲得時鐘溫度數(shù)據(jù)信息,單片機對其進行一系列的處理

4、,最后通過液晶顯示出來。2.時鐘溫度系統(tǒng)方案論證2.1時鐘系統(tǒng)方案選擇方案1:通過單片機內(nèi)部的定時器/計數(shù)器,用軟件實現(xiàn),直接用單片機的定時器編程以實現(xiàn)時鐘;方案2:用專門的時鐘芯片實現(xiàn)時鐘的記時,再把時間數(shù)據(jù)送入單片機,由單片機控制顯示。雖然用軟件實現(xiàn)時鐘硬件線路簡單,但是程序運行的每一步都需要時間,多一步或少一步程序都會影響記時的準確度,對定時器定時也不是十分準確,時鐘精度很低,對于我們實現(xiàn)所需要的功能造成軟件編程非常復(fù)雜。用專用時鐘芯片硬件成本相對較高,但它的精度很高,軟件編程很簡單。綜上所述,選擇方案2。2.2單片機的選擇對于單片機的選擇,如果用8031系列,由于它沒有內(nèi)部ram,系統(tǒng)

5、又需要大量內(nèi)存存儲數(shù)據(jù),因而不可用;51系列單片機的rom為4k,對于我們設(shè)計的系統(tǒng)可能有點小;52系列單片機與51系列的結(jié)構(gòu)一樣,而rom擴大為8k,對我們設(shè)計系統(tǒng)提供充足的空間進行功能的擴展。再有51系列單片機與52系列的單片機價格差不多。因此,我們選擇52系列的單片機。 2.3 顯示系統(tǒng)的方案比較 方案1:用數(shù)碼管或led顯示。 方案2:用液晶1602顯示。方案3:用液晶12864顯示。 時鐘和溫度的顯示可以用數(shù)碼管或led,而且價格便宜。但是數(shù)碼管的只能顯示簡單的設(shè)計的系統(tǒng),與我們設(shè)計要求也不相符。有很多東西需要顯示,還是用顯示功能更好的液晶顯示器比較好,它能顯示更多的數(shù)據(jù),用1602

6、液晶顯示數(shù)據(jù)有限,顯示數(shù)據(jù)的可讀性不好,用可以顯示漢字的12864液晶顯示器還可以增加顯示信息的可讀性,讓人看起來會很方便。 2.4 報警系統(tǒng)的方案比較 方案1:用長鳴的蜂鳴器實現(xiàn)鬧鐘鈴聲及溫度超限報警。 方案2:用喇叭加語音芯片實現(xiàn)鬧鐘鈴聲及溫度超限報警。 用喇叭加語音芯片成本也不是很高,聲音也不錯,用蜂鳴器,成本低,電路結(jié)構(gòu)簡單,而且體積小。但功能有限,限于設(shè)計所需要的功能,用蜂鳴器和語音結(jié)合為最佳選擇。所以我們采用方案1.2結(jié)合。2.5 溫度系統(tǒng)方案選擇方案1:用熱敏電阻等測溫元件測出電壓,再轉(zhuǎn)換成對應(yīng)的溫度。需要比較多的外部元件支持,且硬件電路復(fù)雜,制作成本相對較高。方案2:用ds18

7、b20直接測溫。ds18b20溫度傳感器是美國dallas半導(dǎo)體公司最新推出的一種改進型智能溫度傳感器,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)912位的數(shù)字值讀數(shù)方式。經(jīng)比較,我們選擇方案2。溫度實現(xiàn)只能通過外部的溫度傳感器來實現(xiàn)。經(jīng)上網(wǎng)查閱及市場考察,ds18b20體積小,只有3只腳,電路接法簡單。內(nèi)部含有寄存器為我們設(shè)計實現(xiàn)上下限報警功能提供保障。精度為0.5°c,也符合我們設(shè)計的要求。ds18b20也是我們通常使用的型號,因此溫度傳感器用ds18b20。2.6 鍵盤控制方案選擇方案1:購買集成鍵盤,采用矩陣形式連接。方案2:購買單個復(fù)位開關(guān)做成鍵盤。雖然集成

8、鍵盤美觀,與單片機的接口少,但是它的成本比較高。單片機的io口對于我們的設(shè)計綽綽有余。通常我們選用價格便宜單個復(fù)位開關(guān)做成鍵盤。3. .時鐘溫度系統(tǒng)總體設(shè)計初步確定設(shè)計系統(tǒng)由單片機主控模塊、時鐘模塊、測溫模塊、語音模塊、顯示模塊、鍵盤接口模塊共6個模塊組成,電路系統(tǒng)框圖如圖所示。 主控器件at89c52db1820 溫度采集系統(tǒng)ds1320時間采集系統(tǒng)12864顯示系統(tǒng)語音報警系統(tǒng)鍵盤控制系統(tǒng)三硬件設(shè)計部分1 單片機最小系統(tǒng)電路設(shè)計1.1 單片機芯片選擇單片機采用52系列單片機。由atmel公司生產(chǎn)的at89c52是一種低功耗、高性能cmos8位微控制器,具有8k 在系統(tǒng)可編程flash 存儲

9、器。使用atmel 公司高密度非易失性存儲器技術(shù)制造,與工業(yè)80c51 產(chǎn)品指令和引腳完全兼容。在單芯片上,擁有靈巧的8 位cpu 和在線系統(tǒng)可編程flash,使得at89c52為眾多嵌入式控制應(yīng)用系統(tǒng)提供高靈活、有效的解決方案。at89c52具有以下標準功能: 8k字節(jié)flash,256字節(jié)ram,32 位i/o 口線,看門狗定時器,2 個數(shù)據(jù)指針,三個16 位定時器/計數(shù)器,一個6向量2級中斷結(jié)構(gòu),全雙工串行口,片內(nèi)晶振及時鐘電路??臻e模式下,cpu停止工作,允許ram、定時器/計數(shù)器、串口、中斷繼續(xù)工作。掉電保護方式下,ram內(nèi)容被保存,振蕩器被凍結(jié),單片機一切工作停止,直到下一個中斷或

10、硬件復(fù)位為止。而且,它還具有一個看門狗(wdt)定時/計數(shù)器,如果程序沒有正常工作,就會強制整個系統(tǒng)復(fù)位,還可以在程序陷入死循環(huán)的時候,讓單片機復(fù)位而不用整個系統(tǒng)斷電,從而保護你的硬件電路。at89c52有40個引腳,32個外部雙向輸入/輸出(i/o)端口,同時內(nèi)含2個外中斷口,2個16位可編程定時計數(shù)器,2個全雙工串行通信口,片上flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。其將通用的微處理器和flash存儲器結(jié)合在一起,特別是可反復(fù)擦寫的flash存儲器可有效地降低開發(fā)成本。其芯片外觀及引腳圖如下: 圖1.1_1 圖1.1_21.2 單片機管腳說明vcc:供電電壓。gnd:接地。

11、p0口:p0口為一個8位漏級開路雙向i/o口,每腳可吸收8ttl門流。當p1口的管腳第一次寫1時,被定義為高阻輸入。p0能夠用于外部程序數(shù)據(jù)存儲器,它可以被定義為數(shù)據(jù)/地址的第八位。在fiash編程時,p0 口作為原碼輸入口,當fiash進行校驗時,p0輸出原碼,此時p0外部必須被拉高。p1口:p1口是一個內(nèi)部提供上拉電阻的8位雙向i/o口,p1口緩沖器能接收輸出4ttl門電流。p1口管腳寫入1后,被內(nèi)部上拉為高,可用作輸入,p1口被外部下拉為低電平時,將輸出電流,這是由于內(nèi)部上拉的緣故。在flash編程和校驗時,p1口作為第八位地址接收。 p2口:p2口為一個內(nèi)部上拉電阻的8位雙向i/o口,

12、p2口緩沖器可接收,輸出4個ttl門電流,當p2口被寫“1”時,其管腳被內(nèi)部上拉電阻拉高,且作為輸入。并因此作為輸入時,p2口的管腳被外部拉低,將輸出電流。這是由于內(nèi)部上拉的緣故。p2口當用于外部程序存儲器或16位地址外部數(shù)據(jù)存儲器進行存取時,p2口輸出地址的高八位。在給出地址“1”時,它利用內(nèi)部上拉優(yōu)勢,當對外部八位地址數(shù)據(jù)存儲器進行讀寫時,p2口輸出其特殊功能寄存器的內(nèi)容。p2口在flash編程和校驗時接收高八位地址信號和控制信號。p3口:p3口管腳是8個帶內(nèi)部上拉電阻的雙向i/o口,可接收輸出4個ttl門電流。當p3口寫入“1”后,它們被內(nèi)部上拉為高電平,并用作輸入。作為輸入,由于外部下

13、拉為低電平,p3口將輸出電流(ill)這是由于上拉的緣故。p3口也可作為at89c52的一些特殊功能口,如下表所示:管腳備選功能p3.0 rxd(串行輸入口)p3.1 txd(串行輸出口)p3.2 /int0(外部中斷0)p3.3 /int1(外部中斷1)p3.4 t0(記時器0外部輸入)p3.5 t1(記時器1外部輸入)p3.6 /wr(外部數(shù)據(jù)存儲器寫選通)p3.7 /rd(外部數(shù)據(jù)存儲器讀選通)p3口同時為閃爍編程和編程校驗接收一些控制信號。rst:復(fù)位輸入。當振蕩器復(fù)位器件時,要保持rst腳兩個機器周期的高電平時間。ale/prog:當訪問外部存儲器時,地址鎖存允許的輸出電平用于鎖存地

14、址的地位字節(jié)。在flash編程期間,此引腳用于輸入編程脈沖。在平時,ale端以不變的頻率周期輸出正脈沖信號,此頻率為振蕩器頻率的1/6。因此它可用作對外部輸出的脈沖或用于定時目的。然而要注意的是:每當用作外部數(shù)據(jù)存儲器時,將跳過一個ale脈沖。如想禁止ale的輸出可在sfr8eh地址上置0。此時, ale只有在執(zhí)行movx,movc指令是ale才起作用。另外,該引腳被略微拉高。如果微處理器在外部執(zhí)行狀態(tài)ale禁止,置位無效。/psen:外部程序存儲器的選通信號。在由外部程序存儲器取指期間,每個機器周期兩次/psen有效。但在訪問外部數(shù)據(jù)存儲器時,這兩次有效的/psen信號將不出現(xiàn)。/ea/vp

15、p:當/ea保持低電平時,則在此期間外部程序存儲器(0000h-ffffh),不管是否有內(nèi)部程序存儲器。注意加密方式1時,/ea將內(nèi)部鎖定為reset;當/ea端保持高電平時,此間內(nèi)部程序存儲器。在flash編程期間,此引腳也用于施加12v編程電源(vpp)。xtal1:反向振蕩放大器的輸入及內(nèi)部時鐘工作電路的輸入。xtal2:來自反向振蕩器的輸出。1.3 單片機最小系統(tǒng) 單片機最小系統(tǒng)主要由復(fù)位電路,晶振電路,電源等幾部分組成。1) 復(fù)位電路復(fù)位電路有兩種方式:上電復(fù)位和按鈕復(fù)位,我們主要用按鈕復(fù)位方式。如下圖所示: 2) 晶振電路晶振電路原理圖如3-2:3-2晶振模塊原理圖 選取原則:電容

16、選取30pf,晶振為11.0592mhz。3) 電源at89c52單片機的供電電源是5v的直流電,我們直接通過usb電源線供電;4) ea非/vpp 腳我們沒有用外部擴展rom,因此ea非/vpp為高電平,即接+5v電源或是懸空,為了簡化電路將這個引腳懸空。2 時鐘系統(tǒng)電路設(shè)計2.1 時鐘芯片選擇我們采用具有涓細電流充電能力的低功耗實時時鐘電路ds1302。它可以對年、月、日、周日、時、分、秒進行計時,且具有閏年補償?shù)榷喾N功能。它采用主電源和備用電源雙電源供電。它的工作電壓范圍2.05.5v,在2.2v時,小于300na。它內(nèi)部含有31個字節(jié)的靜態(tài)ram,可提供用戶訪問。  

17、; ds1302可以對年、月、日、周日、時、分、秒進行計時,可以達到我們設(shè)計的基本的要求。內(nèi)部的寄存器為我們調(diào)時,鬧鐘定時提供了寄存空間。備用用電源也實現(xiàn)了當系統(tǒng)斷電后,時鐘仍然可以保持。而且它是串行接口,與單片機通信所需要的接口少。不像ds12887等芯片并行通信需要很多io口。2.2 ds1302管腳及寄存器說明(1)ds1302的引腳排列vcc1為后備電源,vcc2為主電源。在主電源關(guān)閉的情況下,也能保持時鐘的連續(xù)運行。ds1302由vcc1或vcc2兩者中的較大者供電。當vcc2大于vcc10.2v時,vcc2給ds1302供電。當vcc2小于vcc1時,ds1302由vcc1供電。因

18、此,我們vcc1用3v的紐扣電池作為備用電源,vcc2用系統(tǒng)電源作為主電源。x1和x2是振蕩源,外接32.768khz晶振。rst是復(fù)位/片選線,通過把rst輸入驅(qū)動置高電平來啟動所有的數(shù)據(jù)傳送。rst輸入有兩種功能:首先,rst接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,rst提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當rst為高電平時,所有的數(shù)據(jù)傳送被初始化,允許對ds1302進行操作。如果在傳送過程中rst置為低電平,則會終止此次數(shù)據(jù)傳送,i/o引腳變?yōu)楦咦钁B(tài)。上電運行時,在vcc2.5v之前,rst必須保持低電平。只有在sclk為低電平時,才能將rst置為高電平。i/o為串行數(shù)據(jù)

19、輸入輸出端(雙向)。sclk為時鐘輸入端。        (2)ds1302的寄存器說明ds1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關(guān),存放的數(shù)據(jù)位為bcd碼形式。此外,ds1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發(fā)寄存器及與ram相關(guān)的寄存器等。時鐘突發(fā)寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內(nèi)容。 ds1302與ram相關(guān)的寄存器分為兩類:一類是單個ram單元,共31個,每個單元組態(tài)為一個8位的字節(jié),其命令控制字為c0hfdh,其中奇數(shù)為讀操作,偶數(shù)為寫操作;另一類為突發(fā)方式下的ra

20、m寄存器,此方式下可一次性讀寫所有的ram的31個字節(jié),命令控制字為feh(寫)、ffh(讀)。 2.3 ds1302時鐘電路ds1302時鐘電路如下圖所示:ds1302與單片機的連接僅需3條線:時鐘線sclk、數(shù)據(jù)線i/o和復(fù)位線rst。時鐘線sclk與p2.0相連,數(shù)據(jù)線i/o與p2.1相連,復(fù)位線rst與p2.2相連。由于ds1302是靠涓細電流充電來實現(xiàn)串行輸入輸出的,因此,在sclk 、i/o、 rst線上要加上拉電阻,其中,它們的電流應(yīng)該在500u1ma之間,若電源為5v,則r約為5k,因此,我們的電阻r=4.7k。但是經(jīng)過查閱有關(guān)資料知道如果ds1302不是接p0口可以不接上拉電

21、阻,為了節(jié)省成本,所以沒有接上拉電阻。 在單電源與電池供電系統(tǒng)中,vcc1提供低電源并提供低功率的備用電源。vcc2提供高電源作為芯片供電的主電源。因此,這里vcc1用3v紐扣電池,vcc2用5v的系統(tǒng)電源。晶振為32.768khz接入x1、x2引腳。3 溫度系統(tǒng)電路 3.1 溫度芯片的選擇溫度實現(xiàn)只能通過外部的溫度傳感器來實現(xiàn)。經(jīng)上網(wǎng)查閱資料及市場考察,ds18b20體積小,只有3只腳,電路接法簡單。它能夠直接讀出被測溫度。內(nèi)部含有寄存器為我們設(shè)計實現(xiàn)上下限報警功能提供保障。用戶可定義的非易失性溫度報警設(shè)置;報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;精度為0.5°

22、;c,也符合我們設(shè)計的要求。ds18b20也是我們通常使用的型號,因此溫度傳感器用ds18b20。3.2 ds18b20內(nèi)部結(jié)構(gòu)描述ds18b20溫度傳感器的內(nèi)部存儲器還包括一個高速暫存ram和一個非易失性的可電擦除的eeram。高速暫存ram的結(jié)構(gòu)為8個字節(jié)的存儲器,結(jié)構(gòu)如圖4.1所示。頭兩個字節(jié)包含測得的溫度信息,第三和第四字節(jié)是th和tl的拷貝,是易失的,每次上電復(fù)位時被刷新。第五個字節(jié)為配置寄存器,它的內(nèi)容用于確定溫度值的數(shù)字轉(zhuǎn)換分辨率。ds18b20工作時按此寄存器中的分辨率將溫度轉(zhuǎn)換為相應(yīng)精度的數(shù)值。該字節(jié)各位的定義如圖4.2所示。低5位一直為1,tm是測試模式位,用于設(shè)置ds18

23、b20在工作模式還是在測試模式。溫度 lsb溫度 msbth 用戶字節(jié)1tl 用戶字節(jié)2配置寄存器保留保留保留 crc圖 4.1高速暫存ram結(jié)構(gòu)圖1字節(jié)2字節(jié) 3字節(jié) 4字節(jié) 5字節(jié)6字節(jié) 7字節(jié) 8字節(jié)9字節(jié)eeromth 用戶字節(jié)1tl 用戶字節(jié)2tmr1r011111圖 4.2 配置寄存器3.3 ds18b20溫度系統(tǒng)電路 ds18b20系統(tǒng)電路如下:ds18b20有兩種接法:一是單線接法即只接qt。這種方法應(yīng)用它內(nèi)部的寄生電源,因此在qt上要用一個mosfet把i/o線只接拉到電源上。二是從vdd腳加上電源。方法一適合于遠距離溫度監(jiān)控,不需要本地電源。而我們只是設(shè)計測溫系統(tǒng),選擇方法

24、二就行了,還有mosfet極容易燒,我們不用它。vdd接5v電源,vss接地,qt與p3.7相連。4 語音芯片1760的介紹;isd1700 是華邦 isd 公司 2007 年新推出的單片優(yōu)質(zhì)語音錄放電路,該芯片 提供多項新功能,包括內(nèi)置專利的多信息管理系統(tǒng),新信息提示( valert ) , 雙運作模式(獨立 & 嵌入式),以及可定制的信息操作指示音效。芯片內(nèi)部 包含有自動增益控制、麥克風(fēng)前置擴大器、揚聲器驅(qū)動線路、振蕩器與內(nèi)存等的全方位整合系統(tǒng)功能。 一、 特點: · 可錄、放音十萬次,存儲內(nèi)容可以斷電保留一百年 · 兩種控制方式,兩種錄音輸入方式,兩種放音輸出

25、方式 · 可處理多達 255 段以上信息 · 有豐富多樣的工作狀態(tài)提示 · 多種采樣頻率對應(yīng)多種錄放時間 · 音質(zhì)好,電壓范圍寬,應(yīng)用靈活 二、 電特性: · 工作電壓: 2.4v-5.5v, 最高不能超過 6v · 靜態(tài)電流: 0.5 - 1 a · 工作電流: 20ma1700引腳圖5 鍵盤控制系統(tǒng)設(shè)計按鍵需要6個,分別實現(xiàn)為時間調(diào)整、鬧鐘調(diào)整、時間加減、確認、移位。用單片機的6個i/o口接收控制信號,其電路圖如下:6個按鍵的一端與地相連,另一端分別與p0.0、p0.1、 p0.2、p0.3、p0.4、p0.5, 按鍵一

26、按下就輸入低電平。6報警提示電路系統(tǒng)設(shè)計6.1報警電路由蜂鳴器、三極管、電阻 ,語音模塊等構(gòu)成電路圖如下:與單片機的接口分別是p3.6語音??靣lay=p07;播放 rec=p06;錄音erase=p05;擦除 fwd=p04;下一曲7液晶顯示系統(tǒng)設(shè)計7.1 12864液晶顯示電路 現(xiàn)在流行低碳生活,節(jié)能減排已成為人們處理事情首先想到的問題,所以這個顯示的時候背光控制時間為10s左右,同時關(guān)背光的時候關(guān)掉顯示器的電源,降低功耗。四、軟硬件調(diào)試部分 1) 軟件調(diào)試 軟件調(diào)試,我是在keil軟件平臺和單片機學(xué)習(xí)板上來完成的。當我寫部分程序在keil軟件經(jīng)過調(diào)試,開始出現(xiàn)很多錯誤和警告。通過逐個錯誤

27、排錯及修改。得出下列經(jīng)驗,(1)調(diào)用函數(shù)最好在頭文件中進行申明,主函數(shù)寫在最后;(2)特別注意一些字母的大小寫,一般要用英語文字寫, 最后對程序進行相應(yīng)的擴展完善,由于按鍵不靈敏我們加上聲音程序。 2)硬件調(diào)試 硬件調(diào)試,我們用萬用表,單片機學(xué)習(xí)板來完成的。首先,我們調(diào)試lcd1602顯示。我將液晶顯示程序下載到單片機內(nèi),連好所有的線,通電后,觀察顯示結(jié)果。唉!液晶竟然不顯示。我們用萬用表測試各連線是否導(dǎo)通及某些點的電壓,竟然有些線路沒連通??! 然后,我們調(diào)試ds1302時鐘芯片。連上按鍵模塊,液晶顯示模塊,單片機最小系統(tǒng),時鐘系統(tǒng),溫度系統(tǒng),連接所有線,通上電源后,觀察到液晶顯示能正常顯示啦

28、,但有亂碼顯示。后面我檢測程序出錯啦;改正程序后,沒亂碼啦且能夠正常顯示啦,然后逐漸完善功能。 整個硬件調(diào)試完成啦!五總結(jié)與體會想到課題以后,討論整個過程如何實施,以及選擇哪個課題進行設(shè)計。在初步方案確定好后,開始研究所需的器材,在列出初稿后,買好器材,便進入了設(shè)計階段。經(jīng)過將一個五一的設(shè)計,反復(fù)地討論各個環(huán)節(jié),反復(fù)調(diào)試,終于完成lcd液晶時鐘設(shè)計。雖然達到設(shè)計要求,并完成了一定發(fā)揮部分,但單片機的資源并沒完全得到應(yīng)用。這是不用單片機學(xué)習(xí)板,自己動手制作出來的作品。在本次設(shè)計是液晶,單片機,語音,鍵盤控制的綜合應(yīng)用,其間,遇到許多困難。我真真正正的意識到,在寫程序時,邏輯思維要清晰,要有好的寫

29、程序的層次感,模塊化清晰,要有耐心。這樣出錯啦,才能及時知道問題出在哪。在以后的學(xué)習(xí)中,要理論聯(lián)系實際,把我們所學(xué)的理論知識用到實際當中,學(xué)習(xí)單機片機更是如此,程序只有在經(jīng)常的寫與讀的過程中才能提高,這就是我在這次設(shè)計中的最大收獲。 六 使用說明:剛上電;為主頁面;s5鍵為進入菜單;進入菜單 :可以調(diào)時;設(shè)定鬧鐘;設(shè)定你的主頁面;調(diào)背光顯示時間;播放鈴聲;s6;為確認鍵加開關(guān)背光;但背光滅了時;按下s6;開背光;倒計時30s;因為語音模塊內(nèi)存不大;所以就沒錄語音整點報時啦,內(nèi)存兩首鈴聲。如果可以買個內(nèi)存大的語音芯片完全可以改裝的更好。功能簡介:具有年,月,日,時間,星期,兩個鬧鐘設(shè)置功能;整點

30、報時;溫度測量;lcd液晶時鐘系統(tǒng)設(shè)計原理電路圖各個模塊子函數(shù)void delayus(uint8 t) /微妙延時void delayms(uint16 t) /1ms延時uint8 scan_key(void) /讀按鍵值void tiao(void) /調(diào)節(jié)按鍵void tiem() /定時器初始化void jieri(void) /以下是公歷節(jié)日void year(void)/年void tiaoshi(void) /調(diào)時函數(shù)void tiaonao(void)/調(diào)鬧鐘函數(shù)void tiaoxiu(void) /調(diào)休眠函數(shù)void spk_timer(void) /鬧鈴void lin

31、sheng(void)/鈴聲調(diào)節(jié)void int0_time() interrupt 0 /菜單外部中斷0函數(shù)void timer0() interrupt 1 /定時器0 定時休眠void led_timer() /關(guān)、開背光uint8 zhengshi()/判斷整點到否void baodian()/整點報時void main(void) /主函數(shù)子函數(shù)具體內(nèi)容:#include <main.h>#include <yb12864za.h>uint8 datetime7;uint8 dispstr116="20 年 月 日 "uint8 disps

32、tr216="星期 "uint8 idata dispstr39=" "uint8 idata dispstr416="菜單s5 "uint8 idata dispstr916="鬧1 " uint8 idata dispstr1016="鬧2 " uint8 idata dispstr1116="顯示時間 "uint8 code dispstr512=" s1:調(diào)時間 "uint8 code dispstr612=" s2:調(diào)鬧鐘 "

33、uint8 code dispstr716=" s3:調(diào)顯示時間 "uint8 code dispstr814=" s4:播放歌曲 "uint8 idata dispstr126="鈴聲 "uint8 idata dispstr136="鈴聲 "uint8 code lin114=" s1:放音play "uint8 code lin215=" s2:下一曲fwd "uint8 code lin313=" s3:錄音rec "uint8 code lin4

34、16=" s4:擦刪erase "uint8 code lcd112="元旦節(jié)快樂 " uint8 code lcd212="世界濕地日 "uint8 code lcd312="世界氣象日 "uint8 code lcd412="國際婦女節(jié) "uint8 code lcd512="中國植樹節(jié) "uint8 code lcd614="消費者權(quán)益日 "uint8 code lcd710="世界水日 " uint8 code lcd812=&

35、quot;愚人節(jié)快樂 "uint8 code lcd912="中國清明節(jié) "uint8 code lcd1012="世界地球日 " uint8 code lcd1112="國際勞動節(jié) "uint8 code lcd1212="中國青年節(jié) "uint8 code lcd1312="世界護士節(jié) "uint8 code lcd1412="國際兒童節(jié) "uint8 code lcd1512="世界環(huán)境日 "uint8 code lcd1612="

36、;國際愛眼日 "uint8 code lcd1712="世界土地日 "uint8 code lcd1812="國際禁毒日 " uint8 code lcd1912="香港回歸日 " uint8 code lcd2012="中國建軍節(jié) "uint8 code lcd2112="中國老師節(jié) "uint8 code lcd2216="九一八事件紀念日"uint8 code lcd2312="中國國慶節(jié) "uint8 code lcd2412="

37、;世界動物日 "uint8 code lcd2512="世界郵政日 "uint8 code lcd2616="辛亥革命紀念日 " uint8 code lcd2716="澳門回歸紀念日 "uint8 code lcd288="平安夜 "uint8 code lcd298="圣誕節(jié)"uint8 settime117=0x00,0x10,0x10,0x10,0x05,0x05,0x13,0x00,0x00,0x00,0,1,0x00,0x00,0x00,0,1; /設(shè)定時間,鬧鐘 最初始值

38、codeunsignedchar max17=90,90,36,49,19,7,153,90,36,7,2,5,90,36,7,2,5;/調(diào)時最大值uint8 code day8="7123456"uint16 code dimer5=30,60,120,300,600;uint8 s=60,f=0;char y=0;char biaozhi=0;int w1=0,w2=0;uint8 n;sbit g=p33;int k=0;int h;static unsigned int count=0;sbit spk=p36;sbit led=p27;sbit rlay=p07;

39、sbit rec=p06;sbit erase=p05;sbit fwd=p04;#define s1 0x0e#define s2 0x0d#define s3 0x0b#define s4 0x07、void delayus(uint8 t) /微妙延時uint8 i;i=t;for(;i>0;i-);void delayms(uint16 t) /1ms延時uint16 i,j;for(i=0;i<t;i+)for(j=0;j<114;j+);、uint8 scan_key(void) /讀按鍵值uint8 key;if(p0&0x0f)=0x0f) retur

40、n(0xff);delayms(10);if(p0&0x0f)=0x0f) return(0xff);key=(p0&0x0f);while(p0&0x0f)!=0x0f);return(key);、void tiao(void) /調(diào)節(jié)按鍵uint8 temp;temp=scan_key();switch(temp)case s1:settime1k-1+;if(settime1k-1=10) | (settime1k-1=26)|(settime1k-1=42) |(settime1k-1=58) |(settime1k-1=74)settime1k-1=setti

41、me1k-1+6;settime1k-1%=maxk-1;break;case s2:if(settime1k-1>0)settime1k-1-;if(settime1k-1=15) | (settime1k-1=31)|(settime1k-1=47) |(settime1k-1=63) |(settime1k-1=79)settime1k-1=settime1k-1-6;elsesettime1k-1=maxk-1-1;break;case s3:k+;if(k=18)k=8;elseif(k=8)k=1; break;/case s4:y+;/y%=2;h=k;、void tiem

42、()/定時器初始化tmod=0x01;th0=0xdc;tl0=0x00;et0=1;ea=1;tr0=1;it0=1;ex0=1;、void jieri(void) /以下是公歷節(jié)日if(datetime4=0x01 && datetime3=0x01) dis_str(3,0, lcd1); else if(datetime4=0x02 && datetime3=0x02) dis_str(3,0, lcd2);else if(datetime4=0x02 && datetime3=0x10) dis_str(3,0, lcd3);else

43、if(datetime4=0x03 && datetime3=0x08) dis_str(3,0, lcd4);else if(datetime4=0x03 && datetime3=0x12) dis_str(3,0, lcd5);else if(datetime4=0x03 && datetime3=0x15) dis_str(3,0, lcd6);else if(datetime4=0x03 && datetime3=0x22) dis_str(3,0, lcd7); else if(datetime4=0x04 &

44、& datetime3=0x01) dis_str(3,0, lcd8);else if(datetime4=0x04 && datetime3=0x05) dis_str(3,0, lcd9);else if(datetime4=0x04 && datetime3=0x22) dis_str(3,0, lcd10); else if(datetime4=0x05 && datetime3=0x01) dis_str(3,0, lcd11);else if(datetime4=0x05 && datetime3=0x04)

45、 dis_str(3,0, lcd12);else if(datetime4=0x05 && datetime3=0x12) dis_str(3,0, lcd13);else if(datetime4=0x06 && datetime3=0x01) dis_str(3,0, lcd14);else if(datetime4=0x06 && datetime3=0x05) dis_str(3,0, lcd15);else if(datetime4=0x06 && datetime3=0x06) dis_str(3,0, lcd16)

46、;else if(datetime4=0x06 && datetime3=0x25) dis_str(3,0, lcd17);else if(datetime4=0x06 && datetime3=0x26) dis_str(3,0, lcd18); else if(datetime4=0x07 && datetime3=0x01) dis_str(3,0, lcd19); else if(datetime4=0x08 && datetime3=0x01) dis_str(3,0, lcd20);else if(datetime4

47、=0x09 && datetime3=0x10) dis_str(3,0, lcd21);else if(datetime4=0x09 && datetime3=0x18) dis_str(3,0, lcd22);else if(datetime4=0x10 && datetime3=0x01) dis_str(3,0, lcd23);else if(datetime4=0x10 && datetime3=0x04) dis_str(3,0, lcd24);else if(datetime4=0x10 && dat

48、etime3=0x09) dis_str(3,0, lcd25);else if(datetime4=0x10 && datetime3=0x10) dis_str(3,0, lcd26); else if(datetime4=0x12 && datetime3=0x20) dis_str(3,0, lcd27);else if(datetime4=0x12 && datetime3=0x24) dis_str(3,0, lcd28);else if(datetime4=0x12 && datetime3=0x25) dis_st

49、r(3,0, lcd29); else dis_str(3,0,dispstr4);、void year(void)/年uint8 reyear;reyear=datetime6%18; /農(nóng)歷年模12,取余運算switch(reyear)case 0:dis_str(1,0,"龍年");break; /余0即整除 農(nóng)歷 龍年case 1:dis_str(1,0,"蛇年");break; /蛇年case 2:dis_str(1,0,"馬年");break;case 3:dis_str(1,0,"羊年");break

50、;case 4:dis_str(1,0,"猴年");break; case 5:dis_str(1,0,"雞年");break;case 6:dis_str(1,0,"狗年");break;case 7:dis_str(1,0,"豬年");break;case 8:dis_str(1,0,"鼠年");break;case 9:dis_str(1,0,"牛年");break;case 10:dis_str(1,0,"虎年");break;case 11:di

51、s_str(1,0,"兔年");break; 、void tiaoshi(void) /調(diào)時函數(shù)lcd_wcmd(0x01);delayms(1);spk=0;delayms(100);spk=1;while(g!=0)tiao();delayms(1);count+;if(h-1)=0) && (count>1)/?dispstr36=' 'dispstr37=' 'else dispstr36=settime10/16+0x30;dispstr37=settime10%16+0x30;if(h-1)=1 &&

52、amp; (count>1)dispstr33=' 'dispstr34=' 'elsedispstr33=settime11/16+0x30;dispstr34=settime11%16+0x30;if(h-1)=2 && (count>1)dispstr30=' 'dispstr31=' 'elsedispstr30=settime12/16+0x30;dispstr31=settime12%16+0x30; if(h-1)=3 && (count>1)dispstr110=' 'dispstr111=' 'elsedispstr110=settime13/16+0x30; dispstr111=settime13%16+0x30;if(h-1)=4 && (count>1)dispstr16=' 'dispstr17=' 'else dispstr16=settime14/16+0x30;dispstr17=settime14%16+0x30;if(h-1)=5 && (c

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論