電氣應(yīng)用系統(tǒng)設(shè)計報告--lcd顯示系統(tǒng)_第1頁
已閱讀1頁,還剩76頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  1 前 言2</b></p><p><b>  2總體方案設(shè)計3</b></p><p><b>  2.1方案討論4</b></p><p>  2.2硬件方案確定6&

2、lt;/p><p><b>  3單元模塊設(shè)計7</b></p><p>  3.1 單片機最小系統(tǒng)7</p><p>  3.1.1復(fù)位電路7</p><p>  3.1.2時鐘電路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訪問方式12</p><p>  3.5.3接口時序說明13</p><p>  4

4、系統(tǒng)軟件設(shè)計15</p><p>  4.1系統(tǒng)流程圖15</p><p>  4.2多級菜單軟件方案16</p><p>  4.3 設(shè)計軟件簡介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按鍵檢測程序24</p><p>  4.7主程序流程24</p><p><b>  5系統(tǒng)調(diào)試26</b></p><p>  5.1單片機最小系統(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)功能、指標參數(shù)27</p><p>  6.1說明系統(tǒng)能實現(xiàn)的功能27</p><p>  6.2 指標參數(shù)28</p><

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

46、取軟件提取要顯示的漢字的字模, 將其作為常量數(shù)組存放在單片機的程序存儲區(qū)內(nèi)。以C 語言格式建立包含"成"和"都"兩字的漢字字模常量數(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>  每個漢字字模由32 個字節(jié)組成, 單片機通過接口電路, 根據(jù)規(guī)定的時序, 將要顯示的漢字字模的所有字節(jié)按液晶控制器規(guī)定的方式, 按預(yù)定位置寫入液晶控制器顯示緩沖區(qū)即可。這種方式適用于程序

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

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

51、步:獲取字模。點擊左側(cè)的“取模方式”,再點擊“C51格式”或“A51格式”,即可在點陣生成區(qū)生成相應(yīng)的字模。</p><p>  程序部分主要包含幾個函數(shù):測試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(),播放音樂函數(shù)void music() 和延遲函數(shù)void delay_ms(unsigned int time).</p><p>  向LCD讀寫16×16漢字時采用的是先左后右先上后下的規(guī)則,即先在讀寫左上角8×8漢字點陣,縱著讀寫從左到右上面是低位下邊是高位,一次類推

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

54、gt;<p>  while(CheckBusy());//檢測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、鍵檢測程序</b></p><p>  按鍵檢測程序主要流程</p><p>  圖4.7 按鍵檢測流程圖</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單片機最小系統(tǒng)的調(diào)試</p><p>  把單片機最小系統(tǒng)焊接好,編寫讓單片機P1口輸出高低電平相間的程序,通過Keil把程序調(diào)試好,再生成的HEX文件下載到芯片里面,用示波器觀察P1口的電平是否與程序相符,若相符,則說明單片機最小系統(tǒng)正常。若不相符,則找出問題的所在。這一步看似

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

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

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

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

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

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

70、gt;<p>  圖6.1 圖6.2</p><p>  2.顯示二級菜單功能。在選中主菜單任意一選項后,按下確認鍵則會進入二級菜單。當在主菜單選中語言這一選項后,按下確認鍵,則會顯示中文和返回兩個選項。在主菜單選中圖片選項后,按下確認鍵會顯示圖一和返回兩個選項。在主菜單選中音樂,按下確認鍵則會顯示歌一和返回兩個選項。在主菜單選中

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

89、ration)();//當前要執(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//第一層,顯示[語言],圖片,音樂,

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

91、>  {4,0,8,5,(*fun12)},//12-0 >down>顯示語言,[圖片],音樂回</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>語言,圖片,[音樂],返回</p><p>  {9,11,11,10,(*fun25)},//25-24 >enter>[歌一,返回</p><p>  {10,

93、10,10,9,(*fun26)},//26-25 >enter>播放音樂中</p><p>  {11,9,9,8,(*fun34)},//34-31 >down>歌一,[返回] </p><p>  {12,8,0,13,(*fun36)},//36-24 >down>語言,圖片,音樂,[返回]</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(); //延時去抖動</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í)行當前操作函數(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)//檢測液晶顯示忙</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è)置顯示頁</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. 本站所有資源如無特殊說明,都需要本地電腦安裝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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論