電氣應(yīng)用系統(tǒng)設(shè)計(jì)報(bào)告--lcd顯示系統(tǒng)_第1頁(yè)
已閱讀1頁(yè),還剩76頁(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、<p><b>  目 錄</b></p><p><b>  1 前 言2</b></p><p><b>  2總體方案設(shè)計(jì)3</b></p><p><b>  2.1方案討論4</b></p><p>  2.2硬件方案確定6&

2、lt;/p><p><b>  3單元模塊設(shè)計(jì)7</b></p><p>  3.1 單片機(jī)最小系統(tǒng)7</p><p>  3.1.1復(fù)位電路7</p><p>  3.1.2時(shí)鐘電路8</p><p>  3.2 RS232串口數(shù)據(jù)輸入9</p><p>  3.

3、3 USB供電電路9</p><p>  3.4 按鍵輸入電路10</p><p>  3.5 液晶顯示電路11</p><p>  3.5.1 引腳功能介紹11</p><p>  3.5.2訪問(wèn)方式12</p><p>  3.5.3接口時(shí)序說(shuō)明13</p><p>  4

4、系統(tǒng)軟件設(shè)計(jì)15</p><p>  4.1系統(tǒng)流程圖15</p><p>  4.2多級(jí)菜單軟件方案16</p><p>  4.3 設(shè)計(jì)軟件簡(jiǎn)介18</p><p>  4.4漢字和圖形字模提取19</p><p>  4.4.1 取模軟件介紹19</p><p>  4.4.2

5、 液晶模塊顯示漢字方法20</p><p>  4.5 漢字圖形顯示函數(shù)21</p><p>  4.6按鍵檢測(cè)程序24</p><p>  4.7主程序流程24</p><p><b>  5系統(tǒng)調(diào)試26</b></p><p>  5.1單片機(jī)最小系統(tǒng)的調(diào)試26</p>

6、;<p>  5.2液晶顯示器的調(diào)試26</p><p>  5.3鍵盤的調(diào)試26</p><p>  5.4整體調(diào)試26</p><p>  6系統(tǒng)功能、指標(biāo)參數(shù)27</p><p>  6.1說(shuō)明系統(tǒng)能實(shí)現(xiàn)的功能27</p><p>  6.2 指標(biāo)參數(shù)28</p><

7、p><b>  7結(jié)論29</b></p><p><b>  8總結(jié)與體會(huì)30</b></p><p><b>  9 參考文獻(xiàn)31</b></p><p><b>  附錄132</b></p><p><b>  原理圖32

8、</b></p><p><b>  實(shí)物圖33</b></p><p>  附錄2:元器件清單表34</p><p>  附錄3 :部分程序代碼35</p><p><b>  1 前 言</b></p><p>  當(dāng)今是一個(gè)信息化的時(shí)代,信息的重要性是

9、不言而喻的,獲取手段顯得尤其重要。人們所接受的信息有70%來(lái)自于人的視覺(jué),無(wú)論用何種方式獲取的信息最終需要有某種顯示方式來(lái)表示。在各種顯示技術(shù)中,以液晶顯示器LCD(Liquid Crystal Display)為代表的平板顯示器發(fā)展最快、應(yīng)用最廣。LCD是典型的光電器件,它以材料科學(xué)為基礎(chǔ),綜合利用了精密機(jī)械、光電及計(jì)算機(jī)技術(shù),并正在微機(jī)械、微光學(xué)、纖維光學(xué)等前沿領(lǐng)域研究基礎(chǔ)上,向高集成化、智能化方向發(fā)展。</p>&l

10、t;p>  液晶顯示模塊(LCM即Liquid Crystal Display Module)是將液晶顯示器件(LCD)、連接件、控制、驅(qū)動(dòng)電路和PCB電路板、背光源、結(jié)構(gòu)件裝配在一起的組件。由于點(diǎn)陣型液晶顯示器的引線眾多,用戶使用極不方便,所以制造商將點(diǎn)陣型液晶顯示器件和驅(qū)動(dòng)器做在一塊板子上成套出售,這種產(chǎn)品稱為液晶顯示模塊或模組。</p><p>  液晶顯示技術(shù)的普及應(yīng)用和發(fā)展,給儀器、設(shè)備的小型化及

11、智能化帶來(lái)了光輝的前景,特別是點(diǎn)陣圖形式液晶顯示模塊,它具有體積小、重量輕、低電壓、底功耗之優(yōu)點(diǎn),因而在顯示內(nèi)容和顯示功能等方面表現(xiàn)出了獨(dú)特的性能。由于液晶顯示器已成為日常工作和生活中各種顯示儀器、儀表、和袖珍電子產(chǎn)品的重要組成部分,因此對(duì)于點(diǎn)陣圖形液晶顯示器件(模塊)的開(kāi)發(fā)、設(shè)計(jì)、應(yīng)用和研究具有重要意義。該設(shè)計(jì)是基于LCD的廣泛應(yīng)用,用STC12C5A60S2為控制中心,以鍵盤為輸入設(shè)備,用LCD為顯示器,實(shí)現(xiàn)了漢字和圖片的顯示以及播

12、放音樂(lè)等功能。</p><p><b>  2總體方案設(shè)計(jì)</b></p><p><b>  圖2.1</b></p><p><b>  2.1方案討論</b></p><p>  方案一:采用數(shù)碼管顯示</p><p>  數(shù)碼管具有發(fā)光強(qiáng)、可視性

13、好和成本低等優(yōu)點(diǎn),在儀器儀表的輸入輸出人機(jī)交互設(shè)備中經(jīng)常用作顯示器件。數(shù)碼管顯示電路較為簡(jiǎn)單,但是當(dāng)儀器要顯示的內(nèi)容較多的時(shí)候,就需要采用一定的驅(qū)動(dòng)電路墻壁開(kāi)關(guān)。開(kāi)關(guān)廠家生產(chǎn)的開(kāi)關(guān)掃描的頻率必須合適才能到達(dá)很好的效果,如果掃描頻率太小,則每個(gè)數(shù)碼管開(kāi)啟和關(guān)斷的時(shí)間間隔就會(huì)大于人眼的視覺(jué)暫停時(shí)間,那么就會(huì)產(chǎn)生閃爍現(xiàn)象。而掃描頻率太大會(huì)造成數(shù)碼管的頻繁開(kāi)啟和關(guān)斷,將增加數(shù)碼管的功耗。并且顯示過(guò)于單調(diào),效果不夠理想。</p>&

14、lt;p><b>  圖2.2</b></p><p>  方案二:采用液晶顯示</p><p>  液晶具有體積小、重量輕、省電、輻射低的特點(diǎn)。其接口方式靈活,操作指令簡(jiǎn)單、方便,可構(gòu)成全中文人機(jī)交互圖形界面??梢燥@示8×4 行16×16 點(diǎn) 陣的漢字. 也可完成圖形顯示.低電壓低功耗是其又一顯著特點(diǎn)。由該模塊構(gòu)成的液晶顯示方案與同類型的圖

15、形點(diǎn)陣顯示模塊相比,不論硬件電路結(jié)構(gòu)或顯示程序都要簡(jiǎn)潔得多,性價(jià)比更高。</p><p><b>  圖2.3</b></p><p>  方案三:采用TFT顯示</p><p>  TFT是在玻璃或塑料基板等非單晶片上(當(dāng)然也可以在晶片上)通過(guò)濺射、化學(xué)沉積工藝形成制造電路必需的各種膜,通過(guò)對(duì)膜的加工制作大規(guī)模半導(dǎo)體集成電路(LSIC)。TF

16、T液晶顯示屏的特點(diǎn)是亮度好、對(duì)比度高、層次感強(qiáng)、顏色鮮艷,但也存在著比較耗電和成本過(guò)高的不足。</p><p><b>  圖2.4</b></p><p><b>  2.2硬件方案確定</b></p><p>  通過(guò)以上三種方案的比較,方案二利用了液晶性價(jià)比高,顯示效果良好的特點(diǎn)。因此,我們選用方案二,達(dá)到了設(shè)計(jì)的目

17、的。</p><p><b>  3單元模塊設(shè)計(jì)</b></p><p>  3.1 單片機(jī)最小系統(tǒng)</p><p>  單片機(jī)最小系統(tǒng),或者稱為單片機(jī)最小應(yīng)用系統(tǒng),是指用最少的元件組成的單片</p><p>  機(jī)。對(duì)于51單片機(jī)來(lái)說(shuō),最小系統(tǒng)一般應(yīng)該包括:?jiǎn)纹瑱C(jī)、晶振電路、復(fù)位電路等。有時(shí)也將顯示輸出歸于單片機(jī)最小系

