單片機課程設(shè)計(論文)數(shù)字溫度計設(shè)計_第1頁
單片機課程設(shè)計(論文)數(shù)字溫度計設(shè)計_第2頁
單片機課程設(shè)計(論文)數(shù)字溫度計設(shè)計_第3頁
單片機課程設(shè)計(論文)數(shù)字溫度計設(shè)計_第4頁
單片機課程設(shè)計(論文)數(shù)字溫度計設(shè)計_第5頁
已閱讀5頁,還剩34頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目 錄一 引言1二 硬件設(shè)計 2三 軟件設(shè)計 9四 調(diào)試過程及問題分析 12五 結(jié)論 13六 參考文獻 14附件1 15附件2 29一、引言隨著時代的進步和發(fā)展,單片機技術(shù)已經(jīng)普及到我們生活,工作,科研,各個領(lǐng)域,已經(jīng)成為一種比較成熟的技術(shù),當然,學習單片機的原理及應(yīng)用已經(jīng)成為我們電子類專業(yè)大學生所必須的課程。而本文所介紹的是一種基于單片機控制的數(shù)字溫度計。所采用的元器件db18b20與傳統(tǒng)的溫度計相比,具有讀數(shù)方便,測溫范圍廣,測溫精確,數(shù)字顯示,適用范圍寬等特點。更加增強了其實用性和操作性。lcd12864液晶顯示模塊是12864 點陣的漢字圖形型液晶顯示模塊,可顯示漢字及圖形,具有多種功

2、能:光標顯示、畫面移位、睡眠模式等。數(shù)字溫度計選用stc89c52rc型單片機作為作為其主控器件,dsl8b20作為測溫傳感器通過液晶顯示器lcd12864調(diào)用數(shù)據(jù),實現(xiàn)溫度顯示。通過dsl8b20直接讀取被測溫度值,進行數(shù)據(jù)轉(zhuǎn)換,該器件的物理化學性能穩(wěn)定,線性度較好,能夠快速精確的顯示數(shù)據(jù)。該器件可直接向單片機傳輸數(shù)字信號,便于單片機處理及控制。另外,該溫度計還能直接采用測溫器件測量溫度,從而簡化數(shù)據(jù)傳輸與處理過程。最終由lcd12864液晶顯示顯示出db18b20所測溫度。結(jié)果精確可調(diào)為0.5,分辨率為0.0625。二、硬件設(shè)計(一)、系統(tǒng)硬件設(shè)計方案根據(jù)系統(tǒng)功能要求,構(gòu)造如下圖所示的系統(tǒng)

3、原理結(jié)構(gòu)框圖。ds18b20溫度數(shù)據(jù)采集stc89cs52rc初始化lcd12864驅(qū)動顯示溫度圖1 系統(tǒng)原理結(jié)構(gòu)框圖1、 單片機的選擇stc89c52rc是新一代超強抗干擾/高速/低功耗的單片機,指令代碼完全兼容傳統(tǒng)8051單片機,12時鐘/機械周期和6時鐘/機械周期可以任意選擇,其內(nèi)核與at51系列單片機一樣,但是其造價較之更低,功能更強。at51單片機小系統(tǒng)的電路圖如下所示。單片機小系統(tǒng)電路1)、引腳說明stc89c52的內(nèi)核和at51系列單片機一樣,故引腳也相同:18:i/op1口(p1.0p1.7);9: 復位腳(rst/vpd);1017:i/op3口(p3.0=rxd,p3.1=

4、txd,p3.2=-int0,p3.3=-int1,p3.4=t0,p3.5=t1,p3.6=-wr,p3.7=-rd);18、19:晶振(18=xtal2,19=xtal1);20: 地(vss);2128:i/op2口(p2.0p2.7); 29:-psen;30:ale/-prog;31:-ea/vpp3239:i/op0口(p0.7p0.0);40:+5v電源。注:引腳功能前加“-”,說明其是低電平有效。如p3.2=-int0。2)、內(nèi)部功能1. i/o 口:輸入/ 輸出口經(jīng)過特殊處理,很多干擾是從i/o 進去的,每個i/o 均有對vcc/ 對gnd二級管箝位保護。2. 電源:單片機內(nèi)

