實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第1頁(yè)
實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第2頁(yè)
實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第3頁(yè)
實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第4頁(yè)
實(shí)時(shí)時(shí)鐘設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩39頁(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、基于AT89C51單片機(jī)的實(shí)時(shí)時(shí)鐘設(shè)計(jì)電氣工程學(xué)院?jiǎn)纹瑱C(jī)課程設(shè)計(jì)報(bào)告班 級(jí): 自133 姓 名: 王高飛 學(xué) 號(hào): 1312011076 設(shè)計(jì)題目: 實(shí)時(shí)時(shí)鐘設(shè)計(jì) 設(shè)計(jì)時(shí)間: 2016.1.41.6 評(píng)定成績(jī): 評(píng)定教師: 第 44 頁(yè) 共 44 頁(yè)【摘要】隨著社會(huì)、科技的發(fā)展,人類得知時(shí)間,從觀太陽(yáng)、擺鐘到現(xiàn)在電子鐘,不斷創(chuàng)新、研究。為了觀測(cè)時(shí)間的同時(shí),能夠了解其他與人類知識(shí)相關(guān)的知識(shí)。比如星期、溫度、日期等,電子萬(wàn)年歷的誕生,它集時(shí)間、日期和溫度功能與一身,具有讀寫方便、顯示直觀、功能多樣、電路簡(jiǎn)介等諸多優(yōu)點(diǎn)。符合電子儀表的發(fā)展趨勢(shì)。本文給出了一個(gè)單片機(jī)控制的液晶顯示實(shí)時(shí)時(shí)鐘設(shè)計(jì)實(shí)例,系統(tǒng)

2、地介紹了實(shí)時(shí)時(shí)鐘芯片DS1302的主要工作原理和編程思路。對(duì)字符液晶顯示器LCD1602的顯示原理和技巧作了闡述。系統(tǒng)在Proteus平臺(tái)上進(jìn)行了軟、硬件交互仿真,實(shí)現(xiàn)設(shè)計(jì)目的。【關(guān)鍵詞】實(shí)時(shí)時(shí)鐘;DS1302;液晶顯示;單片機(jī);Proteus仿真1.設(shè)計(jì)要求31.1 設(shè)計(jì)題目:實(shí)時(shí)時(shí)鐘41.2要求分析42.總體方案52.1模塊方案選擇:52.1.1單片機(jī)模塊52.1.2時(shí)鐘模塊52.1.3鍵盤模塊62.1.4 顯示模塊62.2 方案設(shè)計(jì)63.硬件設(shè)計(jì)83.1關(guān)鍵器件簡(jiǎn)介83.1.1 AT89C51簡(jiǎn)介83.1.2 DS1302實(shí)時(shí)時(shí)鐘芯片簡(jiǎn)介93.1.3 LCD1602 液晶顯示器簡(jiǎn)介103

3、.2 系統(tǒng)電路原理仿真圖113.3 器件主要參數(shù)介紹123.3.1 DS1302模塊123.3.2 LCD1602模塊123.3.3 鍵盤輸入模塊133.3.4 最小系統(tǒng)模塊:134.軟件設(shè)計(jì)144.1 流程圖144.1.1 系統(tǒng)設(shè)計(jì)總流程圖144.1.2 從DS1302取時(shí)間流程圖154.1.3 串口數(shù)據(jù)接收、處理流程圖154.1.4 LCD1602顯示時(shí)間流程圖164.2 模塊工作過(guò)程介紹174.2.1 DS1302模塊174.2.2 LCD1602模塊204.2.3 串口接收模塊245.系統(tǒng)調(diào)試與仿真275.1 采用Proteus硬件仿真調(diào)試275.2 調(diào)試過(guò)程285.3 運(yùn)行效果295

4、.4 仿真的局限性315.5 方案改進(jìn)326.設(shè)計(jì)總結(jié)33參考文獻(xiàn)34附錄35附錄一:系統(tǒng)原理圖35附錄二:程序設(shè)計(jì)351.設(shè)計(jì)要求 1.1 設(shè)計(jì)題目:實(shí)時(shí)時(shí)鐘 實(shí)現(xiàn)具有時(shí)鐘讀取、顯示,以及時(shí)鐘設(shè)定的單片機(jī)應(yīng)用系統(tǒng),功能及指標(biāo)如下:(1)滿足通用要求(2)可以由電腦鍵盤設(shè)定時(shí)鐘,設(shè)定協(xié)議自行設(shè)計(jì); 1.2要求分析如要實(shí)現(xiàn)以上要求,可進(jìn)行以下功能分解:1 對(duì)系統(tǒng)時(shí)間進(jìn)行讀取,轉(zhuǎn)換。2 將所讀取的時(shí)間用如數(shù)碼管、液晶屏等顯示設(shè)備將時(shí)間顯示顯示給操作人員,顯示界面友好,以達(dá)到人機(jī)交互的效果。3 操作人員可以通過(guò)電腦鍵盤對(duì)實(shí)時(shí)時(shí)鐘進(jìn)行調(diào)整,并將調(diào)整過(guò)后的時(shí)間在顯示設(shè)備上顯示給操作人員。4 實(shí)時(shí)時(shí)鐘能夠

