電子萬(wàn)年歷設(shè)計(jì)智能儀器儀表課設(shè)_第1頁(yè)
電子萬(wàn)年歷設(shè)計(jì)智能儀器儀表課設(shè)_第2頁(yè)
電子萬(wàn)年歷設(shè)計(jì)智能儀器儀表課設(shè)_第3頁(yè)
電子萬(wàn)年歷設(shè)計(jì)智能儀器儀表課設(shè)_第4頁(yè)
電子萬(wàn)年歷設(shè)計(jì)智能儀器儀表課設(shè)_第5頁(yè)
已閱讀5頁(yè),還剩44頁(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、摘 要時(shí)鐘,自從它發(fā)明的那天起,就成為人類的朋友,但隨著時(shí)間的推移,科學(xué)技術(shù)的不斷發(fā)展,人們對(duì)時(shí)間計(jì)量的精度要求越來(lái)越高,應(yīng)用越來(lái)越廣。怎樣讓時(shí)鐘更好的為人民服務(wù),怎樣讓我們的老朋友煥發(fā)青春呢?這就要求人們不斷設(shè)計(jì)出新型時(shí)鐘?,F(xiàn)今,高精度的計(jì)時(shí)工具大多數(shù)都使用了石英晶體振蕩器,由于電子鐘,石英表,石英鐘都采用了石英技術(shù),因此走時(shí)精度高,穩(wěn)定性好,使用方便,不需要經(jīng)常調(diào)校,數(shù)字式電子鐘用集成電路計(jì)時(shí)時(shí),譯碼代替機(jī)械式傳動(dòng),用led顯示器代替顯示器代替指針顯示進(jìn)而顯示時(shí)間,減小了計(jì)時(shí)誤差,這種表具有時(shí),分,秒顯示時(shí)間的功能,還可以進(jìn)行時(shí)和分的校對(duì),片選的靈活性好。時(shí)鐘電路在計(jì)算機(jī)系統(tǒng)中起著非常重要

2、的作用,是保證系統(tǒng)正常工作的基礎(chǔ)。在一個(gè)單片機(jī)應(yīng)用系統(tǒng)中,時(shí)鐘有兩方面的含義:一是指為保障系統(tǒng)正常工作的基準(zhǔn)振蕩定時(shí)信號(hào),主要由晶振和外圍電路組成,晶振頻率的大小決定了單片機(jī)系統(tǒng)工作的快慢;二是指系統(tǒng)的標(biāo)準(zhǔn)定時(shí)時(shí)鐘,即定時(shí)時(shí)間,它通常有兩種實(shí)現(xiàn)方法:一是用軟件實(shí)現(xiàn),即用單片機(jī)內(nèi)部的可編程定時(shí)/計(jì)數(shù)器來(lái)實(shí)現(xiàn),但誤差很大,主要用在對(duì)時(shí)間精度要求不高的場(chǎng)合;二是用專門的時(shí)鐘芯片實(shí)現(xiàn),在對(duì)時(shí)間精度要求很高的情況下,通常采用這種方法,典型的時(shí)鐘芯片有:ds1302,ds18b20等都可以滿足高精度的要求。本文主要介紹用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器來(lái)實(shí)現(xiàn)電子時(shí)鐘的方法,本設(shè)計(jì)由單片機(jī)at89s51芯片和lcd

3、602核心,輔以必要的電路,構(gòu)成了一個(gè)數(shù)字電子時(shí)鐘。目錄1 智能儀器儀表的簡(jiǎn)介11.1智能儀器儀表簡(jiǎn)介11.2智能儀器儀表的作用11.3本課題的背景和意義12 系統(tǒng)設(shè)計(jì)簡(jiǎn)介22.1 數(shù)字電子鐘簡(jiǎn)介22.2 設(shè)計(jì)要求22.3 設(shè)計(jì)方案論證22.4 硬件設(shè)計(jì)電路43.系統(tǒng)硬件設(shè)計(jì)53.1主控制器選擇53.2顯示電路63.3溫度傳感器簡(jiǎn)介63.4 ds18b20溫度傳感器與單片機(jī)的接口電路73.5時(shí)鐘電路73.6復(fù)位電路83.7系統(tǒng)總體電路圖94 設(shè)計(jì)語(yǔ)言及軟件介紹104.1c語(yǔ)言介紹104.2protues軟件介紹105 系統(tǒng)軟件設(shè)計(jì)115.1 概述115.2 系統(tǒng)程序設(shè)計(jì)模塊115.2.1主程序

4、115.2.2 ds18b20子程序125.2.3 ds1302子程序125.2.4定時(shí)器定時(shí)設(shè)定子程序135.2.5 lcd1602顯示子程序135.3 控制源程序135.3.1 c語(yǔ)言程序135.4 調(diào)試及仿真451 智能儀器儀表的簡(jiǎn)介1.1智能儀器儀表簡(jiǎn)介儀器儀表(英文:instrumentation)儀器儀表是用以檢出、測(cè)量、觀察、計(jì)算各種物理量、物質(zhì)成分、物性參數(shù)等的器具或設(shè)備。真空檢漏儀、壓力表、測(cè)長(zhǎng)儀、顯微鏡、乘法器等均屬于儀器儀表。廣義來(lái)說(shuō),儀器儀表也可具有自動(dòng)控制、報(bào)警、信號(hào)傳遞和數(shù)據(jù)處理等功能,例如用于工業(yè)生產(chǎn)過(guò)程自動(dòng)控制中的氣動(dòng)調(diào)節(jié)儀表,和電動(dòng)調(diào)節(jié)儀表,以及集散型儀表控制

5、系統(tǒng)也皆屬于儀器儀表。1.2智能儀器儀表的作用90年代,儀器儀表的智能化突出表現(xiàn)在以下幾個(gè)方面:微電子技術(shù)的進(jìn)步更深刻地影響儀器儀表的設(shè)計(jì);dsp芯片的問(wèn)世,使儀器儀表數(shù)字信號(hào)處理功能大大加強(qiáng);微型機(jī)的發(fā)展,使儀器儀表具有更強(qiáng)的數(shù)據(jù)處理能力;圖像處理功能的增加十分普遍;vxi總線得到廣泛的應(yīng)用。近年來(lái),智能化測(cè)量控制儀表的發(fā)展尤為迅速。國(guó)內(nèi)市場(chǎng)上已經(jīng)出現(xiàn)了多種多樣智能化測(cè)量控制儀表,例如,能夠自動(dòng)進(jìn)行差壓補(bǔ)償?shù)闹悄芄?jié)流式流量計(jì),能夠進(jìn)行程序控溫的智能多段溫度控制儀,能夠?qū)崿F(xiàn)數(shù)字pid和各種復(fù)雜控制規(guī)律的智能式調(diào)節(jié)器,以及能夠?qū)Ω鞣N譜圖進(jìn)行分析和數(shù)據(jù)處理的智能色譜儀等 1.3本課題的背景和意義數(shù)