5、部的電源供電系統(tǒng)經(jīng)過特殊處理,很多干擾是從電源進去的3. 時鐘單片機內(nèi)部的時鐘電路經(jīng)過特殊處理,很多干擾是從時鐘部分進去的4 . 空閑模式:典型功耗 2ma5.正常工作模式:典型功耗 4ma - 7ma單片機內(nèi)部的時鐘電路經(jīng)過特殊處理,很多干擾是從時鐘部分進去的6. 復位電路單片機內(nèi)部的復位電路經(jīng)過特殊處理,很多干擾是從復位電路部分進去的,stc89c51rc/rd+系列單片機為高電平復位。推薦外置復位電路為max810/stc810,stc6344,stc6345,813l,706p;也可用r/c 復位,10uf 電容/10k 電阻,22uf/8.2k 等。6.寬電壓,不怕電源抖動5v: 6

6、v - 3.4v 3v: 4v - 1.9v2、溫度傳感器介紹ds18b20溫度傳感器是美國dallas半導體公司最新推出的一種改進型智能溫度傳感器,與傳統(tǒng)的熱敏電阻等測溫元件相比,它能直接讀出被測溫度,并且可根據(jù)實際要求通過簡單的編程實現(xiàn)位的數(shù)字值讀數(shù)方式。ds18b20內(nèi)部結(jié)構(gòu)主要由四部分組成:64位光刻rom、溫度傳感器、非揮發(fā)的溫度報警觸發(fā)器th和tl、配置寄存器。ds18b20可以程序設(shè)定912位的分辨率,精度為0.5c。可選更小的封裝方式,更寬的電壓適用范圍。分辨率設(shè)定存儲在eprom中,掉電后依然保存。而在此,我們設(shè)定12為分辨率,即溫度分辨率0.0625。ds18b20的性能特

7、點如下:獨特的單線接口僅需要一個端口引腳進行通信;多個ds18b20可以并聯(lián)在惟一的三線上,實現(xiàn)多點組網(wǎng)功能;無須外部器件;可通過數(shù)據(jù)線供電,電壓范圍為3.05.5;零待機功耗;溫度以或位數(shù)字;用戶可定義報警設(shè)置;報警搜索命令識別并標志超過程序限定溫度(溫度報警條件)的器件;負電壓特性,電源極性接反時,溫度計不會因發(fā)熱而燒毀,但不能正常工作; ds18b20采用腳pr35封裝或腳soic封裝,其內(nèi)部結(jié)構(gòu)框圖如下圖所示。c64 位rom和單線接口高速緩存存儲器與控制邏輯溫度傳感器高溫觸發(fā)器th低溫觸發(fā)器tl配置寄存器8位crc發(fā)生器vddds18b20內(nèi)部結(jié)構(gòu)根據(jù)ds18b20的通訊協(xié)議,主機控

8、制ds18b20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:(1).初始化(2) 執(zhí)行某個rom指令(3) 執(zhí)行ram內(nèi)存指令(4) 數(shù)據(jù)傳輸復位要求主cpu將數(shù)據(jù)線下拉480微秒,然后釋放,ds18b20收到信號后等待1660微秒左右,后發(fā)出60240微秒的存在低脈沖,主cpu收到此信號表示復位成功。ds18b20與單片機的接口電路3、液晶顯示lcd12864液晶顯示模塊是12864 點陣的漢字圖形型液晶顯示模塊,可顯示漢字及圖形,內(nèi)置國標gb2312 碼簡體中文字庫(16x16 點陣)、128 個字符(8x16 點陣)及64x256 點陣顯示ram(gdram)??膳ccpu 直接接口,提供兩種界面來連接