18、統(tǒng)中。</p><p>  圖3.1 單片機(jī)最小系統(tǒng)</p><p><b>  3.1.1復(fù)位電路</b></p><p>  無(wú)論是在單片機(jī)剛開(kāi)始接上電源時(shí),還是運(yùn)行過(guò)程中發(fā)生故障都需要復(fù)位。復(fù)位電路用于將單片機(jī)內(nèi)部各電路的狀態(tài)恢復(fù)到一個(gè)確定的初始值,并從這個(gè)狀態(tài)開(kāi)始工作。</p><p>  單片機(jī)的復(fù)位條件:必須

19、使其RST引腳上持續(xù)出現(xiàn)兩個(gè)(或以上)機(jī)器周期的高電平。</p><p>  單片機(jī)的復(fù)位形式:上電復(fù)位,在系統(tǒng)一上電時(shí)利用電容兩端電壓不能突變的原理給系統(tǒng)一個(gè)短時(shí)的低電平;手動(dòng)復(fù)位,通過(guò)按鈕接通低電平給系統(tǒng)復(fù)位,這時(shí)如果手按著一直不放,系統(tǒng)將一直復(fù)位,不能正常工作。</p><p>  圖3.2 復(fù)位電路</p><p><b>  3.1.2時(shí)鐘電路

20、</b></p><p>  單片機(jī)工作時(shí),從取指令到譯碼再進(jìn)行微操作,必須在時(shí)鐘信號(hào)控制下才能有序地進(jìn)行,時(shí)鐘電路就是為單片機(jī)工作提供基本時(shí)鐘的。單片機(jī)的時(shí)鐘信號(hào)通常有兩種產(chǎn)生</p><p>  方式:內(nèi)部時(shí)鐘方式和外部時(shí)鐘方式。 內(nèi)部時(shí)鐘方式的原理電路如圖3.3所示。在單片機(jī)XTAL1和XTAL2引腳上跨接上一個(gè)晶振和兩個(gè)穩(wěn)頻電容,可以與單片機(jī)片內(nèi)的電路構(gòu)成一個(gè)

21、穩(wěn)定的自激振蕩器。晶振的取值范圍一般為0~24MHz,常用的晶振頻率有6MHz、12 MHz、11.0592 MHz、24 MHz等。一些新型的單片機(jī)還可以選擇更高的頻率。外接電容的作用是對(duì)振蕩器進(jìn)行頻率微調(diào),使振蕩信號(hào)頻率與晶振頻率一致,同時(shí)起到穩(wěn)定頻率的作用,一般選用20~30pF的瓷片電容。 外部時(shí)鐘方式則是在單片機(jī)XTAL1引腳上外接一個(gè)穩(wěn)定的時(shí)鐘信號(hào)源,它一般適用于多片單片機(jī)同時(shí)工作的情況,使用同一時(shí)鐘信號(hào)可以保證單片機(jī)

22、的工作同步。</p><p>  圖3.3 時(shí)鐘電路</p><p>  3.2 RS232串口數(shù)據(jù)輸入</p><p>  RS-232簡(jiǎn)介:在串行通訊時(shí),要求通訊雙方都采用一個(gè)標(biāo)準(zhǔn)接口,使不同的設(shè)備可以方便地連接起來(lái)進(jìn)行通訊.RS-232-C接口(又稱EIA RS-232-C)是目前最常用的一種串行通訊接口. ("RS-232-C"中的&

23、quot;-C"只不過(guò)表示RS-232的版本,所以與"RS-232"簡(jiǎn)稱是一樣的)它是在1970年由美國(guó)電子工業(yè)協(xié)會(huì)(EIA)聯(lián)合貝爾系統(tǒng),調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn).它的全名是"數(shù)據(jù)終端設(shè)備(DTE)和數(shù)據(jù)通訊設(shè)備(DCE)之間串行二進(jìn)制數(shù)據(jù)交換接口技術(shù)標(biāo)準(zhǔn)"該標(biāo)準(zhǔn)規(guī)定采用一個(gè)25個(gè)腳的DB-25連接器,對(duì)連接器的每個(gè)引腳的信號(hào)內(nèi)容加以規(guī)定,還對(duì)各種

24、信號(hào)的電平加以規(guī)定.后來(lái)IBM的PC機(jī)將RS232簡(jiǎn)化成了DB-9連接器,從而成為事實(shí)標(biāo)準(zhǔn).而工業(yè)控制的RS-232口一般只使用RXD,TXD,GND三條線.</p><p>  圖3.4 232串口電路</p><p>  MAX232芯片RS232通訊接口可以做為與計(jì)算機(jī)通迅的接口同時(shí)也可做為STC單片機(jī)下載程序的接口及仿真調(diào)試的接口,便于將我們所編寫的程序?qū)懭雴纹瑱C(jī)中。</p

25、><p>  3.3 USB供電電路</p><p>  USB供電系統(tǒng),可直接插接到電腦USB口即可提供電源,不需另接直流電源。為了輸出穩(wěn)定的電壓,我們?cè)赨SB口加了一個(gè)穩(wěn)壓二極管,和一個(gè)的100uf的電容。同時(shí),接了一個(gè)LED燈,清晰顯示電源的輸入與否。</p><p>  圖3.5 電源電路</p><p>  3.4 按鍵輸入電路&

26、lt;/p><p>  圖3.6 按鍵輸入電路</p><p>  我們采用的是掃描按鍵矩陣,這種按鍵輸入方式很巧妙地利用了IO 資源,使得8 個(gè)IO 可以實(shí)現(xiàn)16 鍵鍵盤。這種按鍵輸入方式比直接按鍵方式從原理與控制上都比直接按鍵要復(fù)雜。但由于單片機(jī)IO 讀取電平狀態(tài)的時(shí)候,讀取低電平比高電平要穩(wěn)定。因此,我們選用掃描按鍵矩陣原理來(lái)使外部中斷以低電平或下降沿來(lái)作為其中斷觸發(fā)條件,以保證中斷的

