第6章 80C51功能拓展_第1頁(yè)
第6章 80C51功能拓展_第2頁(yè)
第6章 80C51功能拓展_第3頁(yè)
第6章 80C51功能拓展_第4頁(yè)
第6章 80C51功能拓展_第5頁(yè)
已閱讀5頁(yè),還剩93頁(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)介

第六章80C51功能擴(kuò)展南京郵電大學(xué)電氣工程系OUTLINE6.180C51系統(tǒng)擴(kuò)展6.2系統(tǒng)拓展實(shí)例:顯示接口的拓展及應(yīng)用系統(tǒng)擴(kuò)展與綜合應(yīng)用實(shí)例

洗衣機(jī)控制系統(tǒng)洗衣機(jī)控制面板四只按鍵用于洗衣機(jī)的工作方式LED顯示器用于顯示洗衣或脫水時(shí)間指示燈配合按鍵工作涉及內(nèi)容:鍵盤、顯示器、定時(shí)器、并口等控制要求1.洗滌模式選擇:強(qiáng)洗模式:電動(dòng)機(jī)一個(gè)方向運(yùn)轉(zhuǎn)弱洗模式:電動(dòng)機(jī)雙向運(yùn)轉(zhuǎn),換向1次/分鐘上電后,默認(rèn)為強(qiáng)洗模式,強(qiáng)洗指示燈被點(diǎn)亮此時(shí)按增按鍵進(jìn)入弱洗模式控制要求2.洗滌次數(shù)設(shè)置:按一下“編程選擇”,則洗滌次數(shù)燈被點(diǎn)亮此時(shí)按下“增”或“減”就可設(shè)置洗滌次數(shù)控制要求3.洗衣時(shí)間設(shè)置:再按一下“編程選擇”,則洗衣定時(shí)燈被點(diǎn)亮此時(shí)按下“增”或“減”就可設(shè)置洗衣時(shí)間控制要求4.脫水定時(shí)設(shè)置:再按一下“編程選擇”,則脫水定時(shí)燈被點(diǎn)亮此時(shí)按下“增”或“減”就可設(shè)置脫水時(shí)間5.設(shè)置好工作模式,按下“啟動(dòng)”,洗衣機(jī)開(kāi)始工作控制要求5.設(shè)置好工作模式,按下“啟動(dòng)”,洗衣機(jī)開(kāi)始工作洗衣機(jī)自動(dòng)將用戶設(shè)置的洗衣時(shí)間除以洗滌次數(shù),得到每次換水時(shí)間如:設(shè)洗衣時(shí)間80分鐘,洗滌4次,則洗衣機(jī)每隔20分鐘自動(dòng)換一次水洗衣(脫水)剩余時(shí)間燈被點(diǎn)亮,LED顯示剩余時(shí)間6.洗衣結(jié)束后,蜂鳴器發(fā)聲5次,通知用戶洗衣結(jié)束思考以下問(wèn)題:1、單片機(jī)內(nèi)部資源的配置2、如何進(jìn)行系統(tǒng)擴(kuò)展I/O、鍵盤、指示燈、LED等3、外設(shè)的驅(qū)動(dòng),如電機(jī)4、軟件程序的模塊化設(shè)計(jì)6.180C51系統(tǒng)擴(kuò)展單片機(jī)與擴(kuò)展設(shè)備或芯片之間的接口通常分為:基于總線擴(kuò)展的操作接口:將擴(kuò)展設(shè)備視為單片機(jī)的外擴(kuò)存儲(chǔ)器,將外擴(kuò)設(shè)備的數(shù)據(jù)總線、地址總線以及控制總線與單片機(jī)的總線對(duì)應(yīng)相連,通過(guò)尋址外部數(shù)據(jù)存儲(chǔ)器的指令對(duì)擴(kuò)展設(shè)備進(jìn)行讀寫操作?;贕PIO讀寫的操作接口:將擴(kuò)展設(shè)備直接連接到單片機(jī)的并行I/O端口(P0~P3)或某些引腳上,通過(guò)讀寫端口或讀寫GPIO引腳來(lái)實(shí)現(xiàn)單片機(jī)與擴(kuò)展設(shè)備之間的數(shù)據(jù)交互。6.180C51系統(tǒng)擴(kuò)展80C51的系統(tǒng)擴(kuò)展:程序存儲(chǔ)器的擴(kuò)展數(shù)據(jù)存儲(chǔ)器的擴(kuò)展

I/O口的擴(kuò)展中斷系統(tǒng)擴(kuò)展特殊功能接口的擴(kuò)展系統(tǒng)擴(kuò)展的方法:并行擴(kuò)展法:利用三組總線(AB、DB、CB)

串行擴(kuò)展法:利用SPI三線和I2C雙線總線有些系統(tǒng):并行擴(kuò)展法+串行擴(kuò)展法6.1.1單片機(jī)總線擴(kuò)展的基本原理(1)地址總線(AB)

P0口提供低8位地址A0~A7P2口提供高8位地址A8~A15(2)

數(shù)據(jù)總線(DB)