5、保證計(jì)時(shí)準(zhǔn)確、顯示清晰、調(diào)節(jié)靈敏、性能穩(wěn)定,并對(duì)閏年等復(fù)雜情況進(jìn)行調(diào)整。2.總體方案2.1模塊方案選擇:2.1.1單片機(jī)模塊方案一:使用AT89C51單片機(jī)模塊。AT89C51是一種帶4K字節(jié)FLASH存儲(chǔ)器(FPEROMFlash Programmable and Erasable Read Only Memory)以及128 BYTES隨機(jī)數(shù)據(jù)存儲(chǔ)器的低電壓、高性能CMOS 8位微處理器。內(nèi)置功能強(qiáng)大微型計(jì)算機(jī)的AT89C51提供了高性價(jià)比的解決方案。方案二:使用MSP430單片機(jī)模塊。MSP430系列單片機(jī)是美國(guó)德州儀器1996年開(kāi)始推向市場(chǎng)的一種16位超低功耗、具有精簡(jiǎn)指令集(RISC

6、)的混合信號(hào)處理器(Mixed Signal Processor)。其具有 處理能力強(qiáng)、運(yùn)算速度快、超低功耗、片內(nèi)資源豐富等特點(diǎn),因而在許多單片機(jī)領(lǐng)域都得到廣泛應(yīng)用。AT89C51相對(duì)于MSP430雖然存儲(chǔ)容量小,功能較為遜色。但是出于我對(duì)AT89C51單片機(jī)較為熟悉,而且AT89C51足以滿足此次設(shè)計(jì)任務(wù),因此我選擇AT89C51模塊。 2.1.2時(shí)鐘模塊方案一:基本門電路搭建。用基本門電路來(lái)實(shí)現(xiàn)時(shí)鐘發(fā)生器,電路結(jié)構(gòu)復(fù)雜,故障西數(shù)大,不易測(cè)試方案二:專用時(shí)鐘芯片。目前市場(chǎng)上有許多實(shí)時(shí)時(shí)鐘芯片。如DS1302、DS12887、DS1307、X1227等,芯片內(nèi)都集成了時(shí)鐘/日歷功能,給時(shí)鐘系統(tǒng)

7、設(shè)計(jì)帶來(lái)了很多方便。DS1302在功耗方面表現(xiàn)非常出色(2.5V5.5V電源,在2.5V時(shí)耗電量小于300Na),且性能穩(wěn)定,購(gòu)買方便,因此在時(shí)鐘模塊我決定采用DS1302作為實(shí)時(shí)時(shí)鐘芯片。2.1.3鍵盤模塊 根據(jù)設(shè)計(jì)要求,本次用電腦鍵盤設(shè)定時(shí)鐘對(duì)時(shí)鐘進(jìn)行調(diào)整。 2.1.4 顯示模塊方案一:采用液晶顯示器。液晶相對(duì)于傳統(tǒng)的顯示器相比,最大的優(yōu)點(diǎn)在于耗電量和體積,一般的液晶顯示器的分辨率可達(dá)到720dpi以上。而且,當(dāng)要顯示的信息量較多時(shí), LCD液晶顯示器的優(yōu)點(diǎn)就會(huì)凸顯出來(lái)。而且,LCD界面顯示相對(duì)友好。方案二:采用數(shù)碼管顯示電路。LED數(shù)碼管能在低電壓,小電流條件下驅(qū)動(dòng)發(fā)光管發(fā)光,能與CMO

8、S、ITL電路兼容。具有發(fā)光響應(yīng)時(shí)間極短,高頻特性好、單色性好,亮度高等優(yōu)點(diǎn)。由于此次設(shè)計(jì)顯示信息量較多,而且為了追求更加友好的界面,決定采用LCD液晶顯示器。 2.2 方案設(shè)計(jì)DS1302(實(shí)時(shí)時(shí)鐘芯片)電腦鍵盤輸入MCU(AT89C51)LCD(液晶顯示器)綜上,基于界面最友好的原則,此次設(shè)計(jì)采用51系列的AT89C51作為主控芯片,DS1302作為實(shí)時(shí)時(shí)鐘芯片,時(shí)鐘調(diào)整由電腦鍵盤輸入,由LCD液晶顯示屏顯示時(shí)鐘信息,系統(tǒng)總體框圖如下: 圖2.1 系統(tǒng)結(jié)構(gòu)圖各組成部分功能、特色如下:1 DS1302為系統(tǒng)提供精準(zhǔn)的秒、分、時(shí)、日、月、周、年等信息,單片機(jī)能夠?qū)ζ溥M(jìn)行寫入和讀出,計(jì)時(shí)準(zhǔn)確,使