27、可靠性。</p><p>  3.5 液晶顯示電路</p><p>  液晶顯示器件(LCD)獨(dú)具的低壓、微功耗特性使他在單片機(jī)系統(tǒng)中特得到了廣泛的應(yīng)用,常用的液晶顯示模塊分為數(shù)顯液晶模塊、點(diǎn)陣字符液晶模塊和點(diǎn)陣圖形液晶模塊,其中圖形液晶模塊在我國(guó)應(yīng)用較為廣泛,因?yàn)闈h字不能象西文字符那樣用字符模塊即可顯示,要想顯示漢字必須用圖形模塊。因此LCD我們選擇的是12864的漢字圖形型液晶顯示模塊

28、,可顯示漢字及圖形.</p><p>  3.5.1 引腳功能介紹</p><p>  本次課程設(shè)計(jì),我們選用的是DM12864J-1液晶顯示屏,共有20個(gè)引腳,具體功能如下表所示:</p><p>  表3.1 12864 接口說(shuō)明表</p><p><b>  3.5.2訪問(wèn)方式</b></p>&

29、lt;p>  12864液晶顯示屏有兩種訪問(wèn)方式即直接訪問(wèn)方式和間接訪問(wèn)方式。所謂直接訪問(wèn)方式就是將液晶顯示模塊的接口作為存儲(chǔ)器或I/O設(shè)備直接掛在單片機(jī)總線上,單片機(jī)以訪問(wèn)存儲(chǔ)器或I/O設(shè)備的方式操作液晶顯示模塊工作。</p><p>  間接訪問(wèn)方式是計(jì)算機(jī)通過(guò)自身的或系統(tǒng)中的并行接口與液晶顯示模塊連接,如單片機(jī)的P1和P3口。計(jì)算機(jī)通過(guò)對(duì)這些接口的操作,達(dá)到對(duì)液晶顯示模塊的控制。這種方式的特點(diǎn)是電路簡(jiǎn)

30、單,控制時(shí)序由軟件實(shí)現(xiàn),可以實(shí)現(xiàn)高速計(jì)算機(jī)與液晶顯示模塊的接口。</p><p>  在本次課程設(shè)計(jì)中,我們選用間接訪問(wèn)方式。用單片機(jī)的P1口作為DB0—DB7并行數(shù)據(jù)輸出,P2口作為控制引腳,分別控制其讀寫使能、復(fù)位信號(hào)、數(shù)據(jù)\指令選擇、讀\寫選擇等功能。間接訪問(wèn)方式的接口實(shí)用電路如下圖所示。</p><p>  圖3.7 間接訪問(wèn)電路</p><p>  3.5

31、.3接口時(shí)序說(shuō)明</p><p> ?。?) 讀操作時(shí)序 如圖3.8所示。</p><p>  圖3.8 讀操作時(shí)序</p><p>  (2) 寫操作時(shí)序 </p><p>  圖3.9 寫操作時(shí)序</p><p>  時(shí)序參數(shù) 如表3.2所示。</p><p><b>  表3

32、.2 時(shí)序表</b></p><p>  向LCD寫漢字,必須先初始化LCD:開(kāi)顯示、清屏 </p><p>  設(shè)定開(kāi)始頁(yè)地址和列地址</p><p>  設(shè)定讀寫模式,進(jìn)行讀寫操作</p><p><b>  4 系統(tǒng)軟件設(shè)計(jì)</b></p><p>  4.1 系統(tǒng)流程圖

33、</p><p><b>  圖4.1系統(tǒng)流程圖</b></p><p>  4.2多級(jí)菜單軟件方案</p><p><b>  1方法一</b></p><p>  第一種方法是采用循環(huán)方式,總體思路是把每一級(jí)菜單定義為一個(gè)菜單數(shù)數(shù)組,數(shù)組中每個(gè)個(gè)元素代表此級(jí)菜單的各菜單項(xiàng)。例如:</p&g

34、t;<p>  定義為一個(gè)菜單數(shù)組, 數(shù)組中元素代表此級(jí)菜單的各菜</p><p>  圖4.2 方案一流程圖</p><p><b>  2方法二</b></p><p>  方法2采用查詢的思想。整個(gè)菜單呈樹形的拓?fù)浣Y(jié)構(gòu),每個(gè)節(jié)點(diǎn)的父節(jié)點(diǎn)都是唯一的,由此可以確定其在菜單樹總的位置。方法2的主要思路是應(yīng)用C語(yǔ)言中的結(jié)構(gòu)體數(shù)組,即

35、在一個(gè)結(jié)構(gòu)體變量中存放若干組數(shù)據(jù),而每一個(gè)數(shù)組元素,都是一個(gè)結(jié)構(gòu)體類型的數(shù)據(jù),他們都分別包括各個(gè)成員項(xiàng)。</p><p>  圖4.3 方案二流程圖</p><p>  綜合比較兩種方法,都能具有穩(wěn)定的設(shè)計(jì)性能和很強(qiáng)的使用價(jià)值,方法一比較簡(jiǎn)單,但是不方便擴(kuò)展功能,方法二的程序通用性強(qiáng),易于擴(kuò)展和維護(hù),適用于有較復(fù)雜的菜單系統(tǒng),因此我們選擇了方法二來(lái)實(shí)現(xiàn)多級(jí)菜單的軟件實(shí)現(xiàn)方法。</p&

36、gt;<p>  4.3 設(shè)計(jì)軟件簡(jiǎn)介</p><p>  在系統(tǒng)的軟件設(shè)計(jì)中,借助了各種輔助軟件。通過(guò)Protel畫出系統(tǒng)原理圖,在Keil軟件中編寫調(diào)試程序,通過(guò)Proteus軟件仿真確認(rèn)設(shè)計(jì)的科學(xué)性和可能,共同完成了設(shè)計(jì)制作。</p><p>  Proteus軟件簡(jiǎn)介:Proteus軟件具有其它EDA工具軟件的功能。在Proteus中,可以畫電路原理圖,可采用PCB自

37、動(dòng)或人工自動(dòng),有SPICE電路仿真的功能。用戶甚至可以實(shí)時(shí)采用諸如RAM,ROM,鍵盤,馬達(dá),LED,LCD,AD/DA,部分SPI器件,部分IIC器件。可以仿真51系列、AVR、PIC、ARM、等常用主流單片機(jī)。還可以直接在基于原理圖的虛擬原型上編程,再配合顯示及輸出,能看到運(yùn)行后輸入輸出的效果。配合系統(tǒng)配置的虛擬邏輯分析儀、示波器等,Proteus建立了完備的電子設(shè)計(jì)開(kāi)發(fā)環(huán)境。在本設(shè)計(jì)中主要借助了Proteus的仿真功能。</

