07通信工程論文_第1頁
07通信工程論文_第2頁
07通信工程論文_第3頁
07通信工程論文_第4頁
07通信工程論文_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、泉 州 師 范 學(xué) 院畢業(yè)論文(設(shè)計(jì))題 目 電子萬年歷的設(shè)計(jì)與制作 理工 學(xué) 院 電子信息科學(xué)與技術(shù) 專 業(yè) 2005 級 班學(xué)生姓名 吳偉 學(xué) 號 050303033 指導(dǎo)教師 洪清泉 職 稱 教授 完成日期 2009年5月 教務(wù)處 制目錄摘要 2關(guān)鍵詞 2引言 21、設(shè)計(jì)方案 . 22、硬件電路設(shè)計(jì) . 32.1 STC89C51主控制模塊 . 32.2 DS1302時(shí)鐘模塊 . 32.3 DS18B20溫度采集模塊 52.4 LCD1602顯示模塊 72.5 按鍵調(diào)整模塊 . 92.6 串口下載模塊 . 103、軟件設(shè)計(jì) . 11 3.1 軟件的總體流程圖 . 113.2 DS1302

2、時(shí)間讀取流程圖 . 123.3 DS18B20溫度讀取流程圖 . 123.4 按鍵調(diào)整流程圖 . 134、制作與調(diào)試 . 135、結(jié)束語 . 15致謝 . 16參考文獻(xiàn) . 16 電子萬年歷的設(shè)計(jì)與制作吳偉理工學(xué)院 電子信息科學(xué)與技術(shù) 050303033指導(dǎo)教師洪清泉 教授【摘 要】 該電子萬年歷以單片機(jī)STC89C51為主控制核心,通過單片機(jī)控制時(shí)鐘芯片DS1302實(shí)現(xiàn)時(shí)間的讀??;溫度傳感器DS18B20實(shí)現(xiàn)溫度的采集;液晶LCD1602實(shí)現(xiàn)時(shí)間和溫度的顯示;獨(dú)立式按鍵實(shí)現(xiàn)時(shí)間的調(diào)整。文章主要介紹了該電子萬年歷的硬件電路設(shè)計(jì)和軟件設(shè)計(jì)?!娟P(guān)鍵詞】 單片機(jī);萬年歷;DS1302;DS18B20

3、引言隨著電子技術(shù)的發(fā)展,萬年歷目前已經(jīng)不再局限于以紙質(zhì)的形式出現(xiàn)。以電腦軟件或者電子產(chǎn)品形式出現(xiàn)的萬年歷被稱為電子萬年歷。與傳統(tǒng)紙質(zhì)的萬年歷相比,電子萬年歷得到了越來越廣泛的應(yīng)用。采用電子萬年歷來顯示時(shí)間已經(jīng)成為了一種時(shí)尚。本文提出了一種基于單片機(jī)的電子萬年歷的設(shè)計(jì),以STC89C51作為主控制核心,與液晶LCD1602、時(shí)鐘芯片DS1302、溫度傳感器DS18B20、獨(dú)立式按鍵等模塊組成硬件系統(tǒng),能實(shí)現(xiàn)時(shí)間、溫度的顯示,以及時(shí)間的調(diào)整。1、設(shè)計(jì)方案圖1-1 電子萬年歷的糸統(tǒng)框圖(1)主控制模塊采用臺灣宏晶公司生產(chǎn)的單片機(jī)STC89C51作為主控制核心,其兼容51系列單片機(jī)(硬件引腳兼容,軟件

4、也兼容),而且具有ISP(在線編程)功能。一般可通過一個(gè)9針的串口和芯片MAX232等組成的ISP下載通道,實(shí)現(xiàn)程序直接從計(jì)算機(jī)下載到單片機(jī)STC89C51中。(2)時(shí)鐘模塊 采用DS1302,它是由美國DALLAS公司推出的一種高性能、低功耗的時(shí)鐘芯片,可對年、月、日、星期、時(shí)、分、秒進(jìn)行精確的計(jì)數(shù)。(3)溫度采集模塊 采用DS18B20,它是由美國DALLAS公司推出的一種溫度傳感器芯片,它的測溫范圍為(-55125),與單片機(jī)連接簡單,減少了外部的硬件電路,可直接讀出被測溫度值。(4)按鍵調(diào)整模塊采用獨(dú)立式按鍵,一個(gè)I/O口接一個(gè)按鍵。當(dāng)電路所需要的按鍵較少時(shí),可以采用獨(dú)立式按鍵,控制程