9、用方便。2 LCD點(diǎn)陣顯示屏用來(lái)顯示時(shí)間信息。3 需要改寫的時(shí)間信息有電腦鍵盤輸入,改寫格式為: Year-Week-Month-Day-Hour-Minute-Second 每一部分均由兩位數(shù)構(gòu)成,如“周五” 應(yīng)輸入“05”,7個(gè)部分輸入完按回車鍵確定。4 MCU控制整個(gè)系統(tǒng)的運(yùn)行:對(duì)DS1302進(jìn)行讀來(lái)獲取時(shí)間、將電腦鍵盤輸入的信息寫入DS1302內(nèi)以改寫時(shí)間、將從DS1302獲取的時(shí)間信息顯示在LCD液晶顯示器上。3.硬件設(shè)計(jì)3.1關(guān)鍵器件簡(jiǎn)介3.1.1 AT89C51簡(jiǎn)介AT89C51是一種帶4K字節(jié)FLASH存儲(chǔ)器(FPEROMFlash Programmable and Erasa

10、ble Read Only Memory)以及128 BYTES隨機(jī)數(shù)據(jù)存儲(chǔ)器的低電壓、高性能CMOS 8位微處理器。內(nèi)置功能強(qiáng)大微型計(jì)算機(jī)的AT89C51提供了高性價(jià)比的解決方案。AT89C51 提供以下標(biāo)準(zhǔn)功能:4k字節(jié)Flash閃速存儲(chǔ)器,128字節(jié)內(nèi)部RAM,32 個(gè)I/O 口線,兩個(gè)16位定時(shí)/計(jì)數(shù)器,一個(gè)5向量?jī)杉?jí)中斷結(jié)構(gòu),一個(gè)全雙工串行通信口,片內(nèi)振蕩器及時(shí)鐘電路。同時(shí),AT89C51可降至0Hz的靜態(tài)邏輯操作,并支持兩種軟件可選的節(jié)電工作模式??臻e方式停止CPU的工作,但允許RAM,定時(shí)/計(jì)數(shù)器,串行通信口及中斷系統(tǒng)繼續(xù)工作。掉電方式保存RAM中的內(nèi)容,但振蕩器停止工作并禁止其

11、它所有部件工作直到下一個(gè)硬件復(fù)位。實(shí)物圖及引腳排列如下:圖3.1 AT89C51實(shí)物圖圖3.2 AT89C51引腳圖3.1.2 DS1302實(shí)時(shí)時(shí)鐘芯片簡(jiǎn)介 DS1302時(shí)鐘內(nèi)含有一個(gè)實(shí)時(shí)時(shí)鐘/日歷和31字節(jié)靜態(tài)RAM,通過(guò)簡(jiǎn)單的串行接口與單片機(jī)進(jìn)行通信,實(shí)時(shí)時(shí)鐘/日歷電路提供年、月、日、星期、時(shí)、分、秒的信息,每月的天數(shù)和閏年的天數(shù)可自動(dòng)調(diào)整,時(shí)鐘操作可通過(guò)AM/PM只是決定采用24或12小時(shí)格式。DS1302與單片機(jī)之間能簡(jiǎn)單的采用同步串行的方式進(jìn)行通信,僅需用到三個(gè)口線:(1)RES(復(fù)位、也稱為使能位)(2)I/O(3)SCLK(串行時(shí)鐘),時(shí)鐘RAM的讀寫數(shù)據(jù)以一個(gè)或多達(dá)31個(gè)字節(jié)的

12、字符組方式通信。RST輸入時(shí)復(fù)位/片選線,通過(guò)把RST輸入驅(qū)動(dòng)置高電平來(lái)啟動(dòng)所有的數(shù)據(jù)傳送。RST輸入由兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節(jié)或多字節(jié)數(shù)據(jù)的傳送手段。當(dāng)RST為高電平時(shí),則會(huì)終止此次數(shù)據(jù)傳送,I/O引腳變?yōu)楦咦钁B(tài)。上電運(yùn)行時(shí),在Vcc超過(guò)2.5V之前,RST必須保持低電平。只有在SCLK為低電平時(shí),才能將RST置為高電平。I/O為串行數(shù)據(jù)輸入輸出端,SCLK始終是輸入端。實(shí)物及引腳排列如下:圖3.3 DS1302實(shí)物圖 圖3.4 DS1302引腳圖3.1.3 LCD1602 液晶顯示器簡(jiǎn)介1602液晶是一種工業(yè)字符型液晶

13、,能夠同時(shí)顯示1602即32個(gè)字符(16列2行)。它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊,它有若干個(gè)57或者511等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。1602正常工作狀態(tài)下接+5V電壓,且其對(duì)比度可調(diào);內(nèi)部含有復(fù)位電路;提供各種控制功能命令,如:清屏、字符閃爍、光標(biāo)閃爍、顯示移位等多種功能;內(nèi)含80字節(jié)顯示數(shù)據(jù)存儲(chǔ)器DDRAM;內(nèi)建有192個(gè)57點(diǎn)陣的字型的字符發(fā)生器CGROM;8個(gè)可由用戶自定義的57的字符發(fā)生器CGRAM;有微功耗、體積小、顯示內(nèi)容豐富、超薄輕巧,常用在袖珍式儀表和低功耗應(yīng)用系統(tǒng)中。實(shí)物圖和引腳圖如下: 圖3.5 LCD1602 實(shí)物圖圖3.