38、p><p>  Protel軟件簡(jiǎn)介:Protel是個(gè)龐大的EDA軟件,是個(gè)完整的板級(jí)全方位電子設(shè)計(jì)系統(tǒng),它包含了電路原理圖繪制、模擬電路與數(shù)字電路混合信號(hào)仿真、多層印制電路板設(shè)計(jì)(包含印制電路板自動(dòng)布線)、可編程邏輯器件設(shè)計(jì)、圖表生成、電子表格生成、支持宏操作等功能,并具有Client/Server(客戶/服務(wù)器)體系結(jié)構(gòu),同時(shí)還兼容一些其它設(shè)計(jì)軟件的文件格式,如ORCAD,PSPICE,EXCEL等,其多層印制線

39、路板的自動(dòng)布線可實(shí)現(xiàn)高密度PCB的100%布通率。</p><p>  Keil簡(jiǎn)介:Keil C51是51系列兼容單片機(jī)C語(yǔ)言軟件開(kāi)發(fā)系統(tǒng),與匯編相比,C語(yǔ)言在功能上、結(jié)構(gòu)性、可讀性、可維護(hù)性上有明顯的優(yōu)勢(shì)。Keil提供了包括C編譯器、宏匯編、連接器、庫(kù)管理和一個(gè)功能強(qiáng)大的仿真調(diào)試器等在內(nèi)的完整開(kāi)發(fā)方案,通過(guò)一個(gè)集成開(kāi)發(fā)環(huán)境(uVision)將這些部分組合在一起。本設(shè)計(jì)在軟件部分在Keil μVision4上編

40、寫、調(diào)試完成。</p><p>  STC—ISP簡(jiǎn)介:STC-ISP 是一款單片機(jī)下載編程燒錄軟件,是針對(duì)STC系列單片機(jī)而設(shè)計(jì)的,可下載STC89系列、12C2052系列和12C5410等系列的STC單片機(jī)。在使用時(shí)首先選擇好所用單片機(jī)型號(hào),選擇好正確的COM端口,即可把由Keil軟件編譯、鏈接好后,生成的HEX文件下載到單片機(jī)中。</p><p>  4.4漢字和圖形字模提取<

41、/p><p>  4.4.1 取模軟件介紹</p><p>  字模軟件zimo21是一款比較好用的點(diǎn)陣液晶取模軟件,下面介紹一下基本的使用方法。</p><p>  第一步:打開(kāi)zimo21.exe進(jìn)入主界面,如圖4.2所示。</p><p>  圖4.4 zimo21.exe進(jìn)入主界面</p><p>  第二步:取模

42、參數(shù)配置。點(diǎn)擊左下側(cè)的“參數(shù)設(shè)置”選項(xiàng),再點(diǎn)擊“其它選項(xiàng)”,彈出配置對(duì)話框后,按圖4.3進(jìn)行設(shè)置后確定保存。</p><p>  第三步:取模字體配置。點(diǎn)擊左下側(cè)的“參數(shù)設(shè)置選項(xiàng)”,再點(diǎn)擊“文字輸入?yún)^(qū)字體選擇”會(huì)彈出相應(yīng)的配置對(duì)話框后,根據(jù)需要進(jìn)行配置后進(jìn)行保存。</p><p>  第四步:輸入字符。在文字輸入?yún)^(qū)輸入一個(gè)字模的漢字或字符,然后按“Ctrl+Enter”組合鍵結(jié)束輸入。&l

43、t;/p><p>  第五步:獲取字模。點(diǎn)擊左側(cè)的“取模方式”,再點(diǎn)擊“C51格式”或“A51格式”,即可在點(diǎn)陣生成區(qū)生成相應(yīng)的字模。</p><p><b>  圖4.5 參數(shù)設(shè)置</b></p><p>  4.4.2 液晶模塊顯示漢字方法</p><p>  使用圖形液晶模塊可以顯示漢字和圖形,在液晶屏上橫向8個(gè)點(diǎn)為1

44、個(gè)字節(jié)數(shù)據(jù), 每個(gè)字節(jié)在顯示緩沖區(qū)內(nèi)有對(duì)應(yīng)的地址,液晶屏幕的左上角橫向8個(gè)點(diǎn)對(duì)應(yīng)液晶模塊顯示緩沖區(qū)的首地址。采用圖形顯示方式,在液晶顯示器上漢字用點(diǎn)陣來(lái)顯示,最常用的是16×16 的漢字,一個(gè)16×16 的漢字用32 個(gè)字節(jié)表示, 這32 個(gè)字節(jié)存放方式如下所示:</p><p>  表4.1 漢字字節(jié)存放表</p><p>  而一個(gè)24 ×24 的漢字則

45、需72 個(gè)字節(jié), 存放方式如下:</p><p>  表4.2 漢字字節(jié)存放表</p><p>  其他規(guī)格的漢字存放方式依此類推。在液晶顯示器上需顯示漢字時(shí), 只要將要顯示的漢字的點(diǎn)陣按其存放方式依次寫入液晶控制器的顯示緩沖區(qū)即可。</p><p>  通過(guò)單片機(jī)將已提取的漢字的字模輸入液晶控制器, 即可按設(shè)定在液晶模塊顯示屏上顯示漢字。常見(jiàn)的做法是事先通過(guò)字模提

46、取軟件提取要顯示的漢字的字模, 將其作為常量數(shù)組存放在單片機(jī)的程序存儲(chǔ)區(qū)內(nèi)。以C 語(yǔ)言格式建立包含"成"和"都"兩字的漢字字模常量數(shù)組, 如下:</p><p>  Code const char Hz-Dot [ ] = { 0x00,0x00,0xF8,0x88,0x88,0x88,0x88,0x08,0x08,0xFF,0x08,0x09,0x0A,0xC8,0x08

47、,0x00,</p><p>  0x80,0x60,0x1F,0x00,0x10,0x20,0x1F,0x80,0x40,0x21,0x16,0x18,0x26,0x41,0xF8,0x00 ,//成</p><p>  0x20,0x24,0x24,0xA4,0x7F,0x24,0x34,0x28,0x26,0x20,0xFE,0x02,0x22,0xDA,0x06,0x00,<

48、/p><p>  0x04,0x02,0xFF,0x49,0x49,0x49,0x49,0xFF,0x00,0x00,0xFF,0x08,0x10,0x08,0x07,0x00} ;//都</p><p>  每個(gè)漢字字模由32 個(gè)字節(jié)組成, 單片機(jī)通過(guò)接口電路, 根據(jù)規(guī)定的時(shí)序, 將要顯示的漢字字模的所有字節(jié)按液晶控制器規(guī)定的方式, 按預(yù)定位置寫入液晶控制器顯示緩沖區(qū)即可。這種方式適用于程序

49、不大或單片機(jī)無(wú)外部擴(kuò)展數(shù)據(jù)存儲(chǔ)區(qū)功能的情況。</p><p>  4.5 漢字圖形顯示函數(shù)</p><p>  用字模提取軟件將要顯示的漢字和圖像轉(zhuǎn)化成十六進(jìn)制代碼,分別用程序調(diào)用在LCD上顯示出來(lái)。</p><p>  圖像的取模和漢字取模類似</p><p>  第一步:打開(kāi)zimo21.exe進(jìn)入主界面,如圖4.2所示。</p&