P0口提供:D0~D7注:與外部交換的所有數(shù)據(jù)、指令、信息,除少數(shù)可直接通過(guò)P1口外,全部通過(guò)P0口傳送同一時(shí)間只能有一個(gè)是有效的數(shù)據(jù)傳送通道,由地址線控制各個(gè)芯片的片選線來(lái)選擇6.1.1單片機(jī)總線擴(kuò)展的基本原理(3)地址鎖存器在ALE(地址鎖存允許)信號(hào)有效時(shí),P0端口輸出的內(nèi)容為低8位地址;在ALE的下降沿時(shí)P0端口上的低8位地址被推入地址鎖存器,直到下一次ALE有效前都保持不變。系統(tǒng)擴(kuò)展時(shí)采用地址鎖存器來(lái)實(shí)現(xiàn)總線的分時(shí)復(fù)用。常用的地址鎖存器有74LS373和74LS573,它們都是帶有三態(tài)輸出控制的8D鎖存器。6.1.1單片機(jī)總線擴(kuò)展的基本原理6.1.1單片機(jī)總線擴(kuò)展的基本原理(4)控制總線(CB)片外系統(tǒng)擴(kuò)展用控制線片外信號(hào)對(duì)單片微機(jī)的控制線●ALE●PSEN:讀片外程序存儲(chǔ)器中的數(shù)據(jù)●EA:選擇片內(nèi)或片外程序存儲(chǔ)器0:只訪問(wèn)外部程序存儲(chǔ)器1:先訪問(wèn)內(nèi)部程序存儲(chǔ)器●RD、WR:片外數(shù)據(jù)存儲(chǔ)器和I/O端口的寫、讀6.1.1單片機(jī)總線擴(kuò)展的基本原理當(dāng)外部擴(kuò)展了存儲(chǔ)器和多片需尋址的器件時(shí),主機(jī)的訪問(wèn)需通過(guò)地址總線來(lái)選擇某一個(gè)被尋址的器件芯片及訪問(wèn)某一個(gè)存儲(chǔ)單元。地址空間的分配有兩種方法:線選法和地址譯碼法。

6.1.2拓展總線的地址空間分配及譯碼當(dāng)外部擴(kuò)展了存儲(chǔ)器和多片需尋址的器件時(shí),主機(jī)的訪問(wèn)需通過(guò)地址總線來(lái)選擇某一個(gè)被尋址的器件芯片及訪問(wèn)某一個(gè)存儲(chǔ)單元。選擇并確定被尋址的器件(芯片),稱為片選;在片選信號(hào)有效的情況下,尋址該器件(芯片)內(nèi)部的某個(gè)存儲(chǔ)單元或功能寄存器,稱為字選。地址空間的分配有兩種方法:線選法和地址譯碼法。

6.1.2拓展總線的地址空間分配及譯碼(1)線選法:利用最高幾位空余的地址線中一根(如P2.7)作為某一片存儲(chǔ)器芯片或I/O接口芯片的“片選”6.1.2拓展總線的地址空間分配及譯碼兩個(gè)外擴(kuò)6264尋址時(shí)16位地址線分別為0#(P2.7=1)的A15~A0的有效排列應(yīng)為1110000000000000~1111111111111111,即地址空間為0E000H~0FFFFH,共8KB。1#(P2.7=0)的A15~A0的有效排列應(yīng)為0110000000000000~0111111111111111,即地址空間為6000H~7FFFH,共8KB。未使用的P2.5和P2.6,直接設(shè)置為1。(1)線選法

例:將一個(gè)數(shù)據(jù)字節(jié)從74LS377輸出

MOV DPTR,#7FFFH

;地址指針指向74LS377 MOV A,#DATA ;將輸出數(shù)據(jù)送A MOVX@DPTR,A ;輸出數(shù)據(jù)例1.簡(jiǎn)單輸出口的擴(kuò)展進(jìn)行數(shù)據(jù)保持(鎖存)例:數(shù)據(jù)輸入

MOV DPTR,#0BFFFH ;指向74LS244口地址