9、微處理機:8-位并行及串行兩種連接方式。具有多種功能:光標顯示、畫面移位、睡眠模式等。硬件原理圖:1)、引腳說明管腳號管腳名稱lever管腳功能描述1vss0電源地2vdd+5.0v電源電壓3v0-液晶顯示器驅(qū)動電壓4d/i(rs)h/ld/i=“h”,表示db7db0為顯示數(shù)據(jù)d/i=“l(fā)”,表示db7db0為顯示指令數(shù)據(jù)5r/wh/lr/w=“h”,e=“h”數(shù)據(jù)被讀到db7db0r/w=“l(fā)”,e=“hl”數(shù)據(jù)被寫到ir或dr6eh/lr/w=“l(fā)”,e信號下降沿鎖存db7db0r/w=“h”,e=“h”ddram數(shù)據(jù)讀到db7db07db0h/l數(shù)據(jù)線8db1h/l數(shù)據(jù)線9db2h/l

10、數(shù)據(jù)線10db3h/l數(shù)據(jù)線11db4h/l數(shù)據(jù)線12db5h/l數(shù)據(jù)線13db6h/l數(shù)據(jù)線14db7h/l數(shù)據(jù)線15cs1h/lh:選擇芯片(右半屏)信號16cs2h/lh:選擇芯片(左半屏)信號17reth/l復位信號,低電平復位18vout-10vlcd驅(qū)動負電壓19led+-led背光板電源20led-led背光板電源2)、 內(nèi)部功能器件及相關(guān)功能1. 指令寄存器(ir) ir是用于寄存指令碼,與數(shù)據(jù)寄存器數(shù)據(jù)相對應(yīng)。當d/i=0時,在e信號下降沿的作用下,指令碼寫入ir。2數(shù)據(jù)寄存器(dr) dr是用于寄存數(shù)據(jù)的,與指令寄存器寄存指令相對應(yīng)。當d/i=1時,在下降沿作用下,圖形顯示

11、數(shù)據(jù)寫入dr,或在e信號高電平作用下由dr讀到db7db0數(shù)據(jù)總線。dr和ddram之間的數(shù)據(jù)傳輸是模塊內(nèi)部自動執(zhí)行的。3忙標志:bf bf標志提供內(nèi)部工作情況。bf=1表示模塊在內(nèi)部操作,此時模塊不接受外部指令和數(shù)據(jù)。bf=0時,模塊為準備狀態(tài),隨時可接受外部指令和數(shù)據(jù)。 利用status read指令,可以將bf讀到db7總線,從檢驗?zāi)K之工作狀態(tài)。4顯示控制觸發(fā)器dff 此觸發(fā)器是用于模塊屏幕顯示開和關(guān)的控制。dff=1為開顯示(display off),ddram的內(nèi)容就顯示在屏幕上,dff=0為關(guān)顯示(display off)。 ddf的狀態(tài)是指令display on/off和rst

12、信號控制的。5xy地址計數(shù)器 xy地址計數(shù)器是一個9位計數(shù)器。高3位是x地址計數(shù)器,低6位為y地址計數(shù)器,xy地址計數(shù)器實際上是作為ddram的地址指針,x地址計數(shù)器為ddram的頁指針,y地址計數(shù)器為ddram的y地址指針。 x地址計數(shù)器是沒有記數(shù)功能的,只能用指令設(shè)置。 y地址計數(shù)器具有循環(huán)記數(shù)功能,各顯示數(shù)據(jù)寫入后,y地址自動加1,y地址指針從0到63。6顯示數(shù)據(jù)ram(ddram) ddram是存儲圖形顯示數(shù)據(jù)的。數(shù)據(jù)為1表示顯示選擇,數(shù)據(jù)為0表示顯示非選擇。ddram與地址和顯示位置的關(guān)系見ddram地址表。7z地址計數(shù)器 z地址計數(shù)器是一個6位計數(shù)器,此計數(shù)器具備循環(huán)記數(shù)功能,它是