50、gt;<p>  第二步:取模參數(shù)配置。點(diǎn)擊左下側(cè)的“參數(shù)設(shè)置”選項(xiàng),再點(diǎn)擊“其它選項(xiàng)”,彈出配置對(duì)話框后,按圖4.3進(jìn)行設(shè)置后確定保存。</p><p>  第三步:載入圖像。點(diǎn)擊左側(cè)“打開(kāi)圖像圖標(biāo)”選擇想要取模的圖像,點(diǎn)擊打開(kāi)即可。(注意圖像的格式只能是BMP和ICO)如圖4.5</p><p>  圖4.6 載入圖片界面</p><p>  第四

51、步:獲取字模。點(diǎn)擊左側(cè)的“取模方式”,再點(diǎn)擊“C51格式”或“A51格式”,即可在點(diǎn)陣生成區(qū)生成相應(yīng)的字模。</p><p>  程序部分主要包含幾個(gè)函數(shù):測(cè)試LCD忙閑狀態(tài)函數(shù)bit CheckBusy(void),寫顯示數(shù)據(jù)函數(shù)void WriteData(uchar dsp_data,chip_select),設(shè)定行和列函數(shù)void SetStartLine(uchar line),按鍵控制函數(shù)void D

52、spUp(uchar code * character,uchar chip_select),文字圖片顯示函數(shù)fun(),播放音樂(lè)函數(shù)void music() 和延遲函數(shù)void delay_ms(unsigned int time).</p><p>  向LCD讀寫16×16漢字時(shí)采用的是先左后右先上后下的規(guī)則,即先在讀寫左上角8×8漢字點(diǎn)陣,縱著讀寫從左到右上面是低位下邊是高位,一次類推

53、讀寫右上角8×8漢字點(diǎn)陣左下角、右下角。向LCD讀寫128×64圖像時(shí),先把LCD的顯示屏的縱列分成兩部分,分別是低64位和高64位,用CS1和CS2作片選控制,低點(diǎn)位有效。</p><p>  void WriteData(uchar dsp_data,chip_select)//寫入數(shù)據(jù)程序</p><p><b>  {</b></p&

54、gt;<p>  while(CheckBusy());//檢測(cè)LCD是否忙</p><p><b>  LCD=0xFF;</b></p><p>  if(chip_select==1)</p><p><b>  {</b></p><p>  CS1=1;//選擇左半屏<

55、/p><p><b>  CS2=0;</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  CS1=0;//選擇右半屏</p><p><b>  CS2=1;</b>&l

56、t;/p><p><b>  }</b></p><p><b>  RW=0;</b></p><p><b>  DI=1;</b></p><p>  if(menu)LCD=~dsp_data;//選中反顯</p><p>  else LCD=ds

57、p_data;</p><p><b>  E=1;</b></p><p><b>  E=0;</b></p><p><b>  }</b></p><p>  void DspUp(uchar code * character,uchar chip_select)//顯

58、示上半部分程序</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=0;i<16;i++)</p><p><b>  {</b></p><p>  WriteData(*

59、 (character+i),chip_select);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /*********************** display down area of character ***************/</p>

60、<p>  void DspDown(uchar code * character,uchar chip_select)//顯示下半部分程序</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  for(i=16;i<32;i++)</p&

61、gt;<p><b>  {</b></p><p>  WriteData(* (character+i),chip_select);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  4.6按

62、鍵檢測(cè)程序</b></p><p>  按鍵檢測(cè)程序主要流程</p><p>  圖4.7 按鍵檢測(cè)流程圖</p><p><b>  4.7主程序流程</b></p><p><b>  主程序流程圖</b></p><p>  圖4.8 主程序流程圖</

63、p><p><b>  5系統(tǒng)調(diào)試</b></p><p>  5.1單片機(jī)最小系統(tǒng)的調(diào)試</p><p>  把單片機(jī)最小系統(tǒng)焊接好,編寫讓單片機(jī)P1口輸出高低電平相間的程序,通過(guò)Keil把程序調(diào)試好,再生成的HEX文件下載到芯片里面,用示波器觀察P1口的電平是否與程序相符,若相符,則說(shuō)明單片機(jī)最小系統(tǒng)正常。若不相符,則找出問(wèn)題的所在。這一步看似

64、簡(jiǎn)單,卻是必不可少的一步,因?yàn)閱纹瑱C(jī)最小系統(tǒng)是整個(gè)電路的基礎(chǔ)。通過(guò)調(diào)試單片機(jī)最小系統(tǒng),不但可以檢測(cè)單片機(jī)最小系統(tǒng)是否正常,還可以檢測(cè)你使用相關(guān)軟件的步驟是否正確,這些步驟都是以后調(diào)試程序時(shí)必不可少的</p><p>  5.2液晶顯示器的調(diào)試</p><p>  仔細(xì)閱讀液晶顯示器的資料,按照資料上的要求把液晶顯示器連接好。首先,寫一個(gè)讓液晶顯示一個(gè)漢字或字符的程序,讓液晶顯示器對(duì)應(yīng)地顯示

65、出來(lái)。這一步可以讓我們檢測(cè)液晶顯示器是否與單片機(jī)正確連接,以及掌握初始化液晶顯示器的方法和寫指令/數(shù)據(jù)到液晶顯示器的方法,這是使用液晶顯示器的第一步。接下來(lái)再讓液晶在不同的位置顯示字符、顯示多個(gè)字符、顯示圖片等。也就是把以后要用的功能一一掌握。最后把液晶顯示程序里常用的程序整理成一個(gè)個(gè)字程序,方便以后調(diào)用。</p><p><b>  5.3鍵盤的調(diào)試</b></p><

66、p>  將按鍵添加到電路板上,編寫按鍵程序按不同的鍵能讓液晶顯示不同的字符。這步成功后說(shuō)明按鍵程序就沒(méi)問(wèn)題了,把它整理成一個(gè)字程序,方便調(diào)用。</p><p><b>  5.4整體調(diào)試</b></p><p>  將源文件lcda.c加入到開(kāi)發(fā)工具中,調(diào)試程序,并下載到單片機(jī)中運(yùn)行,首先</p><p>  顯示菜單界面,當(dāng)這些顯示完畢

67、后,按上,下移鍵,液晶屏上將顯示對(duì)應(yīng)選項(xiàng);按確認(rèn)鍵,液晶屏上將進(jìn)入對(duì)應(yīng)功能。注意由于延時(shí)等原因,有時(shí)候按鍵后并不能轉(zhuǎn)換為另一種要求的顯示。系統(tǒng)基本按照課程設(shè)計(jì)的要求實(shí)現(xiàn)了所有功能,在程序設(shè)計(jì)和調(diào)試過(guò)程中,遇到和解決了以下幾個(gè)問(wèn)題:</p><p>  第一個(gè)就是在取字模的時(shí)候?qū)τ谶B續(xù)幾行字的取模老是不成功,后來(lái)我采用了在畫圖板中把字排好版,然后用取模軟件打開(kāi)位圖進(jìn)行取模;</p><p>