6、字電子鐘是采用數(shù)字電路實(shí)現(xiàn)對(duì).時(shí),分,秒.數(shù)字顯示的計(jì)時(shí)裝置,廣泛用于個(gè)人家庭,車站, 碼頭辦公室等公共場(chǎng)所,成為人們?nèi)粘I钪胁豢缮俚谋匦杵?由于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn)超過(guò)老式鐘表, 鐘表的數(shù)字化給人們生產(chǎn)生活帶來(lái)了極大的方便,而且大大地?cái)U(kuò)展了鐘表原先的報(bào)時(shí)功能。諸如定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開(kāi)關(guān)烘箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自動(dòng)啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。因此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非常現(xiàn)實(shí)的意義。2 系統(tǒng)設(shè)計(jì)簡(jiǎn)介2.1 數(shù)字電子鐘簡(jiǎn)介數(shù)字溫度計(jì)可以準(zhǔn)確的判斷和測(cè)量溫

7、度,以數(shù)字顯示,而非指針或水銀顯示。故稱數(shù)字溫度計(jì)或數(shù)字溫度表。數(shù)字溫度計(jì)采用溫度敏感元件也就是溫度傳感器(如鉑電阻,熱電偶,半導(dǎo)體,熱敏電阻等),將溫度的變化轉(zhuǎn)換成電信號(hào)的變化,如電壓和電流的變化,溫度變化和電信號(hào)的變化有一定的關(guān)系,如線性關(guān)系,一定的曲線關(guān)系等,這個(gè)電信號(hào)可以使用模數(shù)轉(zhuǎn)換的電路即ad轉(zhuǎn)換電路將模擬信號(hào)轉(zhuǎn)換為數(shù)字信號(hào),數(shù)字信號(hào)再送給處理單元,如單片機(jī)或者pc機(jī)等,處理單元經(jīng)過(guò)內(nèi)部的軟件計(jì)算將這個(gè)數(shù)字信號(hào)和溫度聯(lián)系起來(lái),成為可以顯示出來(lái)的溫度數(shù)值,如25.0攝氏度,然后通過(guò)顯示單元,如led,lcd或者電腦屏幕等顯示出來(lái)給人觀察。這樣就完成了數(shù)字溫度計(jì)的基本測(cè)溫功能。2.2 設(shè)

8、計(jì)要求1、顯示年月日時(shí)分秒及星期信息。 2、具有可調(diào)整日期和時(shí)間功能3、增加閏年計(jì)算功能2.3 設(shè)計(jì)方案論證方案一:系統(tǒng)分為主控制器模塊、顯示模塊、按鍵開(kāi)關(guān)模塊,主控制模塊采用at89c52單片機(jī)為控制中心,顯示模塊采用普通的共陰led數(shù)碼管,鍵輸入采用中斷實(shí)現(xiàn)功能調(diào)整,計(jì)時(shí)使用at89c52單片機(jī)自帶的定時(shí)器功能,實(shí)現(xiàn)對(duì)時(shí)間、日期的操作,通過(guò)按鍵盤開(kāi)關(guān)實(shí)現(xiàn)對(duì)時(shí)間、日期的調(diào)整。方案二:系統(tǒng)分為主控模塊、時(shí)鐘電路模塊、按鍵掃描模塊,lcd顯示模塊,電源電路、復(fù)位電路、晶振電路等模塊。主控模塊采用at89c52單片機(jī),按鍵模塊用四個(gè)按鍵,用于調(diào)整時(shí)間,顯示模塊采用lcd1602,時(shí)鐘電路模塊采用d