MOVX A,@DPTR ;讀入數(shù)據(jù)例2.簡(jiǎn)單輸入口的擴(kuò)展——三態(tài)門控制電路(2)地址譯碼法:用譯碼器對(duì)空余的高位地址線進(jìn)行譯碼,而譯碼器的輸出作為“片選”控制線。常用的3-8譯碼器有74LS138。使能端6.1.2拓展總線的地址空間分配及譯碼譯碼器輸入譯碼器輸出控制端地址端G1G2AG2BCBA100000Y0=0,其余輸出均為1001Y1=0,其余輸出均為1010Y2=0,其余輸出均為1011Y3=0,其余輸出均為1100Y4=0,其余輸出均為1101Y5=0,其余輸出均為10××110Y6=0,其余輸出均為1×1×111Y7=0,其余輸出均為1××1×××Y0~Y7均為174LS138譯碼真值表64K全地址譯碼電路#0RAM地址:0000H~1FFFH,共8KB(A15=0,A14=0,A13=0)#1芯片地址:2000H~3FFFH,共8KB(A15=0,A14=0,A13=1)#2芯片地址:4000H~5FFFH,共8KB(A15=0,A14=1,A13=0)#3芯片地址:6000H~7FFFH,共8KB(A15=0,A14=1,A13=1)#4芯片地址:8000H~9FFFH,共8KB(A15=1,A14=0,A13=0)#5芯片地址:0A000H~0BFFFH,共8KB(A15=1,A14=0,A13=1)#6芯片地址:0C000H~0DFFFH,共8KB(A15=1,A14=1,A13=0)#7I/O地址:0E000H~0FFFFH,共8KB(A15=1,A14=1,A13=1)8個(gè)外擴(kuò)芯片的地址6.1.3拓展外部程序存儲(chǔ)器的電路設(shè)計(jì)現(xiàn)在一般情況下應(yīng)用系統(tǒng)都不需要擴(kuò)展外部程序存儲(chǔ)器。對(duì)于早期的產(chǎn)品,例如8031,由于沒(méi)有內(nèi)部程序存儲(chǔ)器,必須全部通過(guò)外部擴(kuò)展總線的方式連接外部EPROM方可存儲(chǔ)程序。假設(shè)選用無(wú)內(nèi)部程序存儲(chǔ)器的8031為主機(jī),擴(kuò)展外部8KB的EPROM芯片2764。P0口數(shù)據(jù)與地址分時(shí)復(fù)用需要外部數(shù)據(jù)存儲(chǔ)器擴(kuò)展的兩種情況:第一種情況是當(dāng)數(shù)據(jù)處理量較大,內(nèi)部RAM不夠用;第二種情況是當(dāng)單片機(jī)需要擴(kuò)展可讀寫的外部器件或設(shè)備。外部數(shù)據(jù)存儲(chǔ)器及外部I/O設(shè)備需要在64KB地址范圍內(nèi)統(tǒng)一編址,相互之間的地址不可重疊。6.1.4拓展外部數(shù)據(jù)存儲(chǔ)器的電路設(shè)計(jì)6.1.4拓展外部數(shù)據(jù)存儲(chǔ)器的電路設(shè)計(jì)0000H~7FFFH62256的存儲(chǔ)容量為32KB,其15條地址線與同名的地址總線的A0~A14相連;數(shù)據(jù)線D0~D7直接與單片機(jī)的數(shù)據(jù)總線(P0端口)相連;8D鎖存器74LS573作為地址鎖存器,在ALE信號(hào)的控制下鎖存低8位地址;62256的OE(數(shù)據(jù)輸出允許)和WE(數(shù)據(jù)寫入允許)信號(hào)分別與單片機(jī)控制總線中的RD和WR相連,控制著SRAM數(shù)據(jù)的讀出和寫入;62256的片選信號(hào)與A15直接相連,即只有當(dāng)A15為低時(shí)才能選中擴(kuò)展的SRAM,其存儲(chǔ)地址范圍是0000H~7FFFH。單片機(jī)擴(kuò)展外部SRAM—62256片外并行數(shù)據(jù)存儲(chǔ)器擴(kuò)展時(shí)的總線功能和讀、寫操作時(shí)序

片外數(shù)據(jù)存儲(chǔ)器讀、寫操作的指令:

MOVXA,@Ri;片外RAM→(A),讀(RD)

MOVX@Ri,A;(A)→片外RAM,寫(WD)

MOVXA,@DPTR;片外RAM→(A),讀(RD) MOVX@DPTR,A;(A)→片外RAM,寫(WD)6.1.4拓展外部數(shù)據(jù)存儲(chǔ)器的電路設(shè)計(jì)(1)8位D/A轉(zhuǎn)換器芯片DAC0832DAC0832的引腳6.1.5D/A、A/D轉(zhuǎn)換器接口的擴(kuò)展DAC0832邏輯結(jié)構(gòu)圖DAC0832的單緩沖方式的接口電路和應(yīng)用輸入寄存器、DAC寄存器同時(shí)受控地址:7FFFHORG0000HSJMPMAINORG0030HMAIN:MOVDPTR,#7FFFH

;輸入輸入寄存器和DAC寄存器地址 MOVR0,#0 ;轉(zhuǎn)換初值LP:MOVA,R0 MOVX @DPTR,A;送出模擬量

INCR0SJMPLP例:產(chǎn)生鋸齒波由上圖可知,輸入寄存器和DAC寄存器同時(shí)受控鎖存,DAC0832的地址為7FFFH(P2.7=0)DAC0832的雙緩沖方式的接口電路和應(yīng)用用P2.5控制第一片DAC0832的輸入鎖存器地址為0DFFFH用P2.6控制第二片DAC0832的輸入鎖存器地址為0BFFFH用P2.7同時(shí)控制二片DAC0832的第二級(jí)緩沖地址為7FFFHMOV DPTR,#0DFFFH;把數(shù)據(jù)送第一片0832的 ;輸入鎖存器MOV A,R0MOVX @DPTR,AMOV DPTR,#0BFFFH;把數(shù)據(jù)送第二片0832 ;的輸入鎖存器MOV A,R1MOVX @DPTR,AMOV DPTR,#7FFFH;兩片0832同時(shí)輸出模擬量MOVX @DPTR,A若第一片的數(shù)據(jù)在R0中,第二片的數(shù)據(jù)在R1中,送數(shù)程序?yàn)椋簩?duì)A/D轉(zhuǎn)換的控制一般分為三個(gè)過(guò)程:①通過(guò)控制口發(fā)出啟動(dòng)轉(zhuǎn)換信號(hào)命令模/數(shù)轉(zhuǎn)換器開(kāi)始轉(zhuǎn)換②判斷A/D轉(zhuǎn)換是否結(jié)束③轉(zhuǎn)換結(jié)束,發(fā)出數(shù)據(jù)輸出允許信號(hào)讀入轉(zhuǎn)換完成的數(shù)據(jù)(2)8位8通道A/D芯片ADC08096.1.5D/A、A/D轉(zhuǎn)換器接口的擴(kuò)展1.ADC0809的內(nèi)部邏輯結(jié)構(gòu)2.ADC0809的引腳及功能通道選擇表3.ADC0809與80C51的接口7FF8H~7FFFH74LS74例:采用延時(shí)等待A/D轉(zhuǎn)換結(jié)束方式,分別對(duì)8路模擬信號(hào)輪流采樣一次,并依次把結(jié)果存入數(shù)據(jù)存儲(chǔ)器。