14、6 LCD1602 引腳圖3.2 系統(tǒng)電路原理仿真圖 圖3.7 系統(tǒng)電路原理仿真圖3.3 器件主要參數(shù)介紹3.3.1 DS1302模塊1 查詢手冊(cè),知DS1302 引腳2/3之間的晶振為32.768KHZ。2 可以設(shè)定規(guī)定載荷電容為6pF。3 DS1302工作電壓為2.05.5V,VCC2為主電源、VCC1為備用電源。當(dāng)主電源關(guān)閉時(shí),也能保持時(shí)鐘的連續(xù)運(yùn)行。由于DS1302兼容TTL電路,故我們均采用5V供電。足以提供大于最小驅(qū)動(dòng)電流(320納安,2.0V時(shí))的電流。3.3.2 LCD1602模塊1 查詢手冊(cè),知1602芯片工作電壓在4.55.5V。模塊最佳工作電壓在5.0V,故我們采用5V電

15、壓給LCD1602供電,此時(shí)的工作電流為2.0mA,足以驅(qū)動(dòng)1602工作。2 顯示容量:162個(gè)字符3 字符尺寸:2.954.35mm4 12號(hào)引腳為液晶顯示偏壓信號(hào),通過(guò)改變此引腳上電壓,可以改變1602的顯示對(duì)比度。5 1602數(shù)據(jù)引腳接在最小系統(tǒng)的P0口,由于P0口是準(zhǔn)雙向口(不存在高阻抗?fàn)顟B(tài)),需要在片外接上拉電阻。3.3.3 鍵盤輸入模塊1 Proteus仿真環(huán)境下采用虛擬終端作為串口通信的通道,傳輸波特率設(shè)置為9600bit/s。2 實(shí)際運(yùn)行過(guò)程中,用串口調(diào)試助手軟件對(duì)DS1302實(shí)現(xiàn)寫的操作,同樣波特率設(shè)置為9600bit/s。3.3.4 最小系統(tǒng)模塊:1 整個(gè)系統(tǒng)采用5V供電。

16、2 AT89C51靜態(tài)工作頻率為024MHZ,為了滿足串口傳輸數(shù)據(jù),我們采用11.0592MHZ的晶振為系統(tǒng)提供振蕩頻率。3 振蕩電路電容容量規(guī)定在2040pF之間,我們采用典型值30pF。4 復(fù)位電路實(shí)現(xiàn)復(fù)位時(shí)通過(guò)在RST引腳上施加2個(gè)機(jī)器周期的高電平,即可實(shí)現(xiàn)復(fù)位。為了使電容的充電、放電時(shí)間滿足要求,我們?nèi)的容量為10F。4.軟件設(shè)計(jì)4.1 流程圖4.1.1 系統(tǒng)設(shè)計(jì)總流程圖系統(tǒng)設(shè)計(jì)總流程圖如圖4.1所示,接通電源之后,系統(tǒng)就處在取數(shù)據(jù)-顯示數(shù)據(jù)的循環(huán)之中。圖4.1 系統(tǒng)總流程圖4.1.2 從DS1302取時(shí)間流程圖圖4.2 從DS1302取時(shí)間流程圖4.1.3 串口數(shù)據(jù)接收、處理流程圖

17、每當(dāng)接收一次串口送來(lái)的數(shù)據(jù),就進(jìn)一次串口服務(wù)中斷子程序。在串口服務(wù)中斷子程序中,對(duì)接收的數(shù)據(jù)進(jìn)行處理:判斷接收的若干個(gè)數(shù)據(jù)是否符合輸入要求。如果符合,就將數(shù)據(jù)存入接收緩沖單元中,并進(jìn)行轉(zhuǎn)換(將接收到的數(shù)據(jù)由字符BCD碼),然后將轉(zhuǎn)換過(guò)后的數(shù)據(jù)寫入到DS1302中。如果接收到的數(shù)據(jù)不符合輸入要求,則將這次接收的數(shù)據(jù)舍棄。流程圖如下: 圖4.3 串口數(shù)據(jù)接收、處理流程圖4.1.4 LCD1602顯示時(shí)間流程圖 在每次寫操作執(zhí)行前,都需要對(duì)1602檢查其是否處于“忙”的狀態(tài),如果其處于“忙”狀態(tài),那么就等其處于空閑狀態(tài)之后再對(duì)其進(jìn)行寫操作。流程圖如下: 圖4.4 串口數(shù)據(jù)接收、處理流程圖4.2 模塊

18、工作過(guò)程介紹4.2.1 DS1302模塊1 工作過(guò)程:在DS1302進(jìn)行數(shù)據(jù)傳輸時(shí),RST引腳必須被置為高電平,在每個(gè)SCLK上升沿時(shí)數(shù)據(jù)被輸入,下降沿時(shí)數(shù)據(jù)被輸出,一次只能讀寫一位,通過(guò)8個(gè)脈沖便可讀取一個(gè)字節(jié)或?qū)懭胍粋€(gè)字節(jié)從而實(shí)現(xiàn)串行輸入與輸出。時(shí)序圖如下:圖4.5 DS1302單字節(jié) 讀 時(shí)序圖經(jīng)過(guò)8個(gè)時(shí)鐘周期的控制讀指令串行輸入后,一個(gè)字節(jié)的數(shù)據(jù)將在接下來(lái)8個(gè)時(shí)鐘周期的下降沿被輸出。代碼如下:uchar Get_A_Byte_FROM_DS1302() uchar i,b=0x00;for(i=0;i8;i+) b |= _crol_(uchar)IO,i);SCLK=1;SCLK=0