5、序也較簡單。(5)顯示模塊 采用LCD1602液晶顯示屏,它可以顯示兩行字符,每行16個(gè)字符,顯示內(nèi)容豐富。2、硬件電路設(shè)計(jì)2.1 STC89C51主控制模塊單片機(jī)最小系統(tǒng)確保單片機(jī)的正常工作,主要由晶振電路和復(fù)位電路組成。任何復(fù)雜的單片機(jī)糸統(tǒng),都是在單片機(jī)最小系統(tǒng)這個(gè)基礎(chǔ)上通過添加模塊設(shè)計(jì)出來的。 圖2-1 單片機(jī)最小糸統(tǒng)單片機(jī)STC89C51,是40個(gè)引腳的雙列直插芯片,有4組8位共32個(gè)I/O口,分別是P0口(P0.0P0.7),P1口(P1.0P1.7),P2口(P2.0P2.7),P3口(P3.0P3.7)。I/O就是Input/Output的意思,也就是具有輸入和輸出的功能,所以又

6、叫雙向I/O口。(1)供電:單片機(jī)的引腳40要接電源端,采用+5V電源供電。(2)晶振電路: 單片機(jī)的引腳18和引腳19接外部晶振,晶振的頻率決定了單片機(jī)糸統(tǒng)的時(shí)鐘頻率。比如晶振的頻率選擇12MHZ,那么單片機(jī)工作的時(shí)鐘頻率就是12MHZ。單片機(jī)系統(tǒng)常用的晶振的頻率是11.0592MHZ,12MHZ。通常一個(gè)單片機(jī)系統(tǒng)共用一個(gè)晶振,便于各部分保持同步。 晶振上還要接兩個(gè)起振電容,可在2040pF間選取。本設(shè)計(jì)的晶振電路由1個(gè)12MHZ的晶振,2個(gè)33pF的起振電容組成。(3)復(fù)位電路: 單片機(jī)的引腳9是復(fù)位端。單片機(jī)糸統(tǒng)在剛上電時(shí),或者是發(fā)生故障后,都要進(jìn)行復(fù)位。本設(shè)計(jì)采用的復(fù)位電路,是如圖2

7、-1所示的按鍵手動復(fù)位電路。單片機(jī)復(fù)位的條件是:必須使引腳9上持續(xù)兩個(gè)機(jī)器周期(即24個(gè)振蕩周期)以上的高電平。例如,時(shí)鐘頻率為12MHz,即每機(jī)器周期為1us,引腳9只需持續(xù)時(shí)間2us以上的高電平,就發(fā)生復(fù)位。(4)外部訪問允許端:單片機(jī)的引腳31,決定是訪問內(nèi)部存儲器還是外部存儲器。由于現(xiàn)在單片機(jī)內(nèi)部存儲器的容量都足夠大,基本都是從內(nèi)部存儲器讀取程序,即不需要擴(kuò)展外部存儲器,因此EA引腳應(yīng)該接高電平。但是,如果將EA引腳懸空,會導(dǎo)致程序執(zhí)行不正常。 2.2 DS1302時(shí)鐘模塊 DS1302的工作電壓為2.5V5.5V。引腳Vcc1為后備電源,引腳Vcc2為主電源。后備電源可選用3V的鈕扣

8、電池,這樣在主電源關(guān)閉的情況下,也能保持時(shí)鐘的繼續(xù)運(yùn)行。另外DS1302由Vcc1和Vcc2兩者中的較大者來供電。當(dāng)Vcc2大于Vcc10.2V時(shí),Vcc2給DS1302供電。當(dāng)Vcc2小于Vcc1時(shí),DS1302由Vcc1供電。圖2-2 DS1302和單片機(jī)的硬件連接電路圖引腳X1和X2外接32.768kHz的晶振,晶振上可以不接兩個(gè)起振電容,但如果接兩個(gè)6pF的起振電容,會使晶振的振蕩頻率更加穩(wěn)定。引腳(復(fù)位線),引腳SCLK(時(shí)鐘線)和引腳I/O(數(shù)據(jù)線)分別與單片機(jī)的I/O口相連。要正確控制DS1302產(chǎn)生時(shí)鐘信號,首先要清楚DS1302的控制字、寄存器、以及讀/寫時(shí)序。(1) DS1

9、302的控制字 DS1302的控制字如表2-1所示??刂谱止?位,“位7”必須是邏輯1,若為0則數(shù)據(jù)不能寫入或讀取。“位6”為0表示存取日歷時(shí)鐘數(shù)據(jù),若為1則表示存取RAM數(shù)據(jù)。“位5”到“位1”(A4A0),表示操作單元的地址,如00000表示秒寄存器,00110表示年寄存器。“位0”為0表示要進(jìn)行寫操作,為1則表示進(jìn)行讀操作,DS1302的控制字總是從最低位開始輸入/出。(2) DS1302的寄存器DS1302共有12個(gè)寄存器,其中有7個(gè)與時(shí)間有關(guān),如表2-1所示。如寫操作80H就是把數(shù)據(jù)寫入DS1302的秒寄存器,而讀操作81H就是把數(shù)據(jù)從DS1302的秒寄存器中讀出。我們要讀取的時(shí)間數(shù)