ORG 0000H SJMPMAIN ORG 0030HMAIN:MOVR1,#20H MOVDPTR,#7FF8H

;指向通道0地址

MOVR7,#08H ;共需轉(zhuǎn)換8個(gè)通道LOOP:MOVX@DPTR,A;啟動(dòng)A/D轉(zhuǎn)換①

LCALLD128μs;延時(shí)等待A/D轉(zhuǎn)換結(jié)束②

MOVXA,@DPTR;讀入A/D轉(zhuǎn)換值③

MOV @R1,A INC DPTR ;指向下一通道地址

INC R1 DJNZR7,LOOP;8個(gè)通道未轉(zhuǎn)換完則繼續(xù)D128μs:

… ;延時(shí)128μs子程序

RET4.ADC0809與80C51中斷方式的接口轉(zhuǎn)換結(jié)束例:采集8路模擬量,并存入20H地址開(kāi)始的內(nèi)部RAM中

ORG 0000H SJMPMAIN ORG0003H ;外部中斷0入口地址

LJMPINTDATA

ORG 0100H ;數(shù)據(jù)采集程序MAIN:MOV R0,#20H ;數(shù)據(jù)緩沖區(qū)首址

MOV R2,#8 ;8通道計(jì)數(shù)器

MOV DPTR,#7FF8H

;指向0通道START:CLR F0 ;清中斷發(fā)生標(biāo)志

MOVX @DPTR,A ;啟動(dòng)A/D(P2.7=0,/WR=0)①SETB IT0 ;置外部中斷0為邊沿觸發(fā)

SETB EX0 ;允許外部中斷0SETB EA ;開(kāi)中斷

LOOP:JNB F0,LOOP ;中斷發(fā)生標(biāo)志是否為0②DJNZ R2,START ;8個(gè)通道轉(zhuǎn)換是否結(jié)束

SJMPMAIN

INTDATA:MOVXA,@DPTR ;讀數(shù)據(jù)

(P2.7=0,RD=0), ;硬件撤銷中斷③

MOV @R0,A ;存數(shù)據(jù)

INC R0INC DPTR ;指向下一通道

SETB F0 ;置中斷發(fā)生標(biāo)志

RETI6.1.6鍵盤輸入與顯示接口鍵盤類型:

編碼鍵盤:鍵按下后便產(chǎn)生對(duì)應(yīng)的代碼需要硬件支持,數(shù)目增多時(shí),硬件變得復(fù)雜

非編碼鍵盤:閉合或斷開(kāi),對(duì)應(yīng)1或0單片微機(jī)應(yīng)用系統(tǒng)中用得較多的是非編碼鍵盤(1)鍵盤接口的工作原理及擴(kuò)展應(yīng)用鍵盤的工作原理 兩類:獨(dú)立式鍵盤:結(jié)構(gòu)簡(jiǎn)單,使用方便,需占用較多的I/O線,適用于按鍵不多的場(chǎng)合。矩陣式鍵盤:適用于按鍵多的場(chǎng)合。獨(dú)立式鍵盤矩陣式鍵盤

2.矩陣式鍵盤的工作過(guò)程矩陣鍵盤按鍵的識(shí)別方法:1).識(shí)別鍵盤有無(wú)鍵被按下所有列線均置為0電平,行線電平有變化,說(shuō)明有鍵被按下2).識(shí)別出具體的按鍵逐列置0電平,其余各列置為高電平,某行電平由高電平變?yōu)榱汶娖?,可確定此行此列交叉點(diǎn)處的按鍵被按下鍵掃描方式:程控掃描、定時(shí)掃描、中斷掃描3.鍵盤的接口電路通過(guò)I/O口擴(kuò)展的矩陣式鍵盤(2)LED顯示器的擴(kuò)展LED顯示器的工作原理七段LED字型碼(1)

靜態(tài)顯示電路(2)

動(dòng)態(tài)顯示電路2.LED顯示電路分時(shí)選通

例:通過(guò)串行口方式0擴(kuò)展鍵盤和顯示器例:顯示一位

MOV SCON,#00H;置串行口為同步移位 ;寄存器方式

SETB P3.3 ;開(kāi)顯示輸入

MOV A,#0C0H ;顯示“0”(C0H為共陽(yáng)極 ;“0”的段碼值) MOV SBUF,A JNB TI,$ CLR TI …6.2系統(tǒng)拓展實(shí)例6.2.1LCD顯示器簡(jiǎn)介