68、  第二個(gè)問(wèn)題是剛開(kāi)始的時(shí)候,12864液晶背光亮,但不能顯示漢字和圖片,后來(lái)通過(guò)檢查L(zhǎng)CD的引腳功能,發(fā)現(xiàn)有接線錯(cuò)誤,糾正后問(wèn)題得以解決。</p><p>  第三個(gè)問(wèn)題是在按鍵選擇時(shí),按鍵太過(guò)靈敏,按一下可能跳過(guò)多個(gè)選項(xiàng),不能滿足要求,通過(guò)添加延時(shí)程序,圓滿解決問(wèn)題。</p><p>  6系統(tǒng)功能、指標(biāo)參數(shù)</p><p>  6.1說(shuō)明系統(tǒng)能實(shí)現(xiàn)的功能<

69、;/p><p><b>  各功能模塊介紹:</b></p><p>  1.顯示主菜單(一級(jí)菜單)功能。左半屏為固定顯示屏,顯示固定信息。右半屏為菜單顯示屏,顯示菜單選項(xiàng)。在主菜單界面按下上移鍵或下移鍵可以選擇語(yǔ)言、圖片、音樂(lè)、返回四個(gè)選項(xiàng)。按下確認(rèn)鍵即進(jìn)入下一級(jí)菜單。圖6.11為選中語(yǔ)言選項(xiàng)的菜單主界面。圖6.12是按中上、下鍵選中返回選項(xiàng)的主菜單界面。</p&

70、gt;<p>  圖6.1 圖6.2</p><p>  2.顯示二級(jí)菜單功能。在選中主菜單任意一選項(xiàng)后,按下確認(rèn)鍵則會(huì)進(jìn)入二級(jí)菜單。當(dāng)在主菜單選中語(yǔ)言這一選項(xiàng)后,按下確認(rèn)鍵,則會(huì)顯示中文和返回兩個(gè)選項(xiàng)。在主菜單選中圖片選項(xiàng)后,按下確認(rèn)鍵會(huì)顯示圖一和返回兩個(gè)選項(xiàng)。在主菜單選中音樂(lè),按下確認(rèn)鍵則會(huì)顯示歌一和返回兩個(gè)選項(xiàng)。在主菜單選中

71、返回,按下確認(rèn)鍵就會(huì)顯示關(guān)閉和菜單兩個(gè)選項(xiàng)。在二級(jí)菜單時(shí),選中返回,按確認(rèn),則回到主菜單。圖6.13為選中語(yǔ)言進(jìn)入的二級(jí)菜單選項(xiàng)。圖6.14為選中返回進(jìn)入的二級(jí)菜單選項(xiàng)。</p><p>  圖6.3 圖6.4</p><p>  3.顯示三級(jí)菜單功能。在二級(jí)菜單基礎(chǔ)上,選擇對(duì)應(yīng)選項(xiàng)進(jìn)入三級(jí)菜單。

72、如圖6.15,選中中文進(jìn)入三級(jí)菜單顯示內(nèi)容。圖6.16為選中關(guān)閉進(jìn)入三級(jí)菜單內(nèi)容。在顯示三級(jí)菜單界面是按下確認(rèn)鍵即返回二級(jí)菜單。</p><p>  圖6.5 圖6.6 </p><p>  4.顯示圖片功能。在一級(jí)菜單選中圖片,進(jìn)入二級(jí)菜單,選中圖一則會(huì)顯示圖片。圖6.17為選中圖片進(jìn)入二級(jí)菜單顯示內(nèi)容。圖6.18為進(jìn)入二級(jí)菜單后選中圖一顯示的圖片

73、。</p><p>  圖6.7 圖6.8</p><p>  5.播放音樂(lè)功能。在一級(jí)菜單選中音樂(lè),進(jìn)入二級(jí)菜單,選中歌一則會(huì)播放音樂(lè)。圖6.19為選中音樂(lè)進(jìn)入二級(jí)菜單顯示內(nèi)容。圖6.20為進(jìn)入二級(jí)菜單后選中歌一的音樂(lè)播放界面。</p><p>  圖6.9

74、 圖6.10</p><p><b>  6.2 指標(biāo)參數(shù)</b></p><p>  該設(shè)計(jì)完成了一級(jí)、二級(jí)、三級(jí)菜單之間的輪流切換。其中播放圖片、鎖屏和播放音樂(lè)界面也屬于顯示三級(jí)菜單顯示內(nèi)容。在菜單切換時(shí)界面設(shè)計(jì)人性化,可觀賞性高,為本設(shè)計(jì)一大亮點(diǎn)。仿真時(shí),各項(xiàng)參數(shù)均滿足期望要求,達(dá)到預(yù)期指標(biāo)。在實(shí)物圖中,除圖

75、片顯示清晰度不高,其他各項(xiàng)參數(shù)均與仿真一致,理論符合實(shí)際,參數(shù)滿足期望要求,達(dá)到預(yù)期指標(biāo)。</p><p><b>  7結(jié)論</b></p><p>  本設(shè)計(jì)選擇STC12C5A60S2為核心控制元件,以12864LCD為顯示元件,以喇叭為音頻輸出,用三個(gè)按鍵作為輸入元器件,設(shè)計(jì)制作了一個(gè)日常生活中用到的LCD顯示系統(tǒng)。當(dāng)啟動(dòng)單片機(jī)時(shí),會(huì)出現(xiàn)一個(gè)菜單界面,選擇菜單

76、后進(jìn)入菜單選項(xiàng),按照提示可以選擇文字,圖片等各個(gè)功能模塊,相應(yīng)功能運(yùn)行完畢后可以返回轉(zhuǎn)入主界面,等待用戶進(jìn)一步選擇其它功能模塊??紤]到實(shí)用性,在菜單主界面可返回到關(guān)機(jī)界面,進(jìn)入待機(jī)狀態(tài)。</p><p>  在各個(gè)功能模塊切換時(shí),顯示“請(qǐng)稍等”界面,更加人性化。</p><p>  本次設(shè)計(jì)花費(fèi)了很長(zhǎng)的一段時(shí)間與精力,剛接到這個(gè)課題時(shí),覺(jué)得應(yīng)該不是很難,但真正開(kāi)始設(shè)計(jì)與編程的時(shí)候,發(fā)現(xiàn)并不

77、是我們想像中的那么容易,設(shè)計(jì)的難點(diǎn)主要是菜單層與圖片的顯示,在編寫程序的過(guò)程中,遇到了很難題,比如說(shuō)最簡(jiǎn)單的顯示選項(xiàng)問(wèn)題,想了多種方法,最后利用菜單結(jié)構(gòu)體來(lái)多次調(diào)用不同模塊來(lái)顯示,還有文字、圖片的位置,取模的大小,這樣的細(xì)節(jié)是一定要經(jīng)過(guò)大量的實(shí)踐才能體會(huì)出來(lái)的。在調(diào)寫按鍵菜單程序的時(shí)候,通過(guò)反復(fù)的擦寫芯片,不斷的修改程序,一步一步一個(gè)腳印,最后達(dá)到了我們預(yù)料的效果。</p><p>  由于這是對(duì)現(xiàn)實(shí)生活中應(yīng)用的