19、;return b/16*10+b%16;圖4.6 DS1302單字節(jié) 寫 時(shí)序圖經(jīng)過(guò)8個(gè)時(shí)鐘周期的控制字節(jié)的寫入,一個(gè)字節(jié)數(shù)據(jù)將在接下來(lái)8個(gè)時(shí)鐘周期的上升沿完成,數(shù)據(jù)的傳輸從字節(jié)最低位開(kāi)始。代碼如下:void Write_A_Byte_TO_DS1302(uchar x) uchar i;for(i=0;i=1;2 控制指令:圖4.7 DS1302 控制指令圖Bit7位必須為1,如果是0寫入將被禁止。Bit6位為0是指定對(duì)時(shí)鐘/日歷寄存器控制讀寫操作,為1則為對(duì)RAM區(qū)數(shù)據(jù)的控制讀寫操作,最低位Bit0指定是寫操作(0)還是讀操作(1)。3 時(shí)鐘/日歷寄存器圖4.8 DS1302時(shí)鐘日歷寄存

20、器“秒”寄存器中Bit7位為時(shí)鐘停止標(biāo)志位,若CH=1,時(shí)鐘晶振停止起振,DS1302進(jìn)入低功耗待命模式,若CH=0,晶振開(kāi)始起振。 WP位為寫保護(hù)位,為1有效。在任何 寫 操作執(zhí)行前,WP位都應(yīng)該置0,使寫保護(hù)位無(wú)效,即允許寫。注意:寫入時(shí)鐘日歷寄存器內(nèi)的內(nèi)容應(yīng)為BCD碼,必須將串口接收到的數(shù)據(jù)轉(zhuǎn)化為BCD碼然后再存放在DS1302中,轉(zhuǎn)換代碼如下:void DateChange(void)/將10進(jìn)制數(shù)轉(zhuǎn)換為BCD碼存放在/RECEIVE_BUFFER2數(shù)組中int i;for(i=0;i7;i+)RECEIVE_BUFFER2i=RECEIVE_BUFFER1i*3*10+RECEIVE

21、_BUFFER1i*3+1;for(i=0;i7;i+)RECEIVE_BUFFER2i=RECEIVE_BUFFER2i/10*16+RECEIVE_BUFFER2i%10;4.2.2 LCD1602模塊1 LCD1602讀操作:LCD1602作為一個(gè)顯示設(shè)備,其讀操作一般很少用到,只有在向1602寫數(shù)據(jù),需要判斷其是否“忙”時(shí),才會(huì)用到讀操作。讀操作時(shí)序圖如下:圖4.9 LCD1602 讀 時(shí)序圖首先將RS拉低,RW置高,表示 讀數(shù)據(jù),再將使能端置高,P0口上的數(shù)據(jù)輸入,即可將數(shù)據(jù)讀入。代碼如下:uchar Read_LCD_State() uchar state;RS=0;RW=1;EN

22、=1;DelayMS(1); state=P0;EN = 0;DelayMS(1);return state;2 LCD1602寫操作:相較于讀操作,寫操作用的很多。寫操作時(shí)序圖如下:圖4.10 LCD1602 寫 時(shí)序圖需要注意的是,在每次寫操作執(zhí)行前,都需要對(duì)1602檢查其是否處于“忙”的狀態(tài),如果其處于“忙”狀態(tài),那么就等其處于空閑狀態(tài)之后再對(duì)其進(jìn)行寫操作。判忙代碼如下:void LCD_Busy_Wait() while(Read_LCD_State()&0x80)=0x80);DelayMS(5);uchar Read_LCD_State() uchar state;RS=0;RW=

23、1;EN=1;DelayMS(1); state=P0;EN = 0;DelayMS(1);return state;寫 數(shù)據(jù)代碼如下:void Write_LCD_Data(uchar dat) LCD_Busy_Wait();RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0;寫 指令代碼如下:void Write_LCD_Command(uchar cmd) LCD_Busy_Wait(); RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0;3 LCD1602 初始化操作: 1602初始化操作是對(duì)1602顯示的方式、功

24、能作一些設(shè)置,達(dá)到預(yù)期的顯示效果。通過(guò)將指令寫入1602中即可實(shí)現(xiàn)初始化操作。指令說(shuō)明如下: 顯示模式設(shè)置: 圖4.11 LCD1602 顯示模式設(shè)置 顯示開(kāi)/關(guān)及光標(biāo)設(shè)置: 圖4.12 LCD1602 顯示開(kāi)/關(guān)及光標(biāo)設(shè)置初始化代碼如下:void Init_LCD() Write_LCD_Command(0x38); /162顯示,57點(diǎn)陣,8位數(shù)據(jù)接口 DelayMS(1);Write_LCD_Command(0x01);/清屏 DelayMS(1);Write_LCD_Command(0x06);/增量方式,不移位 DelayMS(1);Write_LCD_Command(0x0c);/