LCD顯示器通??煞譃樽址c(diǎn)陣和圖形點(diǎn)陣等兩大類。字符點(diǎn)陣LCD:在其控制器內(nèi)設(shè)有字符發(fā)生器,可提供若干常用字符及符號(hào)的5×7或5×10的點(diǎn)陣,用戶程序只要輸入字符或符號(hào)的ASCII碼即可顯示。用戶也可以自己設(shè)計(jì)少量的點(diǎn)陣圖形送入LCD屏進(jìn)行顯示。圖形點(diǎn)陣LCD:在其控制器內(nèi)設(shè)置了圖形緩沖區(qū),緩沖區(qū)內(nèi)每個(gè)字節(jié)的每個(gè)位都與圖形點(diǎn)陣LCD上的點(diǎn)相對(duì)應(yīng),用戶輸入的數(shù)據(jù)中為1的位對(duì)應(yīng)的點(diǎn)在LCD屏上顯示為黑色,為0的位對(duì)應(yīng)的點(diǎn)不顯示。LCD屏顯示效果的更新由內(nèi)部控制器自動(dòng)完成,用戶只需根據(jù)要顯示的內(nèi)容操作圖形緩沖區(qū)即可。6.2系統(tǒng)拓展實(shí)例:顯示接口的拓展及應(yīng)用6.2.1LCD顯示器簡(jiǎn)介

在單片機(jī)應(yīng)用系統(tǒng)中,一般傾向于直接選用專用的LCD顯示驅(qū)動(dòng)模塊。LCD顯示驅(qū)動(dòng)模塊是一種將液晶顯示器件、連接器、驅(qū)動(dòng)電路、PCB線路板、背光光源及驅(qū)動(dòng)等裝配在一起的組件,稱為L(zhǎng)CM(LiquidCrystalDisplayModule)。LCM可以通過(guò)單片機(jī)的外部總線進(jìn)行控制,也可以通過(guò)單片機(jī)的I/O接口模擬總線時(shí)序的方式進(jìn)行驅(qū)動(dòng)。6.2.2字符點(diǎn)陣LCD顯示模塊的控制

——模擬總線時(shí)序驅(qū)動(dòng)1.LCM1602的內(nèi)部結(jié)構(gòu)字符點(diǎn)陣式LCM1602共有兩個(gè)顯示行,每行可顯示16字符為最常用的一種字符點(diǎn)陣式LCM,顯示控制器為HD44780,通過(guò)HD44100進(jìn)行顯示規(guī)模的擴(kuò)展。HD44780管腳功能:DB0~DB7為雙向數(shù)據(jù)總線;E為總線周期有效指示,高電平有效;R/W為讀寫選擇線,CPU送高電平表示對(duì)HD44780進(jìn)行讀操作,送低電平表示對(duì)HD44780進(jìn)行寫操作;D/I為寄存器選擇線,CPU送高電平表示選擇HD44780的數(shù)據(jù)寄存器進(jìn)行操作,送低電平表示對(duì)HD44780的指令寄存器進(jìn)行操作。VEE為對(duì)比度調(diào)節(jié)端,通過(guò)改變?cè)撘_上的電壓值可控制LCD顯示內(nèi)容的對(duì)比度。VCC和GND為電源端。1.LCM1602的內(nèi)部結(jié)構(gòu)HD44780內(nèi)部功能:(1)指令寄存器(IR):存儲(chǔ)CPU送達(dá)的指令代碼(2)數(shù)據(jù)寄存器(DR):暫存CPU對(duì)控制器內(nèi)DDRAM和CGRAM進(jìn)行讀寫的數(shù)據(jù)。(3)忙標(biāo)志(BF):當(dāng)忙標(biāo)志BF=1時(shí),除了讀忙標(biāo)志指令外,不接收任何其他指令。(4)地址計(jì)數(shù)器(AC):指定被操作DDRAM或CGRAM的地址。(5)顯示數(shù)據(jù)存儲(chǔ)器(DDRAM):對(duì)應(yīng)位置要顯示數(shù)據(jù)的ASCII碼或字形碼。(6)字形點(diǎn)陣存儲(chǔ)器(CGRAM):存放用戶自行設(shè)計(jì)的字符點(diǎn)陣數(shù)據(jù)。1.LCM1602的內(nèi)部結(jié)構(gòu)CPU通過(guò)對(duì)HD44780的R/W和D/I引腳以及數(shù)據(jù)總線DB0~DB7來(lái)控制LCM的顯示。2.LCM1602的控制指令3.LCM1602的操作時(shí)序

CPU對(duì)LCM1602中的顯示控制器HD44780進(jìn)行一次總線讀操作及總線寫操作的操作時(shí)序。這里所說(shuō)的時(shí)序指的是對(duì)設(shè)備或接口芯片進(jìn)行一次讀或?qū)懖僮鲿r(shí),各種接口信號(hào)電平變化的先后順序4.LCM1602與單片機(jī)接口(模擬總線時(shí)序驅(qū)動(dòng))MCS-51通過(guò)GPIO模擬總線時(shí)序驅(qū)動(dòng)LCM1602:LCM的數(shù)據(jù)總線D0~D7和I/O口相連(P0口)。通過(guò)P1.3引腳控制三極管,P1.3輸出低電平時(shí)三極管導(dǎo)通,LCM背光點(diǎn)亮;P1.3輸出為高或者單片機(jī)復(fù)位后,三極管不導(dǎo)通,LCM背光熄滅。VO為L(zhǎng)CM對(duì)比度調(diào)節(jié)端,通過(guò)調(diào)節(jié)可變電阻可改變VO端電壓,以改變LCM顯示字符的對(duì)比度。例6-1:根據(jù)圖6-8的接口電路設(shè)計(jì)單片機(jī)對(duì)LCM1602進(jìn)行讀寫的接口函數(shù)。解:由于單片機(jī)采用I/O端口模擬總線時(shí)序的方法控制LCM,接口程序只要通過(guò)代碼按照?qǐng)D6-8所示的總線操作的時(shí)序控制I/O端口引腳輸出不同的電平即可。MCS-51每執(zhí)行一條I/O引腳輸出指令需要一個(gè)機(jī)器周期,即使在單片機(jī)晶振頻率為24MHz的情況下也能夠滿足HD44780時(shí)間參數(shù)的要求。程序設(shè)計(jì)如下:#include<reg51.h>#include<intrins.h>#defineLCM_DIP10#defineLCM_RWP11#defineLCM_EP12#defineLCM_DBP0//頭文件/******************************************************函數(shù)名:LCMReadState功能:查詢LCM的忙標(biāo)志和當(dāng)前AC地址參數(shù):返回:unsignedchar,最高bit為1表示忙,為0表示閑*********************************************************/unsignedcharLCMReadState(void){unsignedcharstate;LCM_DB=0xff;//MCS-51的并行端口必須先置1再讀