9、s1302時(shí)鐘芯片實(shí)現(xiàn)對(duì)時(shí)間、日期的操作。兩個(gè)方案工作原理大致相同,只有顯示模塊和時(shí)鐘電路不同。led數(shù)碼管價(jià)格適中,對(duì)于數(shù)字顯示效果較好,而且使用單片機(jī)的端口也較少; lcd1602液晶顯示屏,顯示功能強(qiáng)大,可以顯示大量文字、圖形,顯示多樣性,清晰可見(jiàn),價(jià)格相對(duì)led數(shù)碼管來(lái)說(shuō)要昂貴些,但是基于本設(shè)計(jì)顯示的東西較多,若采用led數(shù)碼管的話,所需數(shù)碼管較多,而且不利于控制,因此選擇lcd1602作為顯示模塊。ds1302是一款高性能的實(shí)時(shí)時(shí)鐘芯片,以計(jì)時(shí)準(zhǔn)確、接口簡(jiǎn)單、使用方便、工作電壓范圍寬和低功耗等優(yōu)點(diǎn),得到廣泛的應(yīng)用,實(shí)時(shí)時(shí)鐘有秒、分、時(shí)、星期、日、月和年,月小于31天時(shí)可以自動(dòng)調(diào)整,并

10、具有閏年補(bǔ)償功能,而且在掉電時(shí)能夠在外部紐扣電池的供電下繼續(xù)工作。單片機(jī)有定時(shí)器的功能,但時(shí)間誤差較大,且需要編寫時(shí)鐘程序,因此采用ds1302作為時(shí)鐘電路。對(duì)比以上方案,結(jié)合設(shè)計(jì)技術(shù)指標(biāo)與要求我們選擇了方案二進(jìn)行設(shè)計(jì)。總框圖:該數(shù)字電子時(shí)鐘的總體設(shè)計(jì)框圖如圖2.3所示。 圖2.3數(shù)字電子鐘總體設(shè)計(jì)框圖2.4 硬件設(shè)計(jì)電路單片機(jī)最小系統(tǒng)是由晶振電路,上電復(fù)位、按鍵復(fù)位電路,isp下載接口和電源指示燈組成。原理圖如圖2-4所示。圖2.4 單片機(jī)最小系統(tǒng)設(shè)計(jì)電路圖3.系統(tǒng)硬件設(shè)計(jì)3.1主控制器選擇1at89c51單片機(jī)介紹:at89c51單片機(jī)是由深圳宏晶公司代理銷售的一款mcu,是由美國(guó)設(shè)計(jì)生產(chǎn)

11、的一種低電壓、高性能cmos 8位單片機(jī),片內(nèi)含8kbytes的可反復(fù)寫的flashrom和128bytes的ram,2個(gè)16位定時(shí)計(jì)數(shù)器5。at89c51單片機(jī)內(nèi)部主要包括累加器acc(有時(shí)也簡(jiǎn)稱為a)、程序狀態(tài)字psw、地址指示器dptr、只讀存儲(chǔ)器rom、隨機(jī)存取存儲(chǔ)器ram、寄存器、并行i/o接口p0p3、定時(shí)器/計(jì)數(shù)器、串行i/o接口以及定時(shí)控制邏輯電路等。這些部件通過(guò)內(nèi)部總線聯(lián)接起來(lái),構(gòu)成一個(gè)完整的微型計(jì)算機(jī)。單片機(jī)中央處理系統(tǒng)的方案設(shè)計(jì),選用at89c51單片機(jī)作為中央處理器,如圖(2)所示。該單片機(jī)除了擁有mcs-51系列單片機(jī)的所有優(yōu)點(diǎn)外,內(nèi)部還具有8k的在系統(tǒng)可編程flas

12、h存儲(chǔ)器,低功耗的空閑和掉電模式,極大的降低了電路的功耗,還包含了定時(shí)器、程序存儲(chǔ)器、數(shù)據(jù)存儲(chǔ)器等硬件,其硬件能符合整個(gè)控制系統(tǒng)的要求,不需要外接其他存儲(chǔ)器芯片和定時(shí)器件,方便地構(gòu)成一個(gè)最小系統(tǒng)。整個(gè)系統(tǒng)結(jié)構(gòu)緊湊,抗干擾能力強(qiáng),性價(jià)比高。圖3-1at89c51引腳圖3.2顯示電路1602液晶也叫1602字符型液晶 它是一種專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶模塊 它有若干個(gè)5x7或者5x11等點(diǎn)陣字符位組成,每個(gè)點(diǎn)陣字符位都可以顯示一個(gè)字符。顯示電路采用lcd1602液晶顯示,如圖(10)所示,圖中只畫出了其相應(yīng)的接口,3腳用于調(diào)節(jié)lcd1602的背光,4、5、6為lcd1602的控制口