13、用于顯示行掃描同步。當一行掃描完成,此地址計數(shù)器自動加1,指向下一行掃描數(shù)據(jù),rst復位后z地址計數(shù)器為0。 z地址計數(shù)器可以用指令display start line預(yù)置。因此,顯示屏幕的起始行就由此指令控制,即ddram的數(shù)據(jù)從哪一行開始顯示在屏幕的第一行。此模塊的ddram共64行,屏幕可以循環(huán)滾動顯示64行。三、軟件設(shè)計(一)、設(shè)計題目及要求:1、基本要求設(shè)計指標:a. 測溫范圍:0100;b. 溫度分辨力:0.0625;c. 測量速率:2次/秒自動連續(xù)測量;d. 結(jié)果顯示方式:用圖形液晶lcd12864顯示當前溫度及與上一次溫度測量值差值。2、擴展要求用圖形液晶顯示溫度曲線。3、誤差

14、測試調(diào)試無誤后,可用水銀溫度計與其進行比對,記錄測量結(jié)果,進行誤差分析。(二)、整體思路根據(jù)要求,我們將整個程序分為三大部分。主要包括主程序,溫度傳感程序,lcd12864液晶顯示程序。(二)、程序流圖1、 ds18b20溫度計程序ds18b20溫度計程序包括讀出溫度子程序,溫度轉(zhuǎn)換命令子程序,計算溫度子程序。主程序的主要功能是負責溫度的實時顯示、讀出并處理ds18b20的測量溫度值,溫度測量每0.5s進行一次。讀出溫度子程序的主要功能是讀出ram中的字節(jié)。溫度轉(zhuǎn)換命令子程序主要是發(fā)溫度轉(zhuǎn)換開始命令,采用12位分辯率為0.065,在本程序設(shè)計中采用0.5s顯示程序延時法等待轉(zhuǎn)換的完成。 ds1

15、8b20溫度計程序流程圖如下:開始ds18b20的初始化啟動溫度轉(zhuǎn)換讀取溫度寄存器ds18b20的初始化復位(二)、lcd12864液晶顯示程序流程圖如下:(三)、主程序流圖開始初始化顯示開機畫面(b3組數(shù)字溫度計)循環(huán)溫度上電轉(zhuǎn)化一次(讀取溫度)溫度上電轉(zhuǎn)化一次(讀取溫度)溫度處理溫度處理調(diào)用液晶顯示程序顯示溫度(當前溫度)儲存此刻溫度b儲存此刻溫度a調(diào)用液晶顯示程序顯示溫度(之前溫度)if(ab)yn 溫度差d=b-a溫度差d=a-b處理溫度差顯示溫度差四、調(diào)試過程及問題分析我所設(shè)計的模塊為lcd12864液晶顯示模塊,由于之前所接觸的顯示器件都是數(shù)碼管顯示,對液晶顯示還是很陌生,所以在此

16、次設(shè)計中,我翻閱和產(chǎn)尋了很多資料,對其內(nèi)部結(jié)構(gòu)進行了解,對其功能不斷滲透,而老師在設(shè)計前也給了我們許多關(guān)于lcd12864的顯示源程序及調(diào)試程序,這對我們的設(shè)計起了很大幫助。但是在寫源程序的時候還是出了很多的問題。根據(jù)老師所給的綜合程序,我們進行了綜合分析,而我們的設(shè)計在液晶顯示上重點是要輸出漢字和相應(yīng)的溫度數(shù)值,綜合程序中有漢字輸出,我開始根據(jù)程序從取模程序中輸出所需漢字的字模,但是從液晶屏上卻總顯示的是亂碼,試了很多次,最后請教老師才知道,所給字碼的像素是不一樣的,所給綜合程序的discode是8*16像素的,而我從取模程序中取的字模是16*16像素的,后來,老師和我們分析了液晶屏顯示字碼

17、的基本原理,每一格通過為代碼顯示字模信息,后來,我又仔細分析和對比了綜合程序的字模和我的字模,找到了兩個解決方案,改代碼或者改像素。結(jié)果都如我愿,操作顯示正確。后來我在弄完時閑來無事又發(fā)現(xiàn)了一種方法可以用16*16的像素用8*16的discode顯示,我發(fā)現(xiàn),只要我所需要的字碼在相應(yīng)的小格里顯示輸出字碼即可,于是我把一個字分左、右兩部分分別顯示,輸出字碼結(jié)合,結(jié)果也正確,而在此次設(shè)計中,我們采取漢字的輸出方法也均用此方法。液晶顯示模塊的代碼在我們的整體設(shè)計中可以說是一塊比較簡單的部分,而重點就是db18b20的溫度模塊,這個模塊是我們組花比較多的時間完成的,db18b20對溫度的測量是在延時過