25、開(kāi)顯示,光標(biāo)關(guān),字符不閃爍 DelayMS(1);4.2.3 串口接收模塊用電腦鍵盤,將要輸入的時(shí)間通過(guò)串口發(fā)送給MCU。串口采用方式1,波特率設(shè)置為9600Bit/s。發(fā)送及接收時(shí)序圖如圖所示: 圖4.13 串口工作方式1的時(shí)序圖串口接收代碼如下:void UART_ISR() interrupt 4/串口中斷:由串口輸入uchar Temp;if(RI)RI=0;Temp=SBUF;if(Temp!=0x0d)RECEIVE_BUFFER1rec_i=Temp-0;/獲取字符對(duì)應(yīng)的rec_i+;if(Temp=0x0d)DateChange();if(Date_Check()=1)DS13

26、02Init();/向DS1302寫入elseES=0;SBUF=E;while(TI=0);TI=0;SBUF=r;while(TI=0);TI=0;SBUF=r;while(TI=0);TI=0;SBUF=o;while(TI=0);TI=0;SBUF=r;while(TI=0);TI=0;SBUF=0x0D;while(TI=0);TI=0;ES=1;rec_i=0;if(TI)TI=0;5.系統(tǒng)調(diào)試與仿真5.1 采用Proteus硬件仿真調(diào)試創(chuàng)建調(diào)試過(guò)程如圖:1 在Debug模式下選擇Proteus VSM Monitor-51 Driver硬件驅(qū)動(dòng)。然后點(diǎn)擊確定即可。如圖5.1所示。

27、圖5.1 調(diào)試設(shè)置2 點(diǎn)擊工具欄上按鈕,即可開(kāi)始keil與proteus聯(lián)調(diào)過(guò)程,如圖5.2所示:圖5.2 聯(lián)調(diào)過(guò)程5.2 調(diào)試過(guò)程調(diào)試過(guò)程中,我遇到了一些問(wèn)題,后來(lái)都通過(guò)調(diào)試解決了。1 我的本次設(shè)計(jì)有一項(xiàng)功能:若操作者沒(méi)有按照規(guī)定格式輸入,則虛擬中斷(串口調(diào)試助手)會(huì)顯示一個(gè)字符串“Error”。如圖:圖5. 3運(yùn)行過(guò)程而我在最初階段并沒(méi)有實(shí)現(xiàn)此功能。后來(lái)通過(guò)調(diào)試,我發(fā)現(xiàn)了問(wèn)題所在:輸出此段字符應(yīng)采用查詢方式輸出,而我采用了中斷方式。在執(zhí)行此操作時(shí),就處在串口中斷服務(wù)子程序內(nèi),系統(tǒng)不會(huì)再響應(yīng)串口中斷。將此中斷方式輸出改為查詢方式輸出就解決了這個(gè)問(wèn)題。2 在我通過(guò)虛擬終端向系統(tǒng)輸入日期時(shí),DS

28、1302不能接收我輸入的數(shù)據(jù)。調(diào)試過(guò)程中,我發(fā)現(xiàn)是時(shí)序出了問(wèn)題。向DS1302寫入數(shù)據(jù)時(shí),RST為高的情況下,SCLK上升沿時(shí)IO口數(shù)據(jù)被寫入DS1302,而我程序內(nèi)則寫成了下降沿時(shí)數(shù)據(jù)被寫入。5.3 運(yùn)行效果Proteus運(yùn)行按鈕按下,LCD1602顯示的時(shí)間與當(dāng)前系統(tǒng)的時(shí)間同步,且虛擬中斷輸出一段字符串,用來(lái)提示輸入格式。如圖所示:圖5. 4運(yùn)行過(guò)程接下來(lái),按照提示的格式輸入時(shí)間,如:15-07-12-31-23-59-50 ,如圖所示:圖5. 5運(yùn)行過(guò)程然后再按下回車鍵,則1602上即顯示輸入格式的時(shí)間,如圖所示:圖5. 6運(yùn)行過(guò)程若重新按照格式輸入,則時(shí)間會(huì)再一次改變,如圖:圖5. 7

29、運(yùn)行過(guò)程如若輸入的格式不正確,則虛擬終端會(huì)輸出一個(gè)字符串“Error”來(lái)提醒操作者輸入格式錯(cuò)誤,如圖所示:圖5. 8運(yùn)行過(guò)程同時(shí),此系統(tǒng)還有檢測(cè)輸入日期是否實(shí)際的功能,如輸入:16-08-12-31-23-59-50 (周-08肯定是錯(cuò)誤的),虛擬中斷也會(huì)輸出字符串“Error”來(lái)提示操作者,如圖所示:圖5. 9運(yùn)行過(guò)程所有功能運(yùn)行效果介紹完畢。5.4 仿真的局限性軟件仿真與實(shí)際驗(yàn)證有很大的不同。軟件仿真是將元器件、導(dǎo)線等理想化了,不會(huì)出錯(cuò),而實(shí)際電路的走線布線、元器件、工作環(huán)境(如溫度、濕度等)對(duì)電路的運(yùn)行都是有影響的,只是影響大小不同而已,甚至期間因?yàn)槭艿接绊懚苯訐p壞,這些都是在軟件仿真