78、一種模擬,要達(dá)到實(shí)際的需要應(yīng)用到生產(chǎn)領(lǐng)域,還有很大的距離,所以在系統(tǒng)的設(shè)計(jì)過(guò)程中避免不了遺漏一些問(wèn)題,這是在所難免的,比如圖片的顯示,遇到了亂碼的問(wèn)題,在多級(jí)修改程序和運(yùn)用不同的方法后,卻不能達(dá)到理想的效果。但是該系統(tǒng)經(jīng)過(guò)實(shí)踐證明運(yùn)行穩(wěn)定,主要功能得以實(shí)現(xiàn),基本上達(dá)到了設(shè)計(jì)的要求。</p><p><b>  8總結(jié)與體會(huì)</b></p><p>  通過(guò)此次單片機(jī)多

79、級(jí)液晶菜單的課程設(shè)計(jì),使我們掌握單片機(jī)指令系統(tǒng)中C語(yǔ)言各種基本語(yǔ)句的意義及C語(yǔ)言程序設(shè)計(jì)的基本知識(shí)和方法,以及單片機(jī)與其他設(shè)備相連接的輸入輸出中斷等接口技術(shù),學(xué)會(huì)了用按鍵控制和跳轉(zhuǎn)的基本方法,提高了分析程序和硬件電路的能力,對(duì)編譯調(diào)試和自己的焊接技術(shù)也相應(yīng)的提高了,在找資料的過(guò)程中不僅掌握了課本上沒(méi)有的知識(shí)還提高了自己的搜索能力,使我們從硬件軟件的結(jié)合上理論聯(lián)系實(shí)際,提高動(dòng)手能力,從而全面掌握單片機(jī)的應(yīng)用,深刻的體會(huì)到了實(shí)踐的巨大作用,

80、有時(shí)候不懂的地方,可以根據(jù)自己的想法去做,反復(fù)的修改,得到自己想要的結(jié)果。另外在整個(gè)過(guò)程中,同學(xué)之間也相互團(tuán)結(jié)合作,將每個(gè)人的想法說(shuō)出來(lái)設(shè)計(jì)出完美的方案。</p><p>  學(xué)而知不足,這次設(shè)計(jì)讓我學(xué)到更多東西的同時(shí)也讓我看到了自己知識(shí)的缺乏,從而促進(jìn)我們不斷進(jìn)取,不斷進(jìn)步。這次設(shè)計(jì)我們還明白了一個(gè)道理:有些事情不是自己不會(huì)做,而是自己并沒(méi)有去行動(dòng),所以才會(huì)覺(jué)得很難,只有自己用心投入了,事情原來(lái)并沒(méi)有想象中的那

81、么難。我在設(shè)計(jì)程序的過(guò)程中遇到了不少問(wèn)題,但在指導(dǎo)老師、組員以及周圍各位同學(xué)的幫忙下也一一地順利解決了,在這里我明白了團(tuán)結(jié)合作的重要性,大家互相幫忙才會(huì)事半功倍的。</p><p>  感謝我們的陳高燕老師。陳老師淵博的學(xué)識(shí)、認(rèn)真的教學(xué)態(tài)度讓我們由衷的欽佩。這一段來(lái),我們?cè)陉惱蠋煹慕陶d和悉心指導(dǎo)下圓滿地完成了畢業(yè)設(shè)計(jì)。我們不僅學(xué)習(xí)到了很多有用知識(shí),而且懂得了許多做人的道理。我們相信這些對(duì)于以后的生活是大有裨益的。

82、</p><p>  衷心感謝所有幫助、支持和關(guān)心我們的老師、同學(xué)、朋友!在此,我們要向他們表示深深的謝意和美好的祝福!</p><p>  總之,經(jīng)過(guò)這次課程設(shè)計(jì)后,我們受益匪淺不僅積累了很多課外知識(shí),而且每個(gè)人在這個(gè)過(guò)程中一也發(fā)現(xiàn)了自己所擅長(zhǎng)的地方,大家的共同努力使得這次課設(shè)圓滿結(jié)束!</p><p><b>  9 參考文獻(xiàn)</b><

83、;/p><p>  [1] 周雯.C語(yǔ)言程序設(shè)計(jì)[M].天津大學(xué)出版社,2012年9月</p><p>  [2] 侯殿有.單片機(jī)C語(yǔ)言程序設(shè)計(jì)[M].人民郵電出版社,2010年11月 </p><p>  [3] 張齊.單片機(jī)原理與應(yīng)用系統(tǒng)設(shè)計(jì)[M].電子工業(yè)出版社,2010年2月 </p><p>  [4] 侯殿有.單片機(jī)C語(yǔ)言程序設(shè)計(jì)[M

84、].人民郵電出版社,2010年11月 </p><p>  [5] 陸錚.單片機(jī)C語(yǔ)言下LCD多級(jí)菜單的一種實(shí)現(xiàn)方法[J].工礦自動(dòng)化,2006年2月 </p><p>  [6] 唐煒.單片機(jī)系統(tǒng)中液晶顯示多級(jí)菜單的軟硬件設(shè)計(jì)[J].華東船舶工業(yè)學(xué)院學(xué)報(bào),</p><p><b>  2003年2月</b></p><p&

85、gt;<b>  附錄1 </b></p><p><b>  原理圖</b></p><p><b>  實(shí)物圖</b></p><p>  附錄2:元器件清單表</p><p>  附錄3 :部分程序代碼</p><p><b>  主程序

86、代碼</b></p><p>  #include<drive_functions.h>//載入頭文件</p><p>  #include<get_keys.h>//按鍵檢測(cè)程序</p><p>  #include<characters.h>//字模庫(kù)程序</p><p>  #includ

87、e<menu_functions.h>//菜單調(diào)用子程序庫(kù)</p><p>  #include<yirenxin.h>//播放音樂(lè)程序</p><p>  void (*current_operation_index)();//定義指針,用于調(diào)用顯示函數(shù)</p><p>  typedef struct</p><p&g

88、t;<b>  {</b></p><p>  uchar current;//當(dāng)前</p><p>  uchar up;//上鍵</p><p>  uchar down;//下鍵</p><p>  uchar enter;//確定鍵</p><p>  void (*current_ope

89、ration)();//當(dāng)前要執(zhí)行的函數(shù)指針</p><p>  } key_table;//定義結(jié)構(gòu)體</p><p>  key_table code table[56]=</p><p><b>  {</b></p><p>  {0,12,4,1,(*fun0)}, //0//第一層,顯示[語(yǔ)言],圖片,音樂(lè),

90、返回</p><p>  {1,3,3,2,(*fun7)},//7-4向下,顯示 [中文],返回</p><p>  {2,2,2,1,(*fun8)}, //8-7 >enter>已是中文請(qǐng)返回</p><p>  {3,1,1,0,(*fun10)},//10-7 >down>顯示中文,[返回]</p><p

91、>  {4,0,8,5,(*fun12)},//12-0 >down>顯示語(yǔ)言,[圖片],音樂(lè)回</p><p>  {5,7,7,6,(*fun13)},//13-12 >enter>[圖片1],返回</p><p>  {6,6,6,5,(*fun14)},//14-13 >entern>返回</p><p>  {7,