10、據(jù),就是從相應(yīng)的寄存器中讀取出來的。我們要調(diào)整時(shí)間時(shí),就是把時(shí)間數(shù)據(jù)寫入到相應(yīng)的寄存器中。表2-1 控制字與時(shí)間寄存器(3) DS1302的讀寫時(shí)序DS1302的時(shí)間數(shù)據(jù)讀/寫時(shí)序圖,分別如圖2-3和2-4所示。只有當(dāng)為高電平時(shí),才允許對DS1302進(jìn)行讀/寫操作。圖2-3 DS1302的讀時(shí)序圖DS1302的讀操作:在剛開始的8個(gè)SCLK周期,從低位(位0)到高位(位7)依次輸出8位控制字(讀操作命令),如81H。在接下來的8個(gè)SCLK周期中的每個(gè)脈沖的下降沿,數(shù)據(jù)從低位(位0)到高位(位7)依次通過DS1302的I/O口輸出,這樣就能實(shí)現(xiàn)對時(shí)間的讀取。圖2-4 DS1302的寫時(shí)序圖DS1

11、302的寫操作:在剛開始的8個(gè)SCLK周期,從低位(位0)到高位(位7)依次輸出8位控制字(寫操作命令),如80H。在接下來的8個(gè)SCLK周期中的每個(gè)脈沖的上升沿,數(shù)據(jù)從低位(位0)到高位(位7)依次通過DS1302的I/O口輸入,這樣就能實(shí)現(xiàn)對時(shí)間的調(diào)整。2.3 DS18B20溫度采集模塊圖2-5 DS18B20和單片機(jī)的硬件連接電路圖DS18B20的工作電壓為3V5V。其內(nèi)部的高速緩存RAM,是9個(gè)字節(jié)的存儲器,如表2-2所示。第6、7、8個(gè)字節(jié)保留不使用。第9個(gè)字節(jié)是前面8個(gè)字節(jié)的CRC檢驗(yàn)碼,用來檢驗(yàn)數(shù)據(jù),保證通信數(shù)據(jù)的正確性。第3個(gè)和第4個(gè)字節(jié),是非易失性溫度報(bào)警觸發(fā)器TH和TL的易

12、失性拷貝,每次上電復(fù)位時(shí)被刷新。表2-2 高速緩存RAM 溫度傳感器測得的溫度值,以16位二進(jìn)制數(shù)表示,低8位存放于高速緩存RAM的第1個(gè)字節(jié),高8位存放于高速緩存RAM的第2個(gè)字節(jié)。讀DS18B20的數(shù)據(jù)時(shí),低位在前,高位在后。這16位二進(jìn)制數(shù)的最前面5位表示溫度的正負(fù),若S=0表示測得的溫度大于或等于0,若S=1表示測得的溫度小于0。 溫度為正時(shí),將測得的溫度值所表示的二進(jìn)制數(shù),轉(zhuǎn)換成十進(jìn)制數(shù),再乘以0.0625,就可以得到實(shí)際的溫度值。溫度為負(fù)時(shí),將測得的溫度值所表示的二進(jìn)制數(shù),取反加1先變成原碼,然后轉(zhuǎn)成十進(jìn)制數(shù),再乘以0.0625,就可以得到實(shí)際的溫度值。如二進(jìn)制數(shù)0000 0001

13、 1001 0001,除前5位符號位外,先轉(zhuǎn)成十進(jìn)制數(shù)得401,再乘以0.0625得25.0625,因?yàn)?6位二進(jìn)制數(shù)的前5位是0,所以實(shí)際溫度為+25.0625度。如二進(jìn)制數(shù)1111 1100 1001 0000,除前5位符號位外,先取反加1得011 0111 0000,轉(zhuǎn)成十進(jìn)制數(shù)得880,再乘以0.0625得55,因?yàn)?6位二進(jìn)制數(shù)的前5位是1,所以實(shí)際溫度為-55度。表2-3 DS18B20溫度數(shù)據(jù)表由于DS18B20是在一根I/O線上進(jìn)行通信,因此有著嚴(yán)格的通信協(xié)議,該通信協(xié)議定義了幾種信號:復(fù)位脈沖、存在脈沖、寫0、寫1、讀0、讀1。所有這些信號,除存在脈沖是由DS18B20(從機(jī)

14、)發(fā)出的外,其余都是由單片機(jī)(主機(jī))發(fā)出的。(1) DS18B20的復(fù)位操作 單片機(jī)和DS18B20間的任何通信都需要以初始化過程開始。初始化過程就是單片機(jī)發(fā)出一個(gè)復(fù)位脈沖,跟著如果檢測到DS18B20的存在脈沖,表明DS18B20已經(jīng)準(zhǔn)備好發(fā)送或接收數(shù)據(jù)。 具體的初始化過程,主機(jī)首先發(fā)出一個(gè)480960us的低電平脈沖,然后釋放總線變?yōu)楦唠娖?,并在隨后的480us的時(shí)間內(nèi)對總線進(jìn)行檢測。如果有低電平出現(xiàn),說明總線上有DS18B20已做出應(yīng)答。若無低電平出現(xiàn)一直都是高電平,說明總線上無DS18B20應(yīng)答。作為從機(jī)的DS18B20在一上電后,就一直在檢測總線上是否有480960us的低電平(復(fù)位

15、脈沖)出現(xiàn)。若有就在總線轉(zhuǎn)為高電平后等待1560us后,將總線電平拉低60240us作為存在脈沖做出響應(yīng),告訴主機(jī)DS18B20已做好準(zhǔn)備。若沒有檢測到就一直在檢測等待。圖2-6 初始化過程“復(fù)位脈沖”和“存在脈沖” (2) DS18B20的讀操作 讀周期最短為60us。對于讀操作分為讀0和讀1操作兩個(gè)過程。若從機(jī)要往總線送出0,在主機(jī)把總線拉低1us后,則繼續(xù)拉低電平最少15us。若從機(jī)要往總線送出1,在主機(jī)把總線拉低1us后,就釋放總線為高電平,一直到讀周期結(jié)束。而作為主機(jī)的單片機(jī),必須在讀周期開始的15us內(nèi),對總線進(jìn)行采樣,在采樣時(shí)間內(nèi)總線若為高電平則表示讀1,在采樣時(shí)間內(nèi)總線若為低電

16、平則表示讀0。 圖2-7 DS18B20的讀操作時(shí)序(3) DS18B20的寫操作 寫周期最短為60us,最長不超過120us。對于寫操作也分為寫0和寫1操作兩個(gè)過程。若主機(jī)想寫0,在主機(jī)先把總線拉低1us后,則繼續(xù)拉低電平最少60us直至寫周期結(jié)束,然后釋放總線為高電平。若主機(jī)想寫1,在主機(jī)先把總線拉低1us后,就釋放總線為高電平,一直到寫周期結(jié)束。而作為從機(jī)的DS18B20則在檢測到總線被拉低15us后,在緊接著的15us45us開始對總線采樣,在采樣時(shí)間內(nèi)總線若為高電平則表示寫1,在采樣時(shí)間內(nèi)總線若為低電平則表示寫0。 圖2-8 DS18B20的寫操作時(shí)序2.4 LCD1602顯示模塊

17、除了P0口外,其余的P1,P2,P3口均有內(nèi)置的上拉電阻,為了保證P0口的外圍器件的正常工作,所以P0口在外接LCD1602的同時(shí),還要外接上拉電阻,本設(shè)計(jì)采用一個(gè)排阻。 LCD1602可以顯示2行,每行16個(gè)字符,每個(gè)字符用5x7點(diǎn)陣表示,采用+5V電源供電,外圍電路配置簡單。圖2-9 LCD1602和單片機(jī)的硬件連接電路圖(1)LCD1602的引腳說明引腳3(VO)為液晶顯示器對比度調(diào)整端,接正電源時(shí)對比度最弱,接地時(shí)對比度最高。引腳4(RS)為寄存器選擇,高電平時(shí)選擇數(shù)據(jù)寄存器、低電平時(shí)選擇指令寄存器。引腳5(R/W)為讀寫信號線,高電平時(shí)進(jìn)行讀操作,低電平時(shí)進(jìn)行寫操作。當(dāng) RS和 R/

18、W共同為低電平時(shí)可以寫入指令。當(dāng) RS為高電平,R/W 為低電平時(shí)可以寫入數(shù)據(jù)。引腳6(E)為使能端,當(dāng) E端由高電平跳變成低電平時(shí),液晶模塊執(zhí)行命令。引腳714(D0D7)為8 位雙向數(shù)據(jù)口。(2)LCD1602的字符顯示LCD1602中有DDRAM、CGROM和CGRAM三個(gè)存儲器。 CGROM是常用字符存儲器,存儲了190個(gè)不同的點(diǎn)陣字符,如圖2-10所示。字符代碼0x200x7F為標(biāo)準(zhǔn)的ASCII碼,字符代碼0xA00xFF為日文字符和希臘文字符,其余字符代碼0x100x1F及0x800x9F沒有定義。每一個(gè)字符都有一個(gè)固定的代碼,比如大寫的英文字母"W"的代碼是0

19、101 0111(0x57)。 DDRAM是顯示數(shù)據(jù)存儲器,對應(yīng)LCD1602兩行的顯示地址,用來存儲待顯示的字符代碼。LCD1602第一行的顯示地址是0x00H0x27H,第二行的顯示地址是0x40H0x67H。例如想要在第1行,第2個(gè)位置顯示一個(gè)字符"W",就是在DDRAM中的0x01H地址中寫入"W"的代碼。 圖 2-10 CGROM常用字符存儲器表CGRAM是自定義字符存儲器,從CGROM常用字符存儲器表上可以看到,它在表的最左邊一列,可以允許用戶自定義字符,從上往下看有8個(gè)字符代碼可用。 CGRAM的指令碼規(guī)定,8位數(shù)據(jù)從左到右起前面2位固定為

20、01,中間3位(000111)表示可定義8個(gè)字符代碼,后面3位(000111)表示字符代碼的地址。如果要自定義溫度符號"",簡單的漢字"年","月","日",它們的CGRAM地址、代碼如圖2-11所示。 圖2-11 自定義字符的方法2.5按鍵調(diào)整模塊按鍵的種類很多,不過原理基本相似,本設(shè)計(jì)采用四腳輕觸開關(guān)。單片機(jī)通過檢測相應(yīng)引腳上,按鍵的電平變化,來判斷是否有按鍵閉合。例如P2.0引腳上的電平為低時(shí),則表示有按鍵閉合。反之,則表明沒有按鍵閉合。但是,由于按鍵本身的機(jī)械特性,一個(gè)按鍵在閉合時(shí)不會馬上穩(wěn)定地接通,在釋放

21、時(shí)也不會馬上地?cái)嚅_。因?yàn)樵陂]合及釋放按鍵的瞬間均伴隨有一連串的抖動,如圖2-12 所示。這一連串抖動時(shí)間的長短由按鍵的機(jī)械特性決定,一般為5ms10ms。按鍵抖動會引起一次按鍵被誤讀多次,為確保單片機(jī)對按鍵的一次閉合僅作一次處理,應(yīng)該去除按鍵抖動。圖2-12 按鍵的抖動去除按鍵抖動,有硬件和軟件兩種方法。一般不采用硬件來去除按鍵的抖動,因?yàn)橐黾宇~外的硬件開銷。常用軟件來去除按鍵的抖動,方法是當(dāng)檢測出按鍵閉合后,先執(zhí)行一個(gè)5ms10ms的延時(shí)程序,讓前沿抖動消失后再一次檢測按鍵的狀態(tài),如果按鍵仍保持閉合狀態(tài)電平,則確定真正有按鍵閉合。當(dāng)檢測到按鍵釋放后,也先執(zhí)行一個(gè)5ms10ms的延時(shí)程序,讓

22、后沿抖動消失后才轉(zhuǎn)入該按鍵相應(yīng)的處理程序。本設(shè)計(jì)的四個(gè)按鍵主要是用于時(shí)間的調(diào)整,如圖從上到下的功能,分別是“進(jìn)入調(diào)整模式”,“調(diào)整位時(shí)間加1”,“調(diào)整位時(shí)間減1”,“退出調(diào)整模式”。 圖2-13 按鍵與單片機(jī)的硬件連接電路圖2.6 串口下載模塊在電路板上,信號的傳輸通常是以TTL電平為基礎(chǔ)的。簡單的說,就是用5V表示1,0V表示0,基本上大部分的芯片也都是以這種標(biāo)準(zhǔn)設(shè)計(jì)的。而RS232信號的傳輸標(biāo)準(zhǔn)是用-3V-15V表示1,+3V+15V表示0,這樣就需要有一個(gè)電路或一個(gè)芯片來進(jìn)行信號的轉(zhuǎn)換,也就是把RS232電平信號轉(zhuǎn)換成TTL電平信號。這樣,就能實(shí)現(xiàn)計(jì)算機(jī)與單片機(jī)之間的通信??梢赃x用MAX

23、232芯片,它的作用是把串口RS232電平信號,轉(zhuǎn)換為單片機(jī)所用的TTL電平信號。MAX232使用+5V電源供電。MAX232的內(nèi)部結(jié)構(gòu)基本可分三個(gè)部分:第一部分是電荷泵電路。由引腳1、2、3、4、5、6外接4只電容構(gòu)成。第二部分是數(shù)據(jù)轉(zhuǎn)換通道。由引腳7、8、9、10和引腳11、12、13、14各構(gòu)成兩路數(shù)據(jù)通道。其中引腳13(R1IN)、引腳12(R1OUT)、引腳11(T1IN)、引腳14(T1OUT)做為第一數(shù)據(jù)通道。引腳8(R2IN)、引腳9(R2OUT)、引腳10(T2IN)、引腳7(T2OUT)做為第二數(shù)據(jù)通道。第三部分是供電。引腳15GND、引腳16VCC(+5V)。圖2-14

24、MAX232與單片機(jī)、串口之間的硬件連接電路圖9針串口RS232,一般只用其中的引腳2(接收數(shù)據(jù)RXD)、引腳3(發(fā)送數(shù)據(jù)TXD)、引腳5(地線GND)即可滿足通訊的要求。要實(shí)現(xiàn)計(jì)算機(jī)和單片機(jī)STC89C51之間的通信,首先應(yīng)該用KeilC編程軟件,把程序編譯成“.hex”文件,然后再通過STC-ISP程序下載軟件,把“.hex”文件下載到單片機(jī)中。如圖2-15是STC-ISP軟件的界面,主要通過五個(gè)步驟來完成“.hex”文件的下載。第一步是選擇單片機(jī)的型號為STC89C51,第二步是加載編譯好的“.hex”文件,第三步和第四步按照默認(rèn)即可,第五步先點(diǎn)擊“Download/下載”,當(dāng)它提示“仍

25、在連接中,請給MCU(單片機(jī))上電”時(shí),再給單片機(jī)上電復(fù)位,這樣程序就可以從計(jì)算機(jī)下載到單片機(jī)STC89C51中。這樣做的最大好處就是單片機(jī)具有在線編程功能,在調(diào)試程序時(shí),不用把單片機(jī)頻繁剝離工作環(huán)境,以免多次拔插單片機(jī)造成其引腳的損壞。 圖2-15 STC-ISP軟件界面3.軟件設(shè)計(jì)3.1 軟件的總體流程圖C語言是一種結(jié)構(gòu)化的高級語言。它的優(yōu)點(diǎn)是有功能豐富的庫函數(shù),運(yùn)算速度快,可讀性好,可移植性強(qiáng),是被普遍使用的一種計(jì)算機(jī)語言。缺點(diǎn)是占用資源較多,執(zhí)行效率沒有匯編語言的高。此外,C語言還具有完整的程序模塊結(jié)構(gòu),從而為軟件開發(fā)中采用模塊化程序設(shè)計(jì)方法提供了有力的保障。因此,使用C語言進(jìn)行程序設(shè)

26、計(jì)已經(jīng)成為軟件開發(fā)的一個(gè)主流。本設(shè)計(jì)所有的程序都是在Keil C環(huán)境下,用C語言完成編寫和調(diào)試的。對DS1302的時(shí)間讀取程序,對DS18B20的溫度讀取程序,對按鍵的時(shí)間調(diào)整程序,對LCD1602的顯示時(shí)間和溫度程序,都寫成模塊的形式,方便調(diào)用和調(diào)試。軟件的總體流程圖如圖3-1所示。程序首先對LCD1602、DS1302、DS18B2進(jìn)行初始化,然后單片機(jī)從DS1302讀取時(shí)間,從DS18B20讀取溫度,最后再通過LCD1602顯示出來。圖3-1 軟件的總體流程圖3.2 DS1302時(shí)間讀取流程圖DS1302的初始化,依次先在秒寄存器、分寄存器、時(shí)寄存器、日寄存器、月寄存器、周寄存器、年寄存

27、器中寫入時(shí)間的初始值,然后單片機(jī)再從秒寄存器、分寄存器、時(shí)寄存器、日寄存器、月寄存器、周寄存器、年寄存器中讀出時(shí)間的初始值,經(jīng)由LCD1602顯示出來。當(dāng)通過按鍵來調(diào)整時(shí)間時(shí),就是在相應(yīng)的寄存器中寫入調(diào)整后的時(shí)間值,然后單片機(jī)再從相應(yīng)的寄存器中讀出調(diào)整后的時(shí)間值,經(jīng)由LCD1602顯示調(diào)整后的時(shí)間。圖3-2 時(shí)間讀取的流程圖3.3 DS18B20溫度讀取流程圖 首先初始化DS18B20,跳過讀DS18B20的序列號,因?yàn)橹皇褂靡粋€(gè)DS18B20來讀取溫度,若同時(shí)使用多個(gè)的DS18B20,那么就要讀DS18B20的序列號,這樣才能區(qū)分是哪個(gè)DS18B20測得的溫度。接著啟動溫度轉(zhuǎn)換,溫度轉(zhuǎn)換需要

28、一些時(shí)間,所以做了一些延時(shí)。然后再初始化DS18B20,跳過讀DS18B20的序列號,最后讀取溫度。 圖3-3 溫度讀取的流程圖3.4 按鍵調(diào)整流程圖 調(diào)整時(shí)間用到4個(gè)按鍵,按鍵功能分別是“進(jìn)入調(diào)整模式”,“調(diào)整位時(shí)間加1”,“調(diào)整位時(shí)間減1”,“退出調(diào)整模式”。按鍵名稱分別定義為“Key1”,“Key2”,“Key3”,“Key4”。按Key1,進(jìn)入秒調(diào)整位,此時(shí)秒調(diào)整位會閃爍,表示該調(diào)整位可以被賦值,接著按Key2或者Key3可對調(diào)整位進(jìn)行加或減。要調(diào)整其它調(diào)整位,可再按Key1進(jìn)行選擇,時(shí)間全部調(diào)整好后,按Key4確認(rèn)退出。按鍵調(diào)整的流程圖,如圖3-4所示。圖3-4 按鍵調(diào)整流程圖4、制

29、作與調(diào)試 1)制作電路板的一般步驟: 用Protel99繪出電子萬年歷的原理圖和PCB板圖; 把PCB板圖轉(zhuǎn)成pdf的文件形式,這樣方便激光打印把PCB板圖機(jī)打印到敷臘紙(不干膠下面的襯紙)上,變成碳膜走線圖; 用鐵絲球擦去單面敷銅板表面的氧化層,再用電熨斗把碳膜走線圖熨燙到單面敷銅板上; 把印有碳膜走線圖的單面敷銅板,放到三氯化鐵溶液中進(jìn)行腐蝕后,變成銅膜走線電路板; 電路板上的焊盤經(jīng)過鉆孔后,就可以把電子元器件焊接到電路板上。 2)在制作完成電路板的過程中,出現(xiàn)過以下的問題: 第一次用激光打印機(jī)打印出來的碳膜走線圖,明顯小于實(shí)際大小,導(dǎo)致多數(shù)電子元器件沒法焊接到電路板上;后來打印時(shí)設(shè)置成按

30、“實(shí)際大小”打印,問題就解決了。 由于DS1302的32.768KHZ晶振,體積極小,而且引腳極短,很難焊接到電路板上;后來就把剪下的電阻引腳,用焊錫焊接來加長晶振的引腳。 用數(shù)字萬用表的二極管檔,檢查銅膜走線電路板時(shí),發(fā)現(xiàn)某些地方存在斷路的現(xiàn)象,這是由于這些地方的銅膜走線斷開了,后來用焊錫把斷開處焊接上,電路就導(dǎo)通了。 所有的電子元器件都焊接完成后,把芯片插入到相應(yīng)的插槽中,整個(gè)硬件糸統(tǒng)就完成了。當(dāng)把USB電源線插入到電路板上的電源端子,打開開關(guān)對電路板進(jìn)行供電時(shí),發(fā)現(xiàn)二極管指示燈沒有亮,起初以為是加在二極管上的限流電阻太大了,結(jié)果不是,仔細(xì)檢查了PCB板圖發(fā)現(xiàn)電源端子的封裝有誤,接電源的引

31、腳和接地的引腳顛倒了。后來在電路板上多鉆出了兩個(gè)孔洞,用導(dǎo)線把電源端子的引腳引到電源和接地處。3)通過程序控制相應(yīng)的芯片,來實(shí)現(xiàn)整個(gè)硬件電路的功能,程序主要是在Keil C下編譯與調(diào)試的。首先把DS18B20的讀取程序,DS1302的讀取程序,LCD1602的顯示程序,還有按鍵的時(shí)間調(diào)整程序,分成模塊分別進(jìn)行調(diào)試,直到各部分能正常實(shí)現(xiàn)它的功能。然后再各個(gè)模塊的程序整合在一起,通過調(diào)用相應(yīng)模塊的程序來實(shí)現(xiàn)整個(gè)硬件電路的功能。4)在程序的調(diào)試過程中,主要出現(xiàn)過以下幾個(gè)問題:調(diào)試DS1302的程序時(shí),時(shí)間和日期出現(xiàn)過全部顯示“85”的現(xiàn)象,后來經(jīng)過仔細(xì)檢查,發(fā)現(xiàn)是DS1302時(shí)鐘線(CLK),DS1

32、302復(fù)位線(RST)引腳定義對調(diào)了,改正后應(yīng)該分別接單片機(jī)的P1.5和P1.7。sbit DS1302_CLK = P15; /DS1302時(shí)鐘線sbit DS1302_IO = P16; /DS1302數(shù)據(jù)線sbit DS1302_RST = P17; /DS1302復(fù)位線調(diào)試DS18B20的程序時(shí),測得的溫度顯示為0,后來仔細(xì)檢查后,如下面的程序片段所示,在DS18B20啟動溫度轉(zhuǎn)換,做一些延時(shí)后,不小心遺漏了后面的DS18B20第二次初始化,添加后溫度就能正常顯示了。void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsig

33、ned char t=0;Initial_DS18B20(); /初始化DS18B20 (第一次)WriteOneChar(0xCC); /ROM指令,跳過讀DS18B20序列號WriteOneChar(0x44); / 啟動溫度轉(zhuǎn)換delay_18B20(100); / 延時(shí)Initial_DS18B20();/初始化DS18B20 (第二次)WriteOneChar(0xCC); /ROM指令,跳過讀DS18B20序列號WriteOneChar(0xBE); /RAM指令,讀取高速緩存RAM中的溫度值delay_18B20(100);a=ReadOneChar(); /讀取溫度值低位b=R

34、eadOneChar(); /讀取溫度值高位temp_value=b<<4;temp_value+=(a&0xf0)>>4; 編程使LCD1602顯示簡單漢字“年、月、日”時(shí),出現(xiàn)過日期顯示不正常的現(xiàn)象,后來經(jīng)過考慮,把原先存放在同一個(gè)數(shù)組里面的日期,改成用三個(gè)數(shù)組分別來存放日期的年份、月份、日子,就能正常顯示日期了。uchar DateString13; / 數(shù)組1存放年份uchar DateString23; / 數(shù)組2存放月份uchar DateString33; / 數(shù)組3存放日子uchar TimeString9; / 用一個(gè)數(shù)組存放時(shí)間的時(shí)、分、秒數(shù)

35、據(jù) 以下是抽取出來的LCD1602顯示簡單漢字的程序片段:uchar code self_table =0x08,0x0f,0x12,0x0f,0x0a,0x1f,0x02,0x00,/年0x1f,0x11,0x1f,0x11,0x1f,0x11,0x11,0x00,/月0x1f,0x11,0x11,0x1f,0x11,0x11,0x1f,0x00,/日0x10,0x06,0x09,0x08,0x08,0x09,0x06,0x00/.c ; / 自定義字符代碼LCD1602_write_com(0x40); / CGRAM起始地址for(s=0;s<40;s+)LCD1602_write

36、_data(self_tables); / 調(diào)用自定義字符代碼LCD1602_set_postion(2 ,0); for(s=0;s<1;s+)LCD1602_write_data(0);/ 在LCD1602的第二行的第三位顯示漢字“年”LCD1602_set_postion(5 ,0);for(s=1;s<2;s+)LCD1602_write_data(1);/ 在LCD1602的第二行的第六位顯示漢字“月”LCD1602_set_postion(8 ,0);for(s=2;s<3;s+)LCD1602_write_data(2); / 在LCD1602的第二行的第九位顯

37、示漢字“日”圖4-1 LCD1602的顯示界面5、結(jié)束語基于單片機(jī)STC89C51制作的電子萬年歷,是在控制DS1302顯示時(shí)間的基礎(chǔ)上,通過增加獨(dú)立式按鍵對時(shí)間進(jìn)行調(diào)整,增加DS18B20對環(huán)境溫度進(jìn)行測量,增加串口下載對程序進(jìn)行在線編程,擴(kuò)展改進(jìn)而來的。本設(shè)計(jì)的特點(diǎn)主要是,功能多,能實(shí)現(xiàn)年、月、日、星期、時(shí)、分、秒、溫度的直觀顯示,而且通過按鍵能夠?qū)r(shí)間進(jìn)行調(diào)整。功耗低,只需要3節(jié)串聯(lián)的干電池對其進(jìn)行供電,就能驅(qū)動它正常工作很長一段時(shí)間。其實(shí),電子萬年歷還有很多功能可以擴(kuò)展,比如設(shè)置鬧鈴,或者語音報(bào)時(shí)等。當(dāng)然每增加一項(xiàng)功能,程序相應(yīng)地也會增加許多,而且整合起來也有難度。這也是由于自己能力所限,沒能做到更多的擴(kuò)展,但是相信自己能力如果再提高的話,一定可以做出更有質(zhì)量、功能更多的電子萬年歷來。致謝感謝我的導(dǎo)師洪清泉教授。洪老師從一開始的論文方向的選定,到最后的整篇論文的完成,都非常耐心地對我進(jìn)行了指導(dǎo),給我提出了很多的建議,告訴我論文中應(yīng)該注意的細(xì)節(jié)問題,同時(shí)他還細(xì)心地給

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論