18、程中進行的,在溫度的轉(zhuǎn)化中設(shè)定0.5s的測溫速度,以12位的分辨率進行,這12位轉(zhuǎn)化后得到的12位數(shù)據(jù),存儲在18b20的兩個8比特的ram中,只要將測到的數(shù)值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數(shù)值需要取反加1再乘于0.0625即可得到實際溫度。溫度主函數(shù)輸出溫度。而整體的主函數(shù)調(diào)用溫度顯示溫度是我們整個設(shè)計的一個大問題,試了許多次,總是達不到所期待的結(jié)果,最后,老師告訴我們,在軟件中仿真,一點點的找根源,進入程序內(nèi)部,分析,一點點的排除。最終,我們發(fā)現(xiàn)了問題所在,原來是溫度轉(zhuǎn)換出了問題,在溫度輸出的16位字節(jié)的高八位 和低八位的輸出轉(zhuǎn)換有誤,修改后輸出正確。

19、五、結(jié)論在這一學期的單片機課程中,文老師給我們講了許多單片機的內(nèi)部結(jié)構(gòu),編譯語言,一直在朦朦朧朧的學習,模模糊糊的接受,即使到了考試的時候,我甚至感覺自己對單片機還是那么陌生。兩周的課程實習,不長不短,但是又不可或缺,它似乎是對一學期的課程的潤色,把抽象變?yōu)樾蜗?,讓我們突然跳出理論,開始實踐,當然是理論結(jié)合實踐,真正在做得時候,才發(fā)現(xiàn)之前學的那么少,進行課程實習的時候,我看了很多關(guān)于單片機,溫度傳感器,液晶顯示器的資料和相應(yīng)的程序代碼,越看越不懂,但是越看就越想看,就感覺看到一個不懂的,去找答案,于是就剎不住車了,一個套著一個,但是雖然模糊,但是卻越想看,又一次,我看的最晚的一次是從下午一直到

20、晚上3點多,一直沒有看表也沒有注意時間,那次我才發(fā)現(xiàn)知識那么可貴,不能說自己看懂,但是那種被知識灌輸?shù)母杏X讓我很舒服。對于此次的課程實習,我也總結(jié)了很多我認為適合我們,起碼適合我自己的一些方法。一、 要對硬件功能了解,要熟悉相應(yīng)程序代碼和功能實現(xiàn),二、 設(shè)計程序要有思路,根據(jù)思路才能有效進行三、 編寫程序要有所根據(jù),出現(xiàn)錯誤很正常,要一步步的排查錯誤,一定要細心耐心四、 要懂得聽取正確意見,多和人交流,集思廣益,合作的力量是無窮大的。五、 向別人講解程序時,流程圖是最好的展示。而我們小組正是在不斷的合作中在兩次的課題中都順利完成。當然在此感謝各位指導老師這幾周里對我們的幫助和指導。參考文獻1楊

21、恢先,黃輝先.單片機原理及應(yīng)用(第一版) m.北京:人民郵電出版社,2006:214-221.2馬忠梅.單片機c語言程序設(shè)計 m.北京:北航出版社,2007:36-48.3 田立,田清,代方震. 51單片機c語言程序設(shè)計快速入門(第一版) m.北京:人民郵電出版社,2007:35-40.附件1:源程序代碼/=/ lcd12864 液晶顯示/=#include #include #define uchar unsigned char#define uint unsigned int#define ulong unsigned long/=引腳定義=sbit lck = p35;/鎖存信號sbit

22、 dq =p14;/18b20數(shù)據(jù)線引腳/=常用命令及參數(shù)定義=#define dispon 0x3f#define dispoff 0x3e#define dispfirst 0xc0#define setx 0x40#define sety 0xb8#define lcdbuzy 0x80#define l 0x00#define r 0x40#define limit 0x80#define line 16 / 設(shè)置最多一行可以顯示多少字符(116)/=全局變量=code uchar pixel8=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80;uchar