92、5,5,4,(*fun22)},//22-19 >down>圖片1, [返回]</p><p>  {8,4,12,9,(*fun24)},//24-12 >down>語(yǔ)言,圖片,[音樂(lè)],返回</p><p>  {9,11,11,10,(*fun25)},//25-24 >enter>[歌一,返回</p><p>  {10,

93、10,10,9,(*fun26)},//26-25 >enter>播放音樂(lè)中</p><p>  {11,9,9,8,(*fun34)},//34-31 >down>歌一,[返回] </p><p>  {12,8,0,13,(*fun36)},//36-24 >down>語(yǔ)言,圖片,音樂(lè),[返回]</p

94、><p>  {13,14,14,15,(*fun37)},//37-36 >enter>[關(guān)閉],菜單</p><p>  {14,13,13,0,(*fun38)}, //38-37 >up>關(guān)閉,[菜單]</p><p>  {15,15,15,0,(*fun39)},//shutdown</p><p><b

95、>  };</b></p><p>  void main(void)//主程序</p><p><b>  {</b></p><p>  void fun40();//顯示左屏固定部分 </p><p><b>  while(1)</b></p>&l

96、t;p><b>  {</b></p><p>  if(CheckState()) //檢查是否有鍵按下</p><p><b>  {</b></p><p>  delay(); //延時(shí)去抖動(dòng)</p><p&g

97、t;  if(CheckState())</p><p><b>  {</b></p><p>  key=GetKeys(); //讀取鍵盤值</p><p>  /*******************find index****************************/</p><p>

98、  switch(key)</p><p><b>  {</b></p><p>  case 0x14: </p><p>  func_index=table[func_index].up; //向上翻</p><p><b>  break;</b></p><

99、;p>  case 0x24: if(func_index<28)</p><p><b>  {</b></p><p>  dengdai();</p><p><b>  }</b></p><p>  else dengdai_y();</p><p>

100、  ClearLCD2(); </p><p>  func_index=table[func_index].enter;//回車</p><p><b>  break;</b></p><p>  case 0x44: </p><p>  func_index=table[func_index].down;//向

101、下翻</p><p><b>  break;</b></p><p>  default: </p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b>&

102、lt;/p><p><b>  }</b></p><p>  current_operation_index=table[func_index].current_operation;</p><p>  (*current_operation_index)();//執(zhí)行當(dāng)前操作函數(shù)</p><p><b>  }

103、</b></p><p><b>  }</b></p><p>  /*****************************drive_functions.h**********************/</p><p>  #include<12c5a60s2.h>//載入頭文件</p><p

104、>  #define uchar unsigned char</p><p>  #define uint unsigned int</p><p>  #define RST P20 //復(fù)位引腳P20</p><p>  #define E P21 //使能控制P21</p><p>  #d

105、efine RW P22//讀寫引腳P22</p><p>  #define DI P23//顯示/指令控制引腳P23</p><p>  #define CS2 P24//右屏片選控制引腳P24</p><p>  #define CS1 P25//左屏片選控制引腳P25</p><p>  #define UP

106、1 //scroll up control</p><p>  #define DOWN 0 //scroll down control</p><p>  uchar direction=UP; //scroll up by default</p><p>  uchar color=0x00;</p><p

107、>  bit shut_flag=0;</p><p>  sbit P20=P2^0;//定義端口</p><p>  sbit P21=P2^1;</p><p>  sbit P22=P2^2;</p><p>  sbit P23=P2^3;</p><p>  sbit P24=P2^4;</p&

108、gt;<p>  sbit P25=P2^5;</p><p>  bit busy_bit=1;</p><p>  bit menu=0;</p><p>  uchar line=0;</p><p>  uchar select=0;</p><p>  #define LCD P1</p&

109、gt;<p>  /*************************** check busy ************************/</p><p>  bit CheckBusy(void)//檢測(cè)液晶顯示忙</p><p><b>  {</b></p><p>  uchar state=0;</p&g

110、t;<p>  LCD=0xFF;//空讀操作</p><p><b>  RW=1;</b></p><p><b>  DI=0;</b></p><p><b>  E=1;</b></p><p>  state=LCD;</p><p

111、><b>  E=0;</b></p><p>  LCD=0xFF;//再讀才有效</p><p><b>  RW=1;</b></p><p><b>  DI=0;</b></p><p><b>  E=1;</b></p>

112、<p>  state=LCD;</p><p><b>  E=0;</b></p><p>  busy_bit=(bit)(state>>7);</p><p>  return(busy_bit);</p><p><b>  }</b></p><

113、p>  void SetStartLine(uchar line)//設(shè)置初始顯示行</p><p><b>  {</b></p><p><b>  CS1=1;</b></p><p><b>  CS2=0;</b></p><p>  while(CheckBu

114、sy());</p><p><b>  LCD=0xFF;</b></p><p><b>  RW=0;</b></p><p><b>  DI=0;</b></p><p>  LCD=line+0xC0;</p><p><b>  

115、E=1;</b></p><p><b>  E=0;</b></p><p><b>  CS1=0;</b></p><p><b>  CS2=1;</b></p><p>  while(CheckBusy());</p><p>&

116、lt;b>  LCD=0xFF;</b></p><p><b>  RW=0;</b></p><p><b>  DI=0;</b></p><p>  LCD=line+0xC0;</p><p><b>  E=1;</b></p>&l

117、t;p><b>  E=0;</b></p><p><b>  }</b></p><p>  /************************* set display page ****************/ </p><p>  void SetPage(uchar page)//設(shè)置顯示頁(yè)</p

118、><p><b>  {</b></p><p><b>  CS1=1;</b></p><p><b>  CS2=0;</b></p><p>  while(CheckBusy());</p><p><b>  LCD=0xFF;<

119、;/b></p><p><b>  RW=0;</b></p><p><b>  DI=0;</b></p><p>  LCD=page+0xB8;</p><p><b>  E=1;</b></p><p><b>  E=0;

120、</b></p><p><b>  CS1=0;</b></p><p><b>  CS2=1;</b></p><p>  while(CheckBusy());</p><p><b>  LCD=0xFF;</b></p><p>

121、<b>  RW=0;</b></p><p><b>  DI=0;</b></p><p>  LCD=page+0xB8;</p><p><b>  E=1;</b></p><p><b>  E=0;</b></p><p&

122、gt;<b>  }</b></p><p>  /************************ set display column *****************/</p><p>  void SetColumn(uchar column)//設(shè)置顯示列</p><p><b>  {</b></p&g

123、t;<p><b>  CS1=1;</b></p><p><b>  CS2=0;</b></p><p>  while(CheckBusy());</p><p><b>  LCD=0xFF;</b></p><p><b>  RW=0;&l

124、t;/b></p><p><b>  DI=0;</b></p><p>  LCD=column+0x40;</p><p><b>  E=1;</b></p><p><b>  E=0;</b></p><p><b>  CS

125、1=0;</b></p><p><b>  CS2=1;</b></p><p>  while(CheckBusy());</p><p><b>  LCD=0xFF;</b></p><p><b>  RW=0;</b></p><p&

溫馨提示

  • 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ù)僅提供信息存儲(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)論