13、,用于控制其寫入或是讀出指令,7至14腳為lcd1602的數(shù)據(jù)口,將數(shù)傳送到lcd1602中。其如圖3.2所示:圖3.2 lcd1602顯示電路3.3溫度傳感器簡(jiǎn)介 ds18b20溫度傳感器是美國(guó)dallas半導(dǎo)體公司最新推出的一種改進(jìn)型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測(cè)溫元件相比,它能直接讀出被測(cè)溫度,并且可根據(jù)實(shí)際要求通過(guò)簡(jiǎn)單的編程實(shí)現(xiàn)912位的數(shù)字值讀數(shù)方式。ds18b20的性能特點(diǎn)如下:獨(dú)特的單線接口僅需要一個(gè)端口引腳進(jìn)行通信;多個(gè)ds18b20可以并聯(lián)在惟一的三線上,實(shí)現(xiàn)多點(diǎn)組網(wǎng)功能;無(wú)須外部器件;可通過(guò)數(shù)據(jù)線供電,電壓范圍為3.05.5v;零待機(jī)功耗;溫度以9或12位二進(jìn)制數(shù)字表

14、示;用戶可定義報(bào)警設(shè)置;報(bào)警搜索命令識(shí)別并標(biāo)志超過(guò)程序限定溫度(溫度報(bào)警條件)的器件;負(fù)電壓特性,電源極性接反時(shí),溫度計(jì)不會(huì)因發(fā)熱而燒毀,但不能正常工作; 其測(cè)溫原理圖如下:圖3-3 ds18b20的測(cè)溫原理圖3.4 ds18b20溫度傳感器與單片機(jī)的接口電路 當(dāng)ds18b20處于寫存儲(chǔ)器操作和溫度a/d轉(zhuǎn)換操作時(shí),總線上必須有強(qiáng)的上拉,上拉開(kāi)啟時(shí)間最大為10us。采用寄生電源供電方式時(shí)vdd端接地。由于單線制只有一根線,因此發(fā)送接口必須是三態(tài)的。圖3-4 ds18b20溫度傳感器與單片機(jī)的接口電路3.5時(shí)鐘電路時(shí)鐘電路主要由時(shí)鐘芯片ds1302、備用電池、晶振等幾部分組成,如圖(6)所示。d

15、s1302采用3線串行接口,占用引腳少,內(nèi)部集成了可編程日歷時(shí)鐘,用戶可以根據(jù)需要通過(guò)單片機(jī)的控制來(lái)自行設(shè)置,支持雙電源供電,可以使用外部主電源和備用電源,備份電源能夠使時(shí)鐘芯片繼續(xù)工作。圖3.5(a) ds1302時(shí)鐘電路ds1302各引腳的功能為:8: vcc1:備用電池端;1: vcc2:5v電源。當(dāng)vcc2vcc1+0.2v時(shí),由vcc2向ds1302供電,當(dāng)vcc2 vcc1時(shí),由vcc1向ds1302供電;7: sclk:串行時(shí)鐘,輸入; 6: i/o:數(shù)據(jù)輸入輸出口;5: ce/rst:復(fù)位腳;2、3: x1、x2 是外接晶振腳 (32.768khz的晶振);4: 地(gnd)。

16、ds1302是spi總線驅(qū)動(dòng)方式。它不僅要向寄存器寫入控制字,還需要讀取相應(yīng)寄存器的數(shù)據(jù)。ds1302的控制字如下圖:圖3.5(b)ds1302的控制字圖3.6復(fù)位電路 復(fù)位電路是單片機(jī)的片內(nèi)電路初始化,使單片機(jī)從一種確定的狀態(tài)開(kāi)始運(yùn)行。復(fù)位操作通常有兩種基本形式:上電復(fù)位、開(kāi)關(guān)復(fù)位。此處選擇上電復(fù)位,該操作要求接通電源后自動(dòng)實(shí)現(xiàn)復(fù)位操作。電容上電后使rst持續(xù)一段高電平時(shí)間,此處電解電容c設(shè)定參數(shù)為10uf,如圖所示:常用的復(fù)位電路如下圖所示:圖3-6復(fù)位電路3.7系統(tǒng)總體電路圖 數(shù)字電子鐘設(shè)計(jì)原理圖如圖3-8所示,控制器使用單片機(jī)at89c51,溫度計(jì)傳感器使用ds18b20,用lcd16

17、02實(shí)現(xiàn)溫度顯示。 圖3-7系統(tǒng)總體設(shè)計(jì)圖4 設(shè)計(jì)語(yǔ)言及軟件介紹4.1c語(yǔ)言介紹1972年,貝爾實(shí)驗(yàn)室的dennis ritchie和brian kernighan在b語(yǔ)言的基礎(chǔ)上,作了進(jìn)一步的充實(shí)和完善,設(shè)計(jì)出了c語(yǔ)言。c語(yǔ)言的主要特點(diǎn)是:語(yǔ)言簡(jiǎn)潔、緊湊,使用方便、靈活。運(yùn)算符豐富。c的運(yùn)算符包含的范圍廣泛,共有34種運(yùn)算符。c將括號(hào)、賦值、強(qiáng)制類型轉(zhuǎn)換等都作為運(yùn)算符處理。數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語(yǔ)言的各種數(shù)據(jù)結(jié)構(gòu)。具有結(jié)構(gòu)化的控制語(yǔ)句。語(yǔ)法限制不太嚴(yán)格,程序設(shè)計(jì)自由度大。c語(yǔ)言允許直接訪問(wèn)物理地址,能進(jìn)行位操作,能實(shí)現(xiàn)匯編語(yǔ)言的大部分功能,可以直接對(duì)硬件進(jìn)行操作。生成目標(biāo)代碼質(zhì)量高,程序執(zhí)