LCM_E=0;LCM_DI=0;LCM_RW=1;LCM_E=1;//模擬總線時(shí)序,讀指令寄存器

_nop_();//延時(shí)一個(gè)機(jī)器周期,等待LCM準(zhǔn)備好數(shù)據(jù)

state=LCM_DB;//讀數(shù)據(jù)總線

LCM_E=0;//將E清零,結(jié)束總線操作周期

returnstate;}/****************************************************函數(shù)名:LCMWriteCmd功能:向LCM寫入控制字參數(shù):unsignedchar,命令字節(jié)返回:************************************************/voidLCMWriteCmd(unsignedcharcmd){//等待LCM空閑while(LCMReadState()&0x80);LCM_E=0;LCM_DI=0;LCM_RW=0;LCM_DB=cmd;LCM_E=1;//模擬寫指令總線周期

_nop_();//延時(shí)一個(gè)機(jī)器周期LCM_E=0;//將E清零,結(jié)束總線操作周期}/************************************函數(shù)名:LCMWriteData功能:向LCM寫入數(shù)據(jù)參數(shù):unsignedchar,將要寫入的數(shù)據(jù)返回:***************************************/voidLCMWriteData(unsignedchardc){//等待LCM空閑While(LCMReadState()&0x80);LCM_DI=1;LCM_RW=0;LCM_DB=dc;LCM_E=1;//模擬寫數(shù)據(jù)總線周期_nop_();//延時(shí)一個(gè)機(jī)器周期LCM_E=0;//將E清零,結(jié)束總線操作周期}這里只給出幾個(gè)基本的接口函數(shù)6.2.3圖形點(diǎn)陣LCD顯示模塊的控制——擴(kuò)展總線驅(qū)動(dòng)與字符點(diǎn)陣LCD不同,圖形點(diǎn)陣LCD的顯示受控于存儲(chǔ)在其控制器內(nèi)圖形緩沖區(qū)中的點(diǎn)陣數(shù)據(jù),點(diǎn)陣數(shù)據(jù)中每字節(jié)的每位都與圖形點(diǎn)陣LCD上的點(diǎn)相對(duì)應(yīng),為1時(shí)該位對(duì)應(yīng)的點(diǎn)為黑色,為0時(shí)對(duì)應(yīng)的點(diǎn)不顯示。圖形點(diǎn)陣LCD能顯示各種點(diǎn)陣式的字符及圖形,與字符點(diǎn)陣式LCD相比,能表達(dá)的信息更豐富。圖形點(diǎn)陣LCD內(nèi)部通常使用HD61202U作為列(段)驅(qū)動(dòng)器它將8位微處理器送來(lái)的顯示信息保存在其內(nèi)部存儲(chǔ)器中并產(chǎn)生相應(yīng)的驅(qū)動(dòng)信號(hào),且與行驅(qū)動(dòng)器HD61203U相配合構(gòu)成更大規(guī)模的顯示驅(qū)動(dòng)。本節(jié)主要介紹12864圖形點(diǎn)陣LCD顯示模塊的結(jié)構(gòu)、功能及驅(qū)動(dòng)。1.LCM12864的內(nèi)部結(jié)構(gòu)LCM12864圖形點(diǎn)陣LCD顯示模塊采用兩片HD61202U和一片HD61203U相配合驅(qū)動(dòng)128×64點(diǎn)陣LCD屏LCM12864的CPU接口與LCM1602相比多了兩根信號(hào)線CS1和CS2,用于對(duì)LCM內(nèi)部的兩片HD61202U進(jìn)行片選,CS1有效表示當(dāng)前操作針對(duì)的是左半屏的控制器,CS2針對(duì)的是右半屏。除此之外,其余的信號(hào)線完全一樣;接口操作的方式、時(shí)序和時(shí)間參數(shù)等也基本相同D/IR/W操作對(duì)象00選擇指令寄存器,進(jìn)行寫入操作01讀出忙標(biāo)志10選擇輸入寄存器,寫數(shù)據(jù)至顯示RAM11選擇輸出寄存器,從顯示RAM中讀數(shù)據(jù)1.LCM12864的內(nèi)部結(jié)構(gòu)(1)輸入寄存器和輸出寄存器:輸入寄存器和輸出寄存器為CPU與LCM內(nèi)部顯示RAM之間數(shù)據(jù)傳送的暫存器。(2)忙標(biāo)志:忙標(biāo)志為1時(shí)表示HD61202U正在進(jìn)行內(nèi)部操作,除了讀狀態(tài)指令外,其余指令都不接收。(3)顯示RAM:每一片HD61202U負(fù)責(zé)驅(qū)動(dòng)64×64點(diǎn)陣LCD屏。1.LCM12864的內(nèi)部結(jié)構(gòu)1.LCM12864的內(nèi)部結(jié)構(gòu)HD61202U所驅(qū)動(dòng)的64×64點(diǎn)陣LCD顯示屏中的每個(gè)點(diǎn)都與內(nèi)部顯示RAM的1bit相對(duì)應(yīng)。顯示RAM按字節(jié)存儲(chǔ),每字節(jié)并行驅(qū)動(dòng)8行,LCD顯示屏每行有64列,共需64字節(jié)進(jìn)行驅(qū)動(dòng),這64字節(jié)構(gòu)成了顯示RAM中的一頁(yè)。64行64列的LCD顯示屏共需要8頁(yè)即512字節(jié)RAM進(jìn)行驅(qū)動(dòng)。HD61202U內(nèi)部設(shè)置了X地址寄存器和Y地址寄存器,X地址取值范圍為0~7,用于選擇某個(gè)頁(yè);Y地址的取值范圍為0~63,用于選擇每頁(yè)內(nèi)64列中的某列。①X地址寄存器和Y地址寄存器:X、Y地址寄存器是與內(nèi)部512字節(jié)的顯示RAM相對(duì)應(yīng)的9bit寄存器。高3位為X地址寄存器,低6位為Y地址寄存器,根據(jù)指令的不同可以分別設(shè)置成X地址(頁(yè)地址)寄存器和Y地址(列地址)寄存器。②起始顯示行寄存器:起始顯示行寄存器指定與LCD顯示屏的第1行相對(duì)應(yīng)的顯示RAM的行號(hào),用于顯示屏的卷屏操作。③顯示開(kāi)關(guān)及翻轉(zhuǎn):顯示屏開(kāi)關(guān)通過(guò)選擇Y1~Y64的開(kāi)關(guān)狀態(tài)來(lái)實(shí)現(xiàn)。在開(kāi)狀態(tài),顯示RAM中的數(shù)據(jù)輸出到相應(yīng)段上。在關(guān)狀態(tài),無(wú)論顯示RAM中有什么內(nèi)容,所有段都不顯示。④復(fù)位:在LCM加電時(shí)將復(fù)位引腳(RST)接低電平可初始化LCM系統(tǒng)。1.LCM12864的內(nèi)部結(jié)構(gòu)2.LCM12864的控制指令CPU通過(guò)對(duì)HD61202U的R/W和D/I引腳以及數(shù)據(jù)總線D0~D7來(lái)控制LCM的顯示。LCM12864的具體控制指令及指令代碼如表6-6所示。3.圖形點(diǎn)陣式LCM12864和單片機(jī)的接口(擴(kuò)展總線驅(qū)動(dòng))MCS-51通過(guò)擴(kuò)展總線驅(qū)動(dòng)LCM12864的接口電路原理圖圖6-11為一個(gè)單片機(jī)最小系統(tǒng)控制LCM12864的實(shí)例。CPU選用了NXP公司的P89V51系列單片機(jī)。該系列單片機(jī)內(nèi)部有程序存儲(chǔ)器,并具有IAP功能,可通過(guò)串行口下載代碼到單片機(jī)內(nèi)部,實(shí)驗(yàn)及調(diào)試都非常方便。LCM的顯示對(duì)比度由可變電阻器VR1進(jìn)行調(diào)節(jié),注意VR1的連接方式與LCM1602略有不同,不再是跨接在VCC和GND之間,而是使用LCM提供的VEE取代了VCC。LCM的背光通過(guò)單片機(jī)的P1.7進(jìn)行控制,P1.7輸出低電平則開(kāi)啟背光。LCM的復(fù)位信號(hào)為低有效,圖6-11中將單片機(jī)的復(fù)位信號(hào)反相后供LCM使用。例6-2:根據(jù)圖6-11的接口電路,設(shè)計(jì)單片機(jī)對(duì)LCM12864進(jìn)行讀寫的接口函數(shù)。解:本實(shí)例中單片機(jī)采用存儲(chǔ)器映像方式通過(guò)擴(kuò)展總線操作對(duì)其進(jìn)行控制。單片機(jī)的數(shù)據(jù)總線(P0.0~P0.7)與LCM的數(shù)據(jù)總線(D0~D7)直接相連,LCM的控制信號(hào)R/W、D/I、CS1和CS2直接與單片機(jī)地址總線中的A8、A9、A10和A11相連。單片機(jī)的讀、寫控制信號(hào)經(jīng)與非門U3A后與LCM12864的E相連,保證只有在單片機(jī)進(jìn)行外部RAM讀寫操作時(shí)才選通LCM。因未用到低8位地址,電路中沒(méi)有對(duì)單片機(jī)的低8位地址進(jìn)行鎖存,則根據(jù)表6-6,可得LCM12864內(nèi)部各寄存器在單片機(jī)外部存儲(chǔ)器空間中的訪問(wèn)地址如表6-7所示。例6-2【例6-2】根據(jù)LCM12864內(nèi)部寄存器的編址(見(jiàn)表6-7),操作LCM時(shí)只要使用外部RAM操作指令MOVX進(jìn)行數(shù)據(jù)傳送即可,相應(yīng)的時(shí)序由單片機(jī)自動(dòng)產(chǎn)生。對(duì)于C51編譯器,該編譯器提供了預(yù)先定義好的宏XBYTE、XWORD用于按字節(jié)或按字(雙字節(jié))操作外部存儲(chǔ)器,例如,XBYTE[0x200]=0x80表示向單片機(jī)外部數(shù)據(jù)存儲(chǔ)器中地址為0x200的單元寫入0x80;而c=XBYTE[0x200]則是從外部數(shù)據(jù)存儲(chǔ)器地址為0x200的單元讀入1字節(jié),存入變量c中。這些宏在absacc.h中定義??紤]到LCM總線時(shí)序的要求,程序中在進(jìn)行每次總線操作后都插入兩個(gè)NOP指令,將前后的總線操作周期分隔開(kāi)。C51編譯器提供了內(nèi)聯(lián)函數(shù)_nop_()專門用于插入NOP指令,該函數(shù)在頭文件intrins.h中定義。綜上所述,結(jié)合控制器指令代碼表(見(jiàn)表6-6),可編寫單片機(jī)控制LCM12864代碼如下:#include<absacc.h>#include<intrins.h>//定義LCD數(shù)據(jù)端口以及控制端口//CS2=A11,CS1=A10,R/W=A9,D/I=A8#defineCWADD1XBYTE[0x0800]#defineCRADD1XBYTE[0x0A00]#defineDWADD1XBYTE[0x0900]#defineDRADD1XBYTE[0x0B00]#defineCWADD2XBYTE[0x0400]#defineCRADD2XBYTE[0x0600]#defineDWADD2XBYTE[0x0500]#defineDRADD2XBYTE[0x0700]#defineNOP_nop_();_nop_()//延時(shí)兩個(gè)機(jī)器周期例6-2:代碼/***********************************************功能:讀控制器狀態(tài)函數(shù)參數(shù):chip為0表示第一個(gè)控制器,為非0為第二個(gè)控制器返回:狀態(tài)字***********************************************/unsignedcharLCD_Status(unsignedcharchip){unsignedcharc;if(chip==0)//如果是控制第一個(gè)控制器c=CRADD1;//數(shù)據(jù)送第一個(gè)控制器寫命令地址elsec=CRADD2;//否則數(shù)據(jù)送第二個(gè)控制器寫命令地址NOP;returnc;}/********************************************功能:控制顯示屏開(kāi)關(guān)函數(shù)參數(shù):onoff為0表示關(guān),為1表示開(kāi),不可取其他值*********************************************/voidLCD_OnOff(unsignedcharonoff){while(LCD_Status(0)&0x90);//判斷第一個(gè)控制器是否空閑NOP;CWADD1=0x3E|(onoff&0x01);//寫入控制代碼NOP;while(LCD_Status(1)&0x90);//判斷第二個(gè)控制器是否空閑NOP;CWADD2=0x3E|(onoff&0x01);//寫入控制代碼

NOP;}/********************************************功能:設(shè)置起始顯示行函數(shù)參數(shù):line表示起始顯示行,取值范圍為0~63*********************************************/voidLCD_SetStartLine(unsignedcharline){while(LCD_Status(0)&0x90);NOP;CWADD1=0xC0|(line&0x3F);NOP;while(LCD_Status(1)&0x90);NOP;CWADD2=0xC0|(line&0x3F);NOP;}/*******************************************功能:設(shè)置X地址(頁(yè)地址,對(duì)應(yīng)顯示屏的行,8行一組)函數(shù)參數(shù):chip表示控制器芯片號(hào),取值為0或1;x表示頁(yè)地址,取值范圍為0~7**********************************************/voidLCD_SetXAddress(unsignedcharchip,unsignedcharx){if(chip==0){while(LCD_Status(0)&0x90);NOP;CWADD1=0xB8|(x&0x07);NOP;}else{while(LCD_Status(1)&0x90);NOP;CWADD2=0xB8|(x&0x07);NOP;}}/*********************************************************功能:設(shè)置Y地址(列地址,對(duì)應(yīng)顯示屏的列)函數(shù)參數(shù):chip表示控制器芯片號(hào),取值為0或1;y表示該chip內(nèi)的列地址,取值范圍為0~64***********************************************/voidLCD_SetYAddress(unsignedcharchip,unsignedchary){if(chip==0){while(LCD_Status(0)&0x90);NOP;CWADD1=0x40|(y&0x3F);NOP;}else{while(LCD_Status(1)&0x90);NOP;CWADD2=0x40|(y&0x3F);NOP;}}/*********************************************************功能:向顯示存儲(chǔ)器寫數(shù)據(jù)函數(shù)參數(shù):c表示待寫入顯示存儲(chǔ)器的數(shù)據(jù);x、y表示x方向和y方向的地址*********************************************************/voidLCD_WriteData(unsignedcharc,unsignedcharx,unsignedchary){

if(x<64)//判斷x方向(列)地址是否超出范圍

{//未超出寫入左半屏顯示存儲(chǔ)器,否則寫入右半屏顯示存儲(chǔ)器

LCD_SetXAddress(0,y);NOP;LCD_SetYAddress(0,x);

溫馨提示

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