30、時(shí)不可能遇到的。除此之外,同一型號(hào)的元器件,不同廠家,甚至是同一廠家不同批次生產(chǎn)出來(lái)的元器件都多少有些差異,而這些差異都有可能使硬件運(yùn)行失敗。最直觀的例子就是:我在調(diào)試的過(guò)程中,在Proteus上完美運(yùn)行的程序,燒寫進(jìn)實(shí)驗(yàn)板之后現(xiàn)實(shí)的效果就沒(méi)有了。根本看不見(jiàn)時(shí)間。最后經(jīng)過(guò)很長(zhǎng)時(shí)間的調(diào)試,期間對(duì)1602工作的時(shí)序作了一些調(diào)整,我才解決了這個(gè)問(wèn)題,讓實(shí)驗(yàn)板與仿真實(shí)現(xiàn)同樣的效果。由此看來(lái),仿真的局限性很大,只有在硬件上實(shí)現(xiàn)才能算是真正的完成了設(shè)計(jì)。5.5 方案改進(jìn)雖然此設(shè)計(jì)已經(jīng)滿足了基本要求,但在滿足用戶方面還存在一些欠缺。比如:用戶如果輸入一個(gè)不存在的時(shí)間,如 2012年2月29日。系統(tǒng)應(yīng)該能識(shí)別

31、2010年不是閏年,并不存在此時(shí)間。此時(shí),系統(tǒng)應(yīng)提示輸入錯(cuò)誤。此外,LCD1602顯示界面還可以做一些調(diào)整,如增加溫度顯示,濕度顯示等。6.設(shè)計(jì)總結(jié)雖然本次課程設(shè)計(jì)只持續(xù)了不到一周,但我學(xué)到的東西很多很多。從接到這個(gè)題目到現(xiàn)在設(shè)計(jì)的完成,每一步我都有深刻的體會(huì)。作為一名工科生,我更喜歡有條理地總結(jié)這次設(shè)計(jì)的收獲:1 首先,本次設(shè)計(jì)我收獲最大的就是我懂得了:學(xué)習(xí)單片機(jī)這門課不單單是學(xué)會(huì)畫圖、寫代碼就OK了。而是應(yīng)該培養(yǎng)自己的“工程師”能力。從分析設(shè)計(jì)要求到選擇方案再到設(shè)計(jì),真正掌握單片機(jī)應(yīng)用系統(tǒng)的開(kāi)發(fā)手段,才是最重要的。2 其次,這次設(shè)計(jì)也培養(yǎng)了我獨(dú)自完成任務(wù)的能力。之前的課程設(shè)計(jì)任務(wù)都是多人一

32、組的,而這次是一個(gè)人一組。起初我以為我自己一人完成不了任務(wù),直到最后,我才明白自己確實(shí)有獨(dú)立完成設(shè)計(jì)的能力。3 由軟件仿真到板子實(shí)現(xiàn)的過(guò)程,讓我明白了軟件仿真的局限性。仿真不能將問(wèn)題體現(xiàn)出來(lái),不能代替實(shí)際。在以后的設(shè)計(jì)任務(wù)中,如果條件允許,能用實(shí)物實(shí)現(xiàn)的都用實(shí)物實(shí)現(xiàn)。4 學(xué)習(xí)單片機(jī),看懂技術(shù)手冊(cè)很重重要。它是技術(shù)人員之間溝通的工具,只有完全看懂它,才能順利的完成設(shè)計(jì)。參考文獻(xiàn)【1】張毅剛.基于Proteus的單片機(jī)課程的基礎(chǔ)實(shí)驗(yàn)與課程設(shè)計(jì).人民郵電出版社.2014.12【2】張毅剛.彭喜元,彭宇.單片機(jī)原理及其應(yīng)用.高等教育出版社.2014.12【3】馬忠梅.單片機(jī)的C語(yǔ)言應(yīng)用程序設(shè)計(jì).北京航

33、空航天大學(xué)出版社.【4】彭偉.單片機(jī)C語(yǔ)言程序設(shè)計(jì)實(shí)訓(xùn)100例.電子工業(yè)出版社.2012.10【5】劉坤.51單片機(jī)典型應(yīng)用開(kāi)發(fā)范例大全.中國(guó)鐵路出版社.2.11.10【6】李朝青.單片機(jī)原理及接口技術(shù).北京航空航天大學(xué)出版社.2013.7附錄附錄一:系統(tǒng)原理圖附錄二:程序設(shè)計(jì)#include #include #include #define uint unsigned int#define uchar unsigned charsbit IO = P32;sbit SCLK = P14;sbit RST = P33;sbit RS = P22;sbit RW = P21;sbit EN =