18、行效率高。c程序可移植性好。4.2protues軟件介紹proteus軟件是labcenter electronics公司的一款電路設(shè)計(jì)與仿真軟件,它包括isis、ares等軟件模塊,ares模塊主要用來(lái)完成pcb的設(shè)計(jì),而isis模塊用來(lái)完成電路原理圖的布圖與仿真。proteus的軟件仿真基于vsm技術(shù),它與其他軟件最大的不同也是最大的優(yōu)勢(shì)就在于它能仿真大量的單片機(jī)芯片,比如mcs-51系列、pic系列等等,以及單片機(jī)外圍電路,比如鍵盤、led、lcd等等。通過(guò)proteus軟件的使用我們能夠輕易地獲得一個(gè)功能齊全、實(shí)用方便的單片機(jī)實(shí)驗(yàn)室。5 系統(tǒng)軟件設(shè)計(jì)5.1 概述主程序首先對(duì)系統(tǒng)環(huán)境初始

19、化,設(shè)置定時(shí)器t0工作模式為16位定時(shí)/計(jì)數(shù)器模式,置位總中斷允許位ea,并對(duì)鍵盤端口置位,再對(duì)lcd1602初始化,ds1302初始化。接著掃描鍵盤,在鍵盤程序里面是對(duì)時(shí)間、日期及鬧鐘的調(diào)整,最下面是時(shí)間的顯示。5.2 系統(tǒng)程序設(shè)計(jì)模塊本電路包括基本的時(shí)鐘電路模塊、液晶顯示模塊、語(yǔ)音報(bào)時(shí)模塊、溫度傳感器模塊。各功能模塊通過(guò)控制芯片連接起來(lái),完成本設(shè)計(jì)要求。5.2.1主程序主程序流程圖如圖4.2.1所示:lcd顯示按鍵掃描每三秒讀取溫度一次啟用ds1302。初始化lcd以及定時(shí)器圖5.2.1 主程序流程圖5.2.2 ds18b20子程序提取百、十、個(gè)、小數(shù)點(diǎn)后一位 讀到的數(shù)轉(zhuǎn)換為整型向ds18

20、20寫數(shù)據(jù),跳過(guò)rom,讀數(shù)據(jù)復(fù)位初始化ds18b20程序框圖如下 圖5.2.2 讀出溫度子程序流程圖5.2.3 ds1302子程序其流程圖如圖5.2.3所示:dnum=?dnum=?送到12684顯示1:小時(shí)減一 2:分減一 3:秒減一4:年減一 5:月減一 6:日減一 7:星期減一計(jì)算要顯示的數(shù)據(jù)1:小時(shí)加一 2:分加一 3:秒加一4:年加一 5:月加一 6:日加一 7:星期加一 flag=1?初始化圖5.2.3 ds1302程序框圖5.2.4定時(shí)器定時(shí)設(shè)定子程序其流程圖如圖5.2.4所示:設(shè)定每3s調(diào)整一次的時(shí)間循環(huán),以共調(diào)用設(shè)定每0.5s調(diào)整一次的時(shí)間循環(huán),以共調(diào)用設(shè)定工作在定時(shí)器0工

21、作方式1tmod = 0x01 ; 開(kāi)總中斷 圖5.2.4定時(shí)器定時(shí)設(shè)定子程序5.2.5 lcd1602顯示子程序lcd子程序框圖: 設(shè)定lcd光標(biāo)顯示、關(guān)閉,判斷是否忙的函數(shù)完成顯示初始化lcd設(shè)定,調(diào)用來(lái)自其他子程序的數(shù)值第四行顯示狀態(tài)信息第三行顯示溫度第二行顯示時(shí)間及星期第一行顯示日期及平閏年圖5.2.5 lcd1602子程序流程圖5.3 控制源程序5.3.1 c語(yǔ)言程序ds18b20子程序:sbit dq = p33; / 定義dq引腳為p3.3/* 延時(shí)函數(shù) * 功能:在11.059mhz的晶振條件下調(diào)用本函數(shù)需要24s ,然后每次計(jì)數(shù)需16s */void ds18_delay(i

22、nt useconds) int s;for (s=0; suseconds;s+);/* 復(fù)位函數(shù) * 功能:完成單總線的復(fù)位操作。* 復(fù)位時(shí)間為480s,因此延時(shí)時(shí)間為(480-24)/16 = 28.5,取29s。* 經(jīng)過(guò)70s之后檢測(cè)存在脈沖,因此延時(shí)時(shí)間為(70-24)/16 = 2.875,取3s。*/unsigned char ow_reset(void) unsigned char presence;dq = 0; / 將 dq 線拉低ds18_delay(29); / 保持 480sdq = 1; / dq返回高電平ds18_delay(3); / 等待存在脈沖presenc