23、 tempdisdata=0x00,0x00,0x00;uchar cbyte;uint i,j,temp;uchar data statu;uchar dispbuf8; /顯示緩沖區(qū) uchar temper2;/存放溫度的數(shù)組 bit xy; / the position variableuchar charnum=1; /this named charnum variable recorded the char position,the whole screen can write 56 characters/one line can be written 14 characters

24、/=漢字序列定義#define hz_zhi +1#define hz_dang +3#define hz_qian +5#define hz_wen +7#define hz_du +9#define hz_b +11#define hz_c +12#define hz_cha +14#define hz_bb +16#define hz_3 +17#define hz_zu +18#define hz_shu +20#define hz_zi+22#define hz_ji +24#define hz_kongge +26/=函數(shù)聲明=void wrl(uchar x);void wrr(

25、uchar x);void lcmcls(void);void delay1s(void);void lcminit (void);void putpicture(uchar flag);void delay(unsigned int time);void vtoh8x16change(uchar *hzbuf);void puthalf(uchar *strch,uchar row,uchar col);void wrdata(uchar x,uchar row,uchar col);void locatexy(uchar row,uchar col);void vwrite8x16char

26、acter(uchar *ch,uchar row,uchar col,bit flag);void vwrite8x16string(uchar *str,uchar col, uchar row, bit flag);extern uchar code char_table9516;/=/ usage: print the character in format/=void printc(uint chr) uchar lie,hang; hang=(charnum-1)/line; hang=hang*2; lie=(charnum-1)%line; lie=8*lie; vwrite8

27、x16character(char_tablechr- ,hang,lie,0); charnum+; /=/ name : prints(uchar *str)/ usage: print a stream in format /=void prints(uchar *str) while(*(str)!=0 ) / 一些格式的處理 if(*(str)=n ) /回車處理 charnum=(charnum+15)/16; charnum=charnum*16+1; str+; if(*(str)=0 ) return; if(*(str)=r ) /跳到所在行的行頭 charnum=(cha

28、rnum+15)/16; charnum=(charnum)*16-15; str+; if(*(str)=0 ) return; printc(*(str); str+; /=/ name : format(uchar *str)/ usage: this function is printing some format/ 格式化顯示字符串 /=void format(uchar *str ) if(*(str)=n ) /回車處理 charnum=(charnum+15)/16; charnum=charnum*16+1; return; if(*(str)=r ) /回到本行頭 char

29、num=(charnum+15)/16; charnum=charnum*16-15; return; if(*(str)=p ) /回到上一行頭 charnum=(charnum+15)/16; charnum=charnum*16-31; return; if(*(str)=b ) /退格,并刪除 charnum-; prints( ); charnum-; return; /*延時函數(shù)*/void delay (unsigned int us) while(us-);void reset(void) /復位 uchar x=0; dq = 1; delay(8); /稍做延時 dq =

30、0; delay(80); /精確延時 大于 480us dq = 1; /拉高總線 delay(14); x=dq; delay(20);void wr_temp(uchar dat)/寫1個字節(jié)bit testb;for(j=8;j0;j-)testb=dat&0x01;dat=dat1;if(testb)/寫1dq=0;/拉低總線,產(chǎn)生寫時間隙i+;/延時大于1usdq=1;/拉高總線i=8;while(i0)i-;/延時至少60us,供ds18b20采樣else /寫0dq=0;/拉低總線,產(chǎn)生寫時間隙i=8;while(i0)i-;/保持至少60us,供ds18b20采樣dq=1;/

31、拉高總線i+;i+;uchar rd_temp()/讀1個字節(jié)bit b;/定義存放接收到的1個字節(jié)uchar i_b;uchar rdbyte;for(j=8;j0;j-)dq=0;/拉低總線,產(chǎn)生讀時隙i+;/延時大于1usdq=1;/釋放總線i+;i+;/給一定時間讓總線釋放b=dq;/讀取數(shù)據(jù)i=8;while(i0)i-;/延時至少60usi_b=b;rdbyte=(i_b1);/將讀取到得一位值左移7位,存放讀取的數(shù)據(jù)變量rdbyte右移1位return rdbyte;/*cpu讀取溫度值*/void readtemp(void) /讀取溫度 float backbit; ucha

32、r a=0,b=0; reset();wr_temp(0xcc);/跳過romwr_temp(0x44);/開始溫度轉(zhuǎn)換reset();wr_temp(0xcc);/跳過romwr_temp(0xbe);/讀暫存器 a= rd_temp(); /低位 b= rd_temp(); /高位 temp=b;tempb) d=c-b;else d=b-c;tempdisdata0=d/100;tempdisdata1=d%100/10;/顯示數(shù)據(jù):個位tempdisdata2=d%10; /顯示數(shù)據(jù):十分位 printc(tempdisdata0+0 ); printc(tempdisdata1+0

33、); printc(hz_b ); /輸出一個漢字需要兩個字節(jié) printc(tempdisdata2+0 ); printc(hz_c ); /輸出一個漢字需要兩個字節(jié) printc(hz_c+1 ); delay1s(); delay1s(); delay1s();/*約1s延時*/void delay1s(void) delay(50000); delay(50000);/*初始化lcd*/void lcminit (void) cbyte=dispoff; wrl(cbyte); wrr(cbyte); cbyte=dispon; wrl(cbyte); wrr(cbyte); cby