34、 P20;uchar code *WEEK= *,SUN,MON,TUS,WEN,THU,FRI,SAT;uchar rec_i=0; uchar LCD_DSY_BUFFER1=DATE 00-00-00 ;uchar LCD_DSY_BUFFER2=TIME 00:00:00 ;uchar Time7;uchar RECEIVE_BUFFER123; uchar RECEIVE_BUFFER210;uchar code WRITE_RTC_ADDR7 = 0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c;void DelayMS(uint ms) uchar

35、 i;while(ms-) for(i=0;i120;i+);void Write_A_Byte_TO_DS1302(uchar x)/通過(guò)8個(gè)脈沖,向1302內(nèi)串行寫入一/個(gè)字節(jié) uchar i;for(i=0;i=1;uchar Get_A_Byte_FROM_DS1302() uchar i,b=0x00;for(i=0;i8;i+) b |= _crol_(uchar)IO,i);/_crol_循環(huán)左移 IO由 位到 字節(jié) 強(qiáng)制轉(zhuǎn)換 SCLK=1;SCLK=0;return b/16*10+b%16;/寄存器內(nèi)為BCD碼 uchar Read_Data(uchar addr)/讀日期,

36、返回時(shí)、分、秒。 uchar dat;RST = 0;SCLK=0;RST=1;/RST 即為 EN 此句為下一句做準(zhǔn)備 /注意:先將SCLK清 0之后,RST才/能置為 1 Write_A_Byte_TO_DS1302(addr);/向DS1302寫入控制指令 “讀 ” dat = Get_A_Byte_FROM_DS1302(); SCLK=1;RST=0;return dat;void GetTime() uchar i,addr = 0x81;for(i=0;i7;i+) Timei=Read_Data(addr);addr+=2;/控制字818D,依次讀取 秒 分 時(shí) /日月周年存放

37、在Time的06數(shù)組中 uchar Read_LCD_State() uchar state;RS=0;RW=1;EN=1;DelayMS(1); state=P0;EN = 0;DelayMS(1);return state;void LCD_Busy_Wait() while(Read_LCD_State()&0x80)=0x80);/當(dāng)BF位為1時(shí),表示LCD忙 DelayMS(5); void Write_LCD_Data(uchar dat) LCD_Busy_Wait();RS=1;RW=0;EN=0;P0=dat;EN=1;DelayMS(1);EN=0;void Write_L

38、CD_Command(uchar cmd) LCD_Busy_Wait();/等待LCD不忙 RS=0;RW=0;EN=0;P0=cmd;EN=1;DelayMS(1);EN=0;void Init_LCD() Write_LCD_Command(0x38);/設(shè)置162顯示,57點(diǎn)陣,8位數(shù)據(jù)接口 DelayMS(1);Write_LCD_Command(0x01);/清屏 DelayMS(1);Write_LCD_Command(0x06);/增量方式,不移位 DelayMS(1);Write_LCD_Command(0x0c);/開(kāi)顯示,光標(biāo)關(guān),字符不閃爍 DelayMS(1);void

39、 Set_LCD_POS(uchar p) Write_LCD_Command(p|0x80);void Display_LCD_String(uchar p,uchar *s) uchar i;Set_LCD_POS(p);/設(shè)置字符顯示位置for(i=0;i16;i+)Write_LCD_Data(si);DelayMS(1); void Format_Time(uchar d,uchar *a) a0=d/10+0;a1=d%10+0;void Output_Prompt()/串口輸出字符格式提示uchar i;uchar code string1=Year-Week-Month-Day

40、-Hour-Month-Second ENTER;for(i=0;i50;i+)SBUF=string1i;while(TI=0);TI=1; SBUF=0x0D;while(TI=0);TI=1;void main()TMOD=0x20;/定時(shí)器1工作于方式2SCON=0x50;/串口工作在方式1,允許接收TH1=0xFD;/波特率9600b/s,11.0592MHZ TL1=0xFD; EA=1;ES=1;RI=0;TI=0;TR1=1;Output_Prompt();/輸入提示Init_LCD();while(1) GetTime();Format_Time(Time6,LCD_DSY_

41、BUFFER1+5);/年裝入顯示緩沖單元 Format_Time(Time4,LCD_DSY_BUFFER1+8);/月裝入顯示緩沖單元Format_Time(Time3,LCD_DSY_BUFFER1+11);/日裝入顯示緩沖單元strcpy(LCD_DSY_BUFFER1+13,WEEKTime5);/周裝入顯示緩沖單元Format_Time(Time2,LCD_DSY_BUFFER2+5);/時(shí)裝入顯示緩沖單元Format_Time(Time1,LCD_DSY_BUFFER2+8);/分裝入顯示緩沖單元Format_Time(Time0,LCD_DSY_BUFFER2+11);/秒裝入顯示緩沖單元Display_LCD_String(0x00,LCD_DSY_BUFFER1);/0x00是LCD RAM映/射第一行位置 Display_LCD_String(0x40,LCD_DSY_BUFFER2);/0x40是LCD RAM /映射第二行位置 void DateChange(void)/將10進(jìn)制數(shù)轉(zhuǎn)換為BCD碼存放在/RECEIVE_BUFFER2數(shù)組中int i;for(i=0;i7;i+)RECEIVE_BUFFER

溫馨提示

  • 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)論