23、e = dq; / 獲得存在信號(hào)ds18_delay(25); / 等待時(shí)間隙結(jié)束return(presence); / 返回存在信號(hào),0 = 器件存在, 1 = 無(wú)器件/* 位寫入函數(shù) * 功能:向單總線寫入1位值:bitval*/void write_bit(char bitval) dq = 0; / 將dq 拉低開(kāi)始寫時(shí)間隙if(bitval=1) dq =1; / 如果寫1,dq 返回高電平ds18_delay(5); / 在時(shí)間隙內(nèi)保持電平值,dq = 1; / ds18_delay函數(shù)每次循環(huán)延時(shí)16s,因此ds18_delay(5) = 104s/* 字節(jié)寫入函數(shù) * 功能:向

24、單總線寫入一個(gè)字節(jié)值:val*/void ds18write_byte(char val) unsigned char i;unsigned char temp;for (i=0; ii; temp &= 0x01; write_bit(temp); ds18_delay(5);/* 位讀取函數(shù) * 功能:從單總線上讀取一位信號(hào),所需延時(shí)時(shí)間為15s,因此無(wú)法調(diào)用前面定義* 的ds18_delay()函數(shù),而采用一個(gè)for()循環(huán)來(lái)實(shí)現(xiàn)延時(shí)。* */unsigned char read_bit(void) unsigned char i;dq = 0; /將dq 拉低開(kāi)始讀時(shí)間隙dq = 1;

25、 / then return highfor (i=0; i3; i+); / 延時(shí)15sreturn(dq); / 返回 dq 線上的電平值/* 字節(jié)讀取函數(shù) * 功能:從單總線讀取一個(gè)字節(jié)的值*/unsigned char dsread_byte(void) unsigned char i;unsigned char value = 0;for (i=0;i8;i+) / 讀取字節(jié),每次讀取一個(gè)字節(jié)if(read_bit() value|=0x01i; / 然后將其左移ds18_delay(6); return(value);/* 讀取溫度函數(shù) * 功能:如果單總線節(jié)點(diǎn)上只有一個(gè)器件則可以

26、直接掉用本函數(shù)。如果節(jié)點(diǎn)上有多個(gè)器* 件,為了避免數(shù)據(jù)沖突,應(yīng)使用match rom函數(shù)來(lái)選中特定器件。* 注: 本函數(shù)是根據(jù)ds1820的溫度數(shù)據(jù)格式編寫的,若用于ds18b20,必須根據(jù)* ds18b20的溫度數(shù)據(jù)格式作適當(dāng)修改。*/unsigned int readtemperature(void) unsigned char get10;unsigned char temp_lsb,temp_msb;unsigned int t;unsigned char k;ow_reset();ds18write_byte(0xcc); / 跳過(guò) romds18write_byte(0x44);

27、/ 啟動(dòng)溫度轉(zhuǎn)換ds18_delay(5);ow_reset();ds18write_byte(0xcc); / 跳過(guò) romds18write_byte(0xbe); / 讀暫存器for (k=0;k2;k+)getk=dsread_byte();temp_msb = get1; / sign byte + lsbittemp_lsb = get0; / temp data plus lsbt=temp_msb*256+temp_lsb;t=t&0x0ff0;if(t0xf0)t=(-1)*t;return t4;/temp_f = (int)temp_c)* 9)/5 + 32; / 輸出

28、華氏溫度值lcd1602子程序#include#includeds18b20_3.h#define uint unsigned int#define uchar unsigned charuchar a,b,miao,shi,fen,ri,yue,nian,week,flag,key1n,temp,miao1,shi1=12,fen1=1,miao1=0,clock=0 ;/flag用于讀取頭文件中的溫度值,和顯示溫度值#define yh 0x80 /lcd第一行的初始位置,因?yàn)閘cd1602字符地址首位d7恒定為1(100000000=80)#define er 0x80+0x40 /lc

29、d第二行初始位置(因?yàn)榈诙械谝粋€(gè)字符位置地址是0x40)/液晶屏的與c51之間的引腳連接定義(顯示數(shù)據(jù)線接c51的p0口)sbit rs=p20;sbit en=p22;sbit rw=p21; /如果硬件上rw接地,就不用寫這句和后面的rw=0了sbit led=p26; /lcd背光開(kāi)關(guān)/ds1302時(shí)鐘芯片與c51之間的引腳連接定義sbit io=p11;sbit sclk=p10;sbit rst=p12;sbit clo=p14;sbit acc0=acc0;sbit acc7=acc7;/*acc累加器=aacc.0=e0h acc.0就是acc的第0位。acc可以位尋址。累加器

30、acc是一個(gè)8位的存儲(chǔ)單元,是用來(lái)放數(shù)據(jù)的。但是,這個(gè)存儲(chǔ)單元有其特殊的地位,是單片機(jī)中一個(gè)非常關(guān)鍵的單元,很多運(yùn)算都要通過(guò)acc來(lái)進(jìn)行。以后在學(xué)習(xí)指令時(shí),常用a來(lái)表示累加器。但有一些地方例外,比如在push指令中,就必須用acc這樣的名字。一般的說(shuō)法,a代表了累加器中的內(nèi)容、而acc代表的是累加器的地址。 */校時(shí)按鍵與c51的引腳連接定義sbit key1=p15; /設(shè)置鍵sbit key2=p16; /加鍵sbit key3=p17; /減鍵sbit buzzer=p13;/蜂鳴器,通過(guò)三極管9012驅(qū)動(dòng),端口低電平響/*/uchar code tab1=20 - - ; /年顯示的固

31、定字符uchar code tab2= : : ;/時(shí)間顯示的固定字符uchar code tab3= hello welcome;/開(kāi)機(jī)動(dòng)畫/延時(shí)函數(shù),后面經(jīng)常調(diào)用void delay(uint xms)/延時(shí)函數(shù),有參函數(shù)uint x,y;for(x=xms;x0;x-) for(y=110;y0;y-);void delay1ms(int i)/1毫秒延時(shí) int j,k; while(i-) for(j=76;j1;j-); for(k=29;k1;k-); /*液晶寫入指令函數(shù)與寫入數(shù)據(jù)函數(shù),以后可調(diào)用*/*在這個(gè)程序中,液晶寫入有關(guān)函數(shù)會(huì)在ds1302的函數(shù)中調(diào)用,所以液晶程序要放

32、在前面*/write_1602com(uchar com)/*液晶寫入指令函數(shù)*rs=0;/數(shù)據(jù)/指令選擇置為指令rw=0; /讀寫選擇置為寫p0=com;/送入數(shù)據(jù)delay(1);en=1;/拉高使能端,為制造有效的下降沿做準(zhǔn)備delay(1);en=0;/en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令write_1602dat(uchar dat)/*液晶寫入數(shù)據(jù)函數(shù)*rs=1;/數(shù)據(jù)/指令選擇置為數(shù)據(jù)rw=0; /讀寫選擇置為寫p0=dat;/送入數(shù)據(jù)delay(1);en=1; /en置高電平,為制造下降沿做準(zhǔn)備delay(1);en=0; /en由高變低,產(chǎn)生下降沿,液晶執(zhí)行命令lcd_i

33、nit()/*液晶初始化函數(shù)* uchar j; write_1602com(0x0f|0x08);for(a=0;a17;a+) write_1602dat(tab3a); j=17;while(j-)write_1602com(0x1c);/循環(huán)左移delay(700); write_1602com(0x01);delay(10);write_1602com(0x38);/設(shè)置液晶工作模式,意思:16*2行顯示,5*7點(diǎn)陣,8位數(shù)據(jù)write_1602com(0x0c);/開(kāi)顯示不顯示光標(biāo)write_1602com(0x06);/整屏不移動(dòng),光標(biāo)自動(dòng)右移write_1602com(0x01

34、);/清顯示/*開(kāi)機(jī)動(dòng)畫顯示hello welcome dianzizhong*/write_1602com(yh+1);/日歷顯示固定符號(hào)從第一行第1個(gè)位置之后開(kāi)始顯示for(a=0;a14;a+)write_1602dat(tab1a);/向液晶屏寫日歷顯示的固定符號(hào)部分/delay(3);write_1602com(er+2);/時(shí)間顯示固定符號(hào)寫入位置,從第2個(gè)位置后開(kāi)始顯示for(a=0;a0;a-)io=acc0;sclk=0;sclk=1;acc=acc1;uchar read_byte()/讀一個(gè)字節(jié)rst=1;for(a=8;a0;a-)acc7=io;sclk=1;sclk

35、=0;acc=acc1;return (acc);/-void write_1302(uchar add,uchar dat)/向1302芯片寫函數(shù),指定寫入地址,數(shù)據(jù)rst=0;sclk=0;rst=1;write_byte(add);write_byte(dat);sclk=1;rst=0;uchar read_1302(uchar add)/從1302讀數(shù)據(jù)函數(shù),指定讀取數(shù)據(jù)來(lái)源地址uchar temp;rst=0;sclk=0;rst=1;write_byte(add);temp=read_byte();sclk=1;rst=0;return(temp);uchar bcd_decim

36、al(uchar bcd)/bcd碼轉(zhuǎn)十進(jìn)制函數(shù),輸入bcd,返回十進(jìn)制 uchar decimal; decimal=bcd4; return(decimal=decimal*10+(bcd&=0x0f);/-void ds1302_init() /1302芯片初始化子函數(shù)(2010-01-07,12:00:00,week4)rst=0;sclk=0;write_1302(0x8e,0x00); /允許寫,禁止寫保護(hù) write_1302(0x80,0x00); /向ds1302內(nèi)寫秒寄存器80h寫入初始秒數(shù)據(jù)00write_1302(0x82,0x00);/向ds1302內(nèi)寫分寄存器82h

37、寫入初始分?jǐn)?shù)據(jù)00write_1302(0x84,0x12);/向ds1302內(nèi)寫小時(shí)寄存器84h寫入初始小時(shí)數(shù)據(jù)12write_1302(0x8a,0x01);/向ds1302內(nèi)寫周寄存器8ah寫入初始周數(shù)據(jù)4write_1302(0x86,0x08);/向ds1302內(nèi)寫日期寄存器86h寫入初始日期數(shù)據(jù)07write_1302(0x88,0x07);/向ds1302內(nèi)寫月份寄存器88h寫入初始月份數(shù)據(jù)01write_1302(0x8c,0x10);/向ds1302內(nèi)寫年份寄存器8ch寫入初始年份數(shù)據(jù)10write_1302(0x8e,0x80); /打開(kāi)寫保護(hù)/-/溫度顯示子函數(shù)void

38、write_temp(uchar add,uchar dat)/向lcd寫溫度數(shù)據(jù),并指定顯示位置uchar gw,sw,bw;if(dat=0&dat=128)gw=dat%10;/取得個(gè)位數(shù)字sw=dat%100/10;/取得十位數(shù)字bw=dat/100;/取得百位數(shù)字elsedat=256-dat;gw=dat%10;/取得個(gè)位數(shù)字sw=dat%100/10;/取得十位數(shù)字bw=-3; /0x30-3表示為負(fù)號(hào)write_1602com(er+add);/er是頭文件規(guī)定的值0x80+0x40write_1602dat(0x30+bw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼wri

39、te_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼 write_1602dat(0xdf);/顯示溫度的小圓圈符號(hào),0xdf是液晶屏字符庫(kù)的該符號(hào)地址碼 write_1602dat(0x43);/顯示c符號(hào),0x43是液晶屏字符庫(kù)里大寫c的地址碼/-/時(shí)分秒顯示子函數(shù)void write_sfm(uchar add,uchar dat)/向lcd寫時(shí)分秒,有顯示位置加、現(xiàn)示數(shù)據(jù),兩個(gè)參數(shù)uchar gw,sw;gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十

40、位數(shù)字write_1602com(er+add);/er是頭文件規(guī)定的值0x80+0x40write_1602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼/-/年月日顯示子函數(shù)void write_nyr(uchar add,uchar dat)/向lcd寫年月日,有顯示位置加數(shù)、顯示數(shù)據(jù),兩個(gè)參數(shù)uchar gw,sw;gw=dat%10;/取得個(gè)位數(shù)字sw=dat/10;/取得十位數(shù)字write_1602com(yh+add);/設(shè)定顯示位置為第一個(gè)位置+addwrite_1

41、602dat(0x30+sw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼write_1602dat(0x30+gw);/數(shù)字+30得到該數(shù)字的lcd1602顯示碼/-void write_week(uchar week)/寫星期函數(shù)write_1602com(yh+0x0c);/星期字符的顯示位置switch(week)case 1:write_1602dat(m);/星期數(shù)為1時(shí),顯示 write_1602dat(o); write_1602dat(n); break; case 2:write_1602dat(t);/星期數(shù)據(jù)為2時(shí)顯示 write_1602dat(u); write_

42、1602dat(e); break;case 3:write_1602dat(w);/星期數(shù)據(jù)為3時(shí)顯示 write_1602dat(e); write_1602dat(d); break;case 4:write_1602dat(t);/星期數(shù)據(jù)為4是顯示 write_1602dat(h); write_1602dat(u); break;case 5:write_1602dat(f);/星期數(shù)據(jù)為5時(shí)顯示 write_1602dat(r); write_1602dat(i); break;case 6:write_1602dat(s);/星期數(shù)據(jù)為6時(shí)顯示 write_1602dat(t)

43、; write_1602dat(a); break;case 7:write_1602dat(s);/星期數(shù)據(jù)為7時(shí)顯示 write_1602dat(u); write_1602dat(n); break;/*鍵盤掃描有關(guān)函數(shù)*void keyscan()if(key1=0)/-key1為功能鍵(設(shè)置鍵)-delay(9);/延時(shí),用于消抖動(dòng)if(key1=0)/延時(shí)后再次確認(rèn)按鍵按下 buzzer=0;/蜂鳴器短響一次 delay(20); buzzer=1;while(!key1);key1n+;if(key1n=12)key1n=1;/設(shè)置按鍵共有秒、分、時(shí)、星期、日、月、年、返回,8個(gè)

44、功能循環(huán)switch(key1n)case 1: tr0=0;/關(guān)閉定時(shí)器/tr1=0;write_1602com(er+0x09);/設(shè)置按鍵按動(dòng)一次,秒位置顯示光標(biāo) write_1602com(0x0f);/設(shè)置光標(biāo)為閃爍 temp=(miao)/10*16+(miao)%10;/秒數(shù)據(jù)寫入ds1302 write_1302(0x8e,0x00); write_1302(0x80,0x80|temp);/miao write_1302(0x8e,0x80); break;case 2: write_1602com(er+6);/按2次fen位置顯示光標(biāo) /write_1602com(0x0

45、f);break;case 3: write_1602com(er+3);/按動(dòng)3次,shi /write_1602com(0x0f);break;case 4: write_1602com(yh+0x0e);/按動(dòng)4次,week /write_1602com(0x0f);break;case 5: write_1602com(yh+0x0a);/按動(dòng)5次,ri /write_1602com(0x0f);break;case 6: write_1602com(yh+0x07);/按動(dòng)6次,yue /write_1602com(0x0f);break;case 7: write_1602com(yh+0x04);/按動(dòng)7次,nian /write_1602com(0x0f);b

溫馨提示

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