34、te=dispfirst; wrl(cbyte); wrr(cbyte); lcmcls(); locatexy(0,0);/*lcd清屏*/void lcmcls(void) uchar i,j; for(i=0;i8;i+) delay(6); for(j=0;jlimit;j+) delay(6); wrdata(0x0,i,j); /*寫左區(qū)*/void wrl(uchar x) p0=0xff;/p0口送ff,準備讀 lck = 0; p1 = 0x2a;/elcd=1/w=1(讀),csb=1,csa=0 lck = 1; while(p0 & lcdbuzy);/最高位為1,表示

35、忙,則循環(huán) lck = 0; p1 = 0x00;/elcd=0,r/w=0(讀),csb=0,csa=0 lck = 1; p0 = x; /數(shù)據(jù)送到p0口 lck = 0; p1 = 0x22;/elcd=1,rw = 0(寫),csb=1,csa=0 lck = 1; lck = 0; p1 = 0x00;/elcd=0,rw = 0(寫),csb=0,csa=0 lck = 1;/*寫右區(qū)*/void wrr(uchar data x) p0=0xff;/p0口送ff,準備讀 lck = 0; p1 = 0x29;/elcd=1,r/w=1(讀),csb=0,csa=1 lck = 1

36、; while(p0 & lcdbuzy);/最高位為1,表示忙,則循環(huán) lck = 0; p1 = 0x00;/elcd=0,r/w=0(讀),csb=0,csa=1 lck = 1; p0=x; /數(shù)據(jù)送到p0口 lck = 0; p1 = 0x21;/elcd=1,rw = 0(寫),csb=0,csa=1 lck = 1; lck = 0; p1 = 0x00;/elcd=0,rw = 0(寫),csb=0,csa=0 lck = 1; /*定位*/void locatexy(uchar row,uchar col) uchar x, y, right; switch(col&0xc0

37、) case 0: p0=0xff;/p0口送ff,準備讀 lck = 0; p1 = 0x29;/elcd=1,r/w=1(讀),csb=0,csa=1 lck = 1; while(p0 & lcdbuzy);/最高位為1,表示忙,則循環(huán) lck = 0; p1 = 0x00; lck = 1; right = 1;break;/置右半屏標志 case 0x40: p0=0xff;/p0口送ff,準備讀 lck = 0; p1 = 0x2a;/elcd=1,r/w=1(讀),csb=1,csa=0 lck = 1; while(p0 & lcdbuzy);/最高位為1,表示忙,則循環(huán) lck = 0; p1 = 0x00;/elcd=0,r/w=0(讀)csb=0,csa=0 lck = 1; right = 0;break;/置左半屏標志 x=col&0x

溫馨提示

  • 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

提交評論