版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第6章單片機(jī)顯示和鍵盤(pán)接口實(shí)訓(xùn)6簡(jiǎn)易秒表的制作6.1單片機(jī)與顯示器接口6.2單片機(jī)與鍵盤(pán)接口6.3鍵盤(pán)與顯示器綜合應(yīng)用本章小結(jié)習(xí)題6實(shí)訓(xùn)6簡(jiǎn)易秒表的制作
1.實(shí)訓(xùn)目的
(1)利用單片機(jī)的定時(shí)器中斷實(shí)現(xiàn)秒定時(shí),進(jìn)一步掌握中斷程序的編程技巧。
(2)通過(guò)對(duì)LED顯示程序的調(diào)試,熟悉8051與LED的接口技術(shù),熟悉LED動(dòng)態(tài)顯示的控制過(guò)程。
(3)熟悉獨(dú)立式鍵盤(pán)的接口技術(shù),熟悉鍵盤(pán)中斷掃描原理。
(4)通過(guò)閱讀和調(diào)試簡(jiǎn)易秒表整體程序,學(xué)會(huì)如何編制含LED動(dòng)態(tài)顯示、鍵盤(pán)掃描和定時(shí)器中斷等多種功能的綜合程序,初步體會(huì)大型程序的編制和調(diào)試技巧。
2.實(shí)訓(xùn)設(shè)備與器件
(1)實(shí)訓(xùn)設(shè)備:?jiǎn)纹瑱C(jī)開(kāi)發(fā)系統(tǒng)、微機(jī)。
(2)實(shí)訓(xùn)器件:參見(jiàn)實(shí)訓(xùn)電路圖6.1(或?qū)嵱?xùn)組合教具一套)。
3.實(shí)訓(xùn)步驟與要求
(1)要求:利用實(shí)訓(xùn)電路板,以2位LED顯示秒值,實(shí)現(xiàn)秒表計(jì)時(shí)顯示。以3個(gè)獨(dú)立式按鍵KE0、KE1、KE2分別實(shí)現(xiàn)啟動(dòng)、停止、清零等功能。
(2)方法:用中斷的編程思路使用定時(shí)器T0,定時(shí)器工作在定時(shí)方式,實(shí)現(xiàn)1秒定時(shí),每50ms溢出中斷一次,中斷20次后就到1秒鐘;秒表計(jì)時(shí)顯示用動(dòng)態(tài)顯示方式實(shí)現(xiàn);通過(guò)鍵盤(pán)掃描方式取得KE0、KE1、KE2的鍵值,用鍵盤(pán)的中斷處理程序?qū)崿F(xiàn)秒表的啟動(dòng)、停止、清0等功能。
(3)實(shí)驗(yàn)線路分析:原理圖參見(jiàn)圖6.1。2位LED顯示的位碼由單片機(jī)的P2口輸出,段碼由P0口輸出,P2口線與LED之間接有200Ω限流電阻;LED為共陽(yáng)極數(shù)碼管,顯示方式為動(dòng)態(tài)顯示方式;3個(gè)按鍵可以采用獨(dú)立式鍵盤(pán),其中兩個(gè)按鍵分別連接到外部中斷INT0、INT1,第3個(gè)按鍵連接到定時(shí)器1的T1端口,以中斷方式實(shí)現(xiàn)鍵盤(pán)的掃描。
(4)軟件設(shè)計(jì):軟件整體設(shè)計(jì)思路是以動(dòng)態(tài)顯示作為主程序,按鍵查詢采用中斷方式;秒定時(shí)采用定時(shí)器T0中斷方式進(jìn)行,定時(shí)器T0定時(shí)時(shí)間為50ms,定時(shí)器50ms溢出一次,溢出20次后秒值加1;計(jì)時(shí)的開(kāi)啟與關(guān)閉受控于按鍵處理程序。由上述設(shè)計(jì)思路可設(shè)計(jì)出軟件流程圖如圖6.2所示。圖6.1簡(jiǎn)易秒表電路連接圖6.2簡(jiǎn)易秒表軟件流程圖
(5)程序編制:編程時(shí)置KE0鍵為“啟動(dòng)”,置KE1鍵為“停止”,置KE2鍵為“清0”,因按鍵較少,所以采用獨(dú)立式按鍵即可滿足條件,其中兩個(gè)按鍵分別連接到外部中斷接口INT0、INT1,另外一個(gè)連接到外部引腳T1,編程時(shí)置T1為8位計(jì)數(shù)方式,初始值設(shè)定為0FFH。程序中,INT0、INT1和T1均允許中斷,故按鍵的處理通過(guò)各相應(yīng)中斷子程序來(lái)完成。2位LED顯示的數(shù)據(jù)由顯示緩沖區(qū)30H~31H單元中的數(shù)據(jù)決定,順序是從左至右。動(dòng)態(tài)顯示時(shí),每位顯示持續(xù)時(shí)間為1ms,1ms延時(shí)由軟件實(shí)現(xiàn),2位顯示約耗時(shí)2ms。1秒定時(shí)采用定時(shí)器T0方式1中斷,每50ms中斷一次,用21H(MSEC)作50ms計(jì)數(shù)單元,每20次為一個(gè)循環(huán),計(jì)滿20次,秒計(jì)數(shù)單元20H(SEC)加1。20H單元的數(shù)據(jù)采用十進(jìn)制計(jì)數(shù),該數(shù)據(jù)被拆成個(gè)位和十位兩個(gè)數(shù)據(jù)后分別送至顯示緩沖區(qū)的30H、31H單元。按照上述思路可編制源程序如下:
SEC
EQU
20H MSEC
EQU
21H
ORG
0000H AJMP
MAIN ORG
0003H AJMP
KE1 ORG
000BH AJMP
CONT ORG
0013H AJMP
KE0 ORG
001BH AJMP
KE2;―――――――――――主程序―――――――――――――;――――――――――初始化部分――――――――――――
MAIN:MOV
TMOD,#61H ;置T0方式1定時(shí),T1方;式2計(jì)數(shù)
MOV
TH0,#3CH ;T0置初值
MOV
TL0,#0B0H
MOV
TH1,#0FFH ;T1置初值
MOV
TL1,#0FFH
MOV
SEC,#00H ;60s計(jì)數(shù)單元置初值
MOV
MSEC,#14H ;50ms計(jì)數(shù)單元置初值
MOV
SP,#3FH ;堆棧指針置初值
MOV
30H,#00H ;顯示緩沖區(qū)清0
MOV
31H,#00H
MOV IE,#8FH ;打開(kāi)中斷源
SETB TR1 ;啟動(dòng)定時(shí)器1
CLR A ;累加器清0;―――――――――――顯示程序部分――――――――――
DISP:MOV
R2,#02H ;LED待顯示位數(shù)送R2
MOV R1,#00H ;設(shè)定顯示時(shí)間
MOV R4,#01H ;選中最右端LED
MOV R0,#30H ;顯示緩沖區(qū)首址送R0
MOV A,@R0 ;秒顯示個(gè)位送A
DISP1:MOV DPTR,#TAB ;指向字形表首址
MOVC A,@A+DPTR ;查表取得字形碼
MOV P0,A ;字形碼送P0口
MOV A,R4 ;取位選字 MOV P2,A ;位碼送P2口
DJNZ R1,$ ;延時(shí)0.5ms DJNZ R1,$ ;延時(shí)0.5ms RL A ;位選字移位
MOV R4,A ;移位后的位選字送R4 INC R0 ;指向下一位緩沖區(qū)地址
MOV A,@R0 ;緩沖區(qū)數(shù)據(jù)送A DJNZ R2,DISP1;未掃描完,繼續(xù)循環(huán)
SJMP DISP
TAB: DB 0C0H,F(xiàn)9H,0A4H,0B0H,99H;共陽(yáng)極LED字型表
DB 92H,82H,0F8H,80H,90H;―――――――――――按鍵0中斷服務(wù)程序――――――――――;功能:?jiǎn)?dòng)
KE0:SETB
TR0 ;啟動(dòng)定時(shí)器0,開(kāi)始計(jì)時(shí)
RETI ;中斷返回;―――――――――――按鍵1中斷服務(wù)程序――――――――――;功能:暫停
KE1:CLR
TR0 ;關(guān)閉定時(shí)器0,暫停計(jì)時(shí)
RETI ;中斷返回;―――――――――――按鍵2中斷服務(wù)程序――――――――――;功能:清0
KE2:MOV SEC,#00H ;秒清0
MOV 30H,#00H ;顯示緩沖區(qū)清0
MOV 31H,#00H ;顯示緩沖區(qū)清0
RETI;――――――――定時(shí)器0中斷服務(wù)程序―――――――――――;功能:秒值的刷新
CONT: PUSH ACC ;保護(hù)現(xiàn)場(chǎng)
MOV TH0,#3CH ;定時(shí)器T1重置初值
MOV TL0,#0B0H DJNZ MSEC,EXIT ;判斷是否到1s?
MOV MSEC,#14H ;若到1s,則重置50ms初始值
INC SEC ;秒單元加1 CJNE SEC,#60,CHAI ;判斷秒是否到60?
MOV SEC,#00 ;到60后,清0 CHAI: MOV A,SEC MOV B,#10 DIV AB ;秒單元內(nèi)容除以10 MOV 30H,A ;秒的十位送顯示緩沖區(qū)30H MOV 31H,B ;秒的個(gè)位送顯示緩沖區(qū)31H EXIT: POP ACC ;恢復(fù)現(xiàn)場(chǎng)
RETI ;中斷返回
END
4.實(shí)訓(xùn)總結(jié)與分析
(1)例5.4與本實(shí)訓(xùn)相比,二者均是秒表,但差別較大。前者采用發(fā)光二極管顯示,后者采用7段碼LED(俗稱數(shù)碼管)顯示,顯示效果更直觀;前者計(jì)時(shí)采用軟件延時(shí),后者采用定時(shí)器中斷,后者更準(zhǔn)確;前者功能單一,程序一旦開(kāi)始運(yùn)行,中間過(guò)程無(wú)法控制,后者功能齊全,可隨時(shí)啟動(dòng)、停止、清0,智能化程度更高。綜上所述,后者更實(shí)用。
(2)設(shè)計(jì)、調(diào)試大型程序時(shí),需先根據(jù)要求劃分模塊,優(yōu)化結(jié)構(gòu);再根據(jù)各模塊的特點(diǎn)確定主程序、子程序、中斷服務(wù)程序以及相互間的調(diào)用關(guān)系;再根據(jù)各模塊的性質(zhì)和功能將各模塊細(xì)化,設(shè)計(jì)出程序流程圖;最后才根據(jù)各模塊的流程圖編制具體程序。調(diào)試時(shí)應(yīng)先調(diào)試主程序,實(shí)現(xiàn)最基本、最主要的功能,在此基礎(chǔ)上再將各模塊功能往主程序上堆砌,直至各模塊聯(lián)調(diào)、統(tǒng)調(diào),實(shí)現(xiàn)全部功能。本實(shí)訓(xùn)將整個(gè)程序劃分為鍵盤(pán)程序、動(dòng)態(tài)顯示程序、秒計(jì)時(shí)程序三大模塊,根據(jù)各模塊的特點(diǎn)確定動(dòng)態(tài)顯示程序?yàn)橹鞒绦?,秒?jì)時(shí)程序?yàn)槎〞r(shí)器中斷服務(wù)程序,鍵盤(pán)的掃描也用中斷來(lái)實(shí)現(xiàn)。三大模塊之間的關(guān)系是:系統(tǒng)上電后,不斷運(yùn)行動(dòng)態(tài)顯示子程序,顯示初始時(shí)間00;無(wú)鍵按下時(shí),一直顯示初始值,有鍵按下時(shí),進(jìn)入按鍵的中斷服務(wù)程序;按鍵啟動(dòng)定時(shí)器后,開(kāi)始計(jì)時(shí),在定時(shí)器的中斷程序中完成顯示時(shí)間的刷新;回到主程序繼續(xù)運(yùn)行動(dòng)態(tài)顯示程序,顯示內(nèi)容不斷更新。經(jīng)上述處理后,三大模塊的運(yùn)行協(xié)調(diào)一致,既保持了動(dòng)態(tài)顯示的穩(wěn)定性,又保持了鍵盤(pán)的可靠性,還保持了秒計(jì)時(shí)的準(zhǔn)確性,較好地實(shí)現(xiàn)了全部功能。
(3)本實(shí)訓(xùn)只用到實(shí)驗(yàn)線路板的兩位LED顯示和3個(gè)獨(dú)立式按鍵,當(dāng)采用4×4矩陣式按鍵和8位動(dòng)態(tài)顯示時(shí),其功能還有較大的擴(kuò)展空間。只要將上述程序稍加改動(dòng)即可實(shí)現(xiàn)秒、分、時(shí)、日顯示,作為可全方位修改的實(shí)時(shí)時(shí)鐘的程序使用。如增加LED顯示位數(shù)或?qū)@示改為L(zhǎng)CD顯示模塊,可實(shí)現(xiàn)年、月、周、日、時(shí)、分、秒顯示。6.1單片機(jī)與顯示器接口6.1.1LED靜態(tài)顯示器
例6.1
設(shè)計(jì)一個(gè)一位簡(jiǎn)單秒表的顯示電路,顯示內(nèi)容從0開(kāi)始,每隔1s顯示內(nèi)容加1,秒值到9后自動(dòng)清0,依次循環(huán)顯示。系統(tǒng)采用12MHz晶振。
解:根據(jù)題意可設(shè)計(jì)出硬件電路如圖6.3所示。圖6.3簡(jiǎn)單秒表顯示電路其源程序可設(shè)計(jì)如下:
ORG 0000H
ALMP MAIN
ORG 0030H
MAIN:MOV TMOD,#10H ;定時(shí)器T1工作在方式1
MOV TH1,#3CH ;T1置50ms計(jì)數(shù)初值
MOV TL1,#0B0H
SATRT:MOV R1,#00H ;計(jì)數(shù)顯示初始化
MOV DPTR,#TAB
DISP:MOV A,R1
MOVC A,@A+DPTR ;查表得顯示的字型碼
MOV P1,A ;數(shù)碼管顯示0
ACALL DELAY1S ;延時(shí)1s
INC R1 ;計(jì)數(shù)值加1
CJNE R1,#10,DISP ;秒值不到10,繼續(xù);顯示;否則清0
MOV R1,#00H ;計(jì)數(shù)值清0
SJMP DISP
TAB:DB
0C0H,0F9H,0A4H ;0,1,2
DB 0B0H,99H,92H ;3,4,5
DB 82H,0F8H,80H ;6,7,8
DB 90H ;9;———————————1s延時(shí)子程序————————
DEALY1S:
MOV R3,#14H ;置50ms計(jì)數(shù)循環(huán)初值
SETB TR1 ;啟動(dòng)T1
LP1:JBC TF1,LP2 ;查詢計(jì)數(shù)溢出
SJMP LP1 ;未到50ms繼續(xù)計(jì)數(shù)LP2: MOV TH1,#3CH ;重新置定時(shí)器初值
MOV TL1,#0B0H DJNZ R3,LP1 ;未到1s繼續(xù)循環(huán)
RET ;返回主程序
END
1.?dāng)?shù)碼管簡(jiǎn)介
1)數(shù)碼管結(jié)構(gòu)數(shù)碼管由8個(gè)發(fā)光二極管(以下簡(jiǎn)稱字段)構(gòu)成,通過(guò)不同的組合可顯示數(shù)字0~9、字符A~F、H、L、P、R、U、Y、符號(hào)“
”及小數(shù)點(diǎn)“
”。數(shù)碼管的外型結(jié)構(gòu)如圖6.4(a)所示。數(shù)碼管又分為共陰極和共陽(yáng)極兩種結(jié)構(gòu),分別如圖6.4(b)和圖6.4(c)所示。圖6.4數(shù)碼管結(jié)構(gòu)圖(a)外型結(jié)構(gòu);(b)共陰極;(c)共陽(yáng)極
2)數(shù)碼管工作原理共陽(yáng)極數(shù)碼管的8個(gè)發(fā)光二極管的陽(yáng)極(二極管正端)連接在一起,通常接高電平(一般接電源),其它管腳接段驅(qū)動(dòng)電路輸出端。當(dāng)某段驅(qū)動(dòng)電路的輸出端為低電平時(shí),該端所連接的字段導(dǎo)通并點(diǎn)亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能吸收額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來(lái)確定相應(yīng)的限流電阻。共陰極數(shù)碼管的8個(gè)發(fā)光二極管的陰極(二極管負(fù)端)連接在一起,通常接低電平(一般接地),其它管腳接段驅(qū)動(dòng)電路輸出端。當(dāng)某段驅(qū)動(dòng)電路的輸出端為高電平時(shí),該端所連接的字段導(dǎo)通并點(diǎn)亮,根據(jù)發(fā)光字段的不同組合可顯示出各種數(shù)字或字符。此時(shí),要求段驅(qū)動(dòng)電路能提供額定的段導(dǎo)通電流,還需根據(jù)外接電源及額定段導(dǎo)通電流來(lái)確定相應(yīng)的限流電阻。例6.1采用共陽(yáng)極數(shù)碼管與單片機(jī)P1口直接連接,其電路連接如圖6.3所示。數(shù)碼管公共陽(yáng)極接+5V電源,其它管腳分別接P1口的8個(gè)端口,限流電阻為510
,數(shù)碼管字段導(dǎo)通電流約為6mA(額定字段導(dǎo)通電流一般為5~20mA)。
3)數(shù)碼管字型編碼要使數(shù)碼管顯示出相應(yīng)的數(shù)字或字符,必須使段數(shù)據(jù)口輸出相應(yīng)的字型編碼。對(duì)照?qǐng)D6.3,字型碼各位定義如下:數(shù)據(jù)線:D7D6D5D4D3D2D1D0
I/O口線:P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0
LED段:dp gfedcba 數(shù)據(jù)線D0與a字段對(duì)應(yīng),D1字段與b字段對(duì)應(yīng)……,依此類推。如使用共陽(yáng)極數(shù)碼管,則數(shù)據(jù)為0表示對(duì)應(yīng)字段亮,數(shù)據(jù)為1表示對(duì)應(yīng)字段暗;如使用共陰極數(shù)碼管,則相反。表6.1數(shù)碼管字型編碼表例如要顯示“0”,共陽(yáng)極數(shù)碼管的字型編碼應(yīng)為:11000000B(即C0H);共陰極數(shù)碼管的字型編碼應(yīng)為:00111111B(即3FH)。依此類推可求得數(shù)碼管字型編碼如表6.1所示。例6.1使用的是共陽(yáng)極數(shù)碼管,因此,應(yīng)采用表6.1中的共陽(yáng)極字型碼。具體實(shí)施是通過(guò)編程將需要顯示的字型碼存放在程序存儲(chǔ)器的固定區(qū)域中,構(gòu)成顯示字型碼表。需要顯示某字符時(shí),通過(guò)查表指令獲取該字符所對(duì)應(yīng)的字型碼。圖6.5兩位的LED數(shù)碼管靜態(tài)顯示示意圖
2.靜態(tài)顯示接口從圖6.5可以看出,靜態(tài)顯示方式的特點(diǎn)是各位數(shù)碼管相互獨(dú)立,公共端恒定接地(共陰極)或接正電源(共陽(yáng)極)。每個(gè)數(shù)碼管的8個(gè)字段分別與一個(gè)8位I/O口地址相連,I/O口只要有段碼輸出,相應(yīng)字符即顯示出來(lái)并保持不變,直到I/O口輸出新的段碼。采用靜態(tài)顯示方式時(shí),用較小的電流即可獲得較高的亮度,且占用CPU時(shí)間少,編程簡(jiǎn)單,顯示便于監(jiān)測(cè)和控制,但其占用的口線多,硬件電路復(fù)雜,成本高,只適用于顯示位數(shù)較少的場(chǎng)合。例6.1就是數(shù)碼管靜態(tài)顯示方式的一種典型應(yīng)用,其硬件及軟件都非常簡(jiǎn)單。6.1.2LED動(dòng)態(tài)顯示器當(dāng)需要顯示的位數(shù)較多時(shí),為了節(jié)省硬件接口,往往采用動(dòng)態(tài)顯示的方式。用8051單片機(jī)構(gòu)建數(shù)碼管動(dòng)態(tài)顯示系統(tǒng)時(shí),其典型應(yīng)用如圖6.6所示。圖6.6動(dòng)態(tài)顯示典型應(yīng)用
1.動(dòng)態(tài)顯示概念動(dòng)態(tài)顯示是指一位一位地輪流點(diǎn)亮各位數(shù)碼管,這種逐位點(diǎn)亮顯示器的方式稱為位掃描。通常,各位數(shù)碼管的段選線相應(yīng)并聯(lián)在一起,由一個(gè)8位的I/O口控制;各位的位選線(公共陰極或公共陽(yáng)極)由另外的I/O口線控制。以動(dòng)態(tài)方式顯示時(shí),各數(shù)碼管分時(shí)輪流選通。要使其穩(wěn)定顯示,必須采用掃描方式,即在某一時(shí)刻只選通一位數(shù)碼管,并送出相應(yīng)的段碼,在另一時(shí)刻選通另一位數(shù)碼管,并送出相應(yīng)的段碼。依此規(guī)律循環(huán),即可使各位數(shù)碼管顯示將要顯示的字符,雖然這些字符是在不同的時(shí)刻分別顯示的,但由于人眼存在視覺(jué)暫留效應(yīng),因此只要每位顯示間隔足夠短就可以給人以同時(shí)顯示的感覺(jué)。采用動(dòng)態(tài)顯示方式比較節(jié)省I/O口,硬件電路也較靜態(tài)顯示方式簡(jiǎn)單,但其亮度不如靜態(tài)顯示方式,而且在顯示位數(shù)較多時(shí),CPU要依次掃描,這會(huì)占用CPU較多的時(shí)間。在圖6.6所表示的單片機(jī)動(dòng)態(tài)顯示連接圖中,數(shù)碼管采用共陽(yáng)極LED,單片機(jī)的P0口接至數(shù)碼管的各段,當(dāng)P0口線輸出“0”時(shí),驅(qū)動(dòng)數(shù)碼管發(fā)光。單片機(jī)的P2口線經(jīng)過(guò)限流電阻后接至數(shù)碼管的公共端,當(dāng)P2口線輸出“1”時(shí),選通相應(yīng)位的數(shù)碼管發(fā)光。
2.多位動(dòng)態(tài)顯示接口應(yīng)用采用8051的I/O口控制數(shù)碼管的段碼和位碼,同時(shí),采用動(dòng)態(tài)掃描方式依次循環(huán)點(diǎn)亮各位數(shù)碼管,即可構(gòu)成多位動(dòng)態(tài)數(shù)碼管顯示電路。
例6.2
擴(kuò)展例6.1的功能,用圖6.6的電路實(shí)現(xiàn)六位顯示的秒表,具體要求如下:
(1)從左往右每?jī)晌籐ED分別顯示小時(shí)、分鐘和秒,并可正常計(jì)數(shù)、進(jìn)位;
(2)上電后首先顯示000000,表示從0點(diǎn)0分0秒開(kāi)始計(jì)時(shí),當(dāng)時(shí)間顯示到235959后,六位顯示都清0,從頭開(kāi)始。
解:整體設(shè)計(jì)思路如下:整體程序主要分為3個(gè)部分:主程序、顯示子程序和定時(shí)器中斷程序。主程序主要是初始化部分和不斷調(diào)用動(dòng)態(tài)顯示子程序部分。動(dòng)態(tài)顯示子程序完成6位LED的輪流位掃描,它被主程序不斷調(diào)用,以保證穩(wěn)定可靠的顯示。顯示時(shí)間的刷新由定時(shí)器中斷產(chǎn)生,定時(shí)器每50ms中斷一次,當(dāng)中斷20次后(即1s后),對(duì)時(shí)間單元(秒計(jì)數(shù)單元、分計(jì)數(shù)單元、小時(shí)計(jì)數(shù)單元)進(jìn)行更新,然后通過(guò)拆字子程序?qū)r(shí)間單元里面的十六進(jìn)制數(shù)拆開(kāi)為兩個(gè)BCD碼,并送到顯示緩沖區(qū)。返回主程序后顯示緩沖區(qū)的待顯示數(shù)據(jù)被刷新一次,數(shù)碼管相應(yīng)的顯示數(shù)值也就隨之發(fā)生變化。根據(jù)硬件設(shè)計(jì),由單片機(jī)的P2口控制位碼輸出,P0口控制段碼輸出。動(dòng)態(tài)顯示程序中,在單片機(jī)內(nèi)部RAM中設(shè)置待顯示數(shù)據(jù)緩沖區(qū),由查表程序完成顯示譯碼,將緩沖區(qū)內(nèi)待顯示數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的段碼,再將段碼通過(guò)8051的P0口輸出;位碼數(shù)據(jù)由累加器循環(huán)左移指令產(chǎn)生,再通過(guò)P2口輸出。該程序的流程圖如圖6.7所示。片內(nèi)RAM的地址分配如表6.2所示。圖6.7六位數(shù)碼管動(dòng)態(tài)顯示程序流程圖源程序設(shè)計(jì)如下:
MSEC
EQU 20H ;50ms計(jì)數(shù)單元
SECOND
EQU 21H ;秒單元
MIN
EQU 22H ;分單元
HOUR
EQU 23H ;小時(shí)單元;————————————各程序入口————————————
ORG
0000H
LJMP
MAIN
ORG
000BH
LJMP
CONT;——————————主程序——————————
MAIN:MOV
SP,#3FH
MOV
TMOD,#01H;設(shè)置定時(shí)器0工作方式
MOV
TH0,#3CH;設(shè)置定時(shí)器初始值TH0 MOV TL0,#0B0H ;設(shè)置定時(shí)器初始值TL0
MOV IE,#82H ;定時(shí)器0中斷允許
MOV SECOND,#00H;秒單元初始值
MOV MIN,#00H ;分單元初始值
MOV HOUR,#00H ;小時(shí)單元初始值
MOV MSEC,#14H ;設(shè)置定時(shí)器溢出次數(shù)初始值20
MOV 35H,#00H ;顯示緩沖區(qū)清0 MOV 34H,#00H MOV 33H,#00H MOV 32H,#00H MOV 31H,#00H MOV 30H,#00H SETB TR0 ;啟動(dòng)定時(shí)器
START:LCALL DISP ;調(diào)顯示子程序
SJMP START ;跳動(dòng)START,不斷調(diào)顯示子程序;——————————LED動(dòng)態(tài)顯示子程序——————————;功能:動(dòng)態(tài)掃描6個(gè)數(shù)碼管;入口:顯示緩沖區(qū)30H~35H中待顯示的6個(gè)數(shù)據(jù)
DISP: MOV R0,#30H;顯示緩沖區(qū)的首地址
MOV R7,#00H;設(shè)定每位顯示延時(shí)時(shí)間
MOV R2,#06H;顯示個(gè)數(shù)
MOV R3,#20H;共陽(yáng)管的位碼初始值,從右端;先亮
MOV A,@R0;取顯示緩沖區(qū)的一個(gè)數(shù)據(jù)
DISP1:MOV DPTR,#TAB ;查表首地址送DPTR MOVC A,@A+DPTR ;查表得到顯示字符的字型碼 MOV P0,A ;將字型碼送P0口
MOV A,R3 ;位選碼給A MOV P2,A ;位碼送P2口
DJNZ R7,$ ;延時(shí)
DJNZ R7,$ ;延時(shí)
RR A ;位選碼右移,選中下一個(gè)LED MOV R3,A ;位選碼送回R3 INC R0 ;指向顯示緩沖區(qū)的下一位
MOV A,@R0 ;取顯示緩沖區(qū)的下一個(gè)數(shù)據(jù)
DJNZ R2,DISP1 ;六個(gè)LED輪流顯示一遍嗎?若;沒(méi)有則繼續(xù)查表顯示,否則返 ;回主程序
RET ;返回主程序
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H DB 92H,82H,0F8H,80H,90H;————————————定時(shí)器中斷子程序——————————;功能:50ms執(zhí)行一次,完成秒、分、小時(shí)單元的刷新并拆開(kāi)放到顯示緩沖區(qū);出口:顯示緩沖區(qū)30H~35H中存放的待顯示的6個(gè)數(shù)據(jù)
CONT: PUSH ACC ;保護(hù)現(xiàn)場(chǎng)
MOV TH0,#3CH ;重置定時(shí)器初始值
MOV TL0,#0B0H DJNZ MSEC,RN ;判斷到20次嗎,若未到說(shuō)明;沒(méi)有到1s,直接返回主程序;;否則說(shuō)明1s到
MOV MSEC,#14H ;1s到,重置50ms定時(shí)器溢出;次數(shù)初始值為20次
INC SECOND ;秒單元內(nèi)容加1 MOV A,SECOND ;秒單元給A累加器
MOV R1,#31H ;指向顯示緩沖區(qū)的31H單元
LCALL BINBCD ;調(diào)拆字子程序,將秒計(jì)數(shù)單元拆開(kāi)為;十位、個(gè)位,分別放到緩沖區(qū)31H單元 ;和30H單元
MOV A,SECOND ;秒單元給A CJNE A,#60,RN ;判斷到60s嗎,若未到則返回主程序
MOV A,#00 ;60s到,則秒單元清0 MOV SECOND,A MOV R1,#31H ;指向顯示緩沖區(qū)的31H單元
LCALL BINBCD ;調(diào)拆字子程序
MOV A,MIN ;分單元內(nèi)容加1 INC A MOV MIN,A MOV R1,#33H ;R1指向顯示緩沖區(qū)33H單元調(diào)拆字子
LCALL BINBCD ;程序,將分計(jì)數(shù)單元拆開(kāi)為十位、;個(gè)位,分別放到緩沖區(qū)33H單元和 ;32H單元
MOV
A,MIN ;分單元給A CJNE
A,#60,RN;判斷到60分嗎,若未到則返回;主程序
MOV
A,#00H ;60分到,分單元清0
MOV
MIN,A MOV
R1,#33H ;指向顯示緩沖區(qū)的33H單元
LCALL
BINBCD ;調(diào)拆字子程序
MOV
A,HOUR ;小時(shí)單元內(nèi)容加1 INC
A MOV
HOUR,A MOV
R1,#35H ;R1指向顯示緩沖區(qū)35H單元
LCALL
BINBCD ;調(diào)拆字子程序,將小時(shí)計(jì)數(shù)單元;拆開(kāi)為十位、個(gè)位,分別放到 ;緩沖區(qū)35H單元和34H單元
MOV A,HOUR ;小時(shí)單元給A
CJNE
A,#24,RN;判斷到24小時(shí)嗎,若未到則返回;主程序
MOV
A,#00H ;24小時(shí)到,小時(shí)單元清0
MOV
HOUR,A
MOV
R1,#35H
;指向顯示緩沖區(qū)的33H單元
LCALL
BINBCD ;調(diào)拆字子程序
RN:POP
ACC
RETI ;中斷返回;***********************十六進(jìn)制轉(zhuǎn)BCD碼拆字子程序***********;入口參數(shù):A累加器(待拆開(kāi)的十六進(jìn)制數(shù));R1(拆開(kāi)后BCD碼所存放的末地址);功能:將A累加器中的十六進(jìn)制數(shù)拆開(kāi)為兩個(gè)BCD碼,分別存放到R1指向的兩個(gè)緩沖單元中BINBCD:
MOV
B,#10
DIV
AB ;除以10,得到時(shí)間值的十位和個(gè)位
MOV@R1,A ;十位送相應(yīng)的顯示緩沖區(qū)
DEC
R1 ;指向顯示緩沖區(qū)中的個(gè)位
MOV
A,B ;個(gè)位給ACC
MOV
@R1,A ;個(gè)位值送緩沖區(qū)的相應(yīng)位置
RET
END比較例6.1與例6.2可知,二者功能基本相同。但前者為靜態(tài)顯示,數(shù)碼管恒定點(diǎn)亮,所以顯示亮度較高,但當(dāng)顯示位數(shù)增多時(shí)將使得硬件電路復(fù)雜,占用單片機(jī)口線多,成本高;后者為動(dòng)態(tài)顯示,且采用動(dòng)態(tài)掃描方式,硬件電路相對(duì)簡(jiǎn)單,成本較低,但數(shù)碼管顯示亮度偏低,顯示程序占用CPU的時(shí)間較多。具體應(yīng)用時(shí),應(yīng)根據(jù)實(shí)際情況,選用合適的顯示方式。6.1.3LED大屏幕顯示器無(wú)論是單個(gè)LED(發(fā)光二極管)還是LED7段顯示器(數(shù)碼管),都不能顯示字符(含漢字)及更為復(fù)雜的圖形信息,主要原因是它們沒(méi)有足夠的信息顯示單位。LED點(diǎn)陣顯示是把很多的LED按矩陣方式排列在一起,通過(guò)對(duì)各LED發(fā)光與不發(fā)光的控制來(lái)完成各種字符或圖形的顯示。最常見(jiàn)的LED點(diǎn)陣顯示模塊有5×7(5列7行)、7×9、8×8結(jié)構(gòu),前兩種主要用于顯示各種西文字符,后一種可作為大型電子顯示屏的基本組建單元。本書(shū)將簡(jiǎn)略介紹LED大屏幕顯示原理及接口。
例6.3
編寫(xiě)程序,在如圖6.8所示的8×8LED大屏幕上顯示雨傘圖形。圖6.88×8LED大屏幕的應(yīng)用
解:根據(jù)題意分析,程序設(shè)計(jì)如下:
ROW EQU30H ;行單元地址定義
DOT EQU31H ;DOT地址定義
ORG 0000H AJMP MAIN ORG 0030H
MAIN: MOV DPTR,#TAB ;定義表首地址
MOV ROW,#01H ;行單元的初始內(nèi)容
MOV DOT,#00H ;00H送DOT MOV R7,#08HNEXT_COL: MOV A,ROW MOV P2,A ;行單元內(nèi)容送P2口,選中某一行
RL A ;A的內(nèi)容左移
MOV ROW,A ;更新行單元內(nèi)容,以便選;中下一行
MOV A,DOT ;DOT→A累加器
MOVC A,@A+DPTR ;查表得到該行的顯示碼型
MOV P0,A ;將顯示碼型送P0口
LCALL DELAY_1MS ;延時(shí),得到穩(wěn)定顯示
INC DOT ;DOT加1
DJNZ R7,NEXT_COL;8行未顯示完,繼續(xù)
SJMP $
TAB:DB 0E7H,0C3H,81H,00H,0E7H,0E7H,
0E7H,0E7H
DELAY_1MS:?MOV R4,#250 ;延時(shí)子程序
D0:NOP
NOP
DJNZ R4,D0
RET
END從上述例題可以看出,8×8LED點(diǎn)陣大屏幕可方便地顯示一些簡(jiǎn)單的圖形。下面對(duì)8×8LED點(diǎn)陣大屏幕的結(jié)構(gòu)進(jìn)行介紹。
1.8×8LED點(diǎn)陣簡(jiǎn)介
8×8LED點(diǎn)陣的外觀及引腳圖如圖6.9所示,其等效電路圖如圖6.10所示。在圖6.10中,只要各LED處于正偏(Y方向?yàn)?,X方向?yàn)?),則該LED發(fā)光。如Y7(0)=1,X7(H)=0,則其對(duì)應(yīng)的右下角的LED會(huì)發(fā)光。各LED還需接上限流電阻,實(shí)際應(yīng)用時(shí),限流電阻既可接X(jué)軸,也可接Y軸。在例6.3中,Y軸的8根線連接到了P2口,X軸連接到了P0口,限流電阻連接在Y軸。如果要點(diǎn)亮“雨傘”形狀的第一行,則P2.0為高電平,P1.7~P1.0應(yīng)分別是11100111,即E7H,此數(shù)據(jù)是程序中TAB表格中的第一個(gè)數(shù)值。
2.LED大屏幕顯示器接口電路
LED大屏幕顯示器不僅能顯示文字,還可以顯示圖形、圖像,而且能產(chǎn)生各種動(dòng)畫(huà)效果,是廣告宣傳、新聞傳播的有力工具。LED大屏幕不僅有單色顯示,還有彩色顯示,其應(yīng)用越來(lái)越廣泛,已滲透到人們的日常生活之中。圖6.98×8點(diǎn)陣的外觀及引腳圖圖6.108×8點(diǎn)陣的等效電路圖
1)?LED大屏幕的顯示方式
LED大屏幕顯示可分為靜態(tài)顯示方式和動(dòng)態(tài)掃描顯示方式兩種。靜態(tài)顯示方式下,每一個(gè)像素需要一套驅(qū)動(dòng)電路,如果顯示屏為n×m個(gè)像素,則需要n×m套驅(qū)動(dòng)電路;動(dòng)態(tài)掃描顯示方式則采用多路復(fù)用技術(shù),如果是P路復(fù)用,則每P個(gè)像素需一套驅(qū)動(dòng)電路,n×m個(gè)像素僅需n×m/P套驅(qū)動(dòng)電路。對(duì)動(dòng)態(tài)掃描顯示而言,P越大,驅(qū)動(dòng)電路就越少,成本也就越低,引線也大大減少,更有利于高密度顯示屏的制造。在實(shí)際使用的LED大屏幕顯示器中,很少采用靜態(tài)顯示方式。
2)?8051與LED大屏幕顯示器的接口例6.3的電路連接方法(見(jiàn)圖6.8)是最簡(jiǎn)便的方法之一,8×8LED的16個(gè)引腳直接由端口驅(qū)動(dòng),電路簡(jiǎn)單,編程采用動(dòng)態(tài)顯示方法,設(shè)計(jì)流程清晰明了。
例6.4
修改例6.3程序,使該8×8LED交替顯示0、1、…、9。
解:(1)題意分析。在例6.3中,顯示的是一個(gè)固定的圖形,程序設(shè)計(jì)的思路與數(shù)碼管LED顯示基本相同:首先選中8×8LED的某一行,然后通過(guò)查表指令得到這一行要點(diǎn)亮的狀態(tài)所對(duì)應(yīng)的碼型,并送到相應(yīng)的端口,延時(shí)一定時(shí)間(1ms)后,再選中下一行、送該行的顯示狀態(tài)碼型、延時(shí)……如此循環(huán)直至8行均顯示一遍,時(shí)間約為8ms,然后再?gòu)牡谝恍虚_(kāi)始循環(huán),利用人眼的視覺(jué)暫留作用,在8×8大屏幕可看到穩(wěn)定的圖形。本題目要求交替顯示0、1、…、9,在進(jìn)行程序設(shè)計(jì)時(shí)可以首先參照例6.3的方法,對(duì)8行輪流掃描多遍以穩(wěn)定顯示第一個(gè)字符“0”。假如一個(gè)字符輪流掃描255遍,那么一個(gè)字符顯示的時(shí)間約為2s;然后再進(jìn)行下一個(gè)字符的顯示,此時(shí)只需要更改顯示的狀態(tài)碼即可,具體實(shí)現(xiàn)可通過(guò)修改查表地址來(lái)完成。如此循環(huán),每個(gè)數(shù)字顯示約2s的時(shí)間,人眼可以看到清楚穩(wěn)定的顯示。根據(jù)此想法設(shè)計(jì)程序流程圖如圖6.11所示。圖6.11例6.4的程序流程圖(2)程序設(shè)計(jì)如下:
ROW EQU 30H ;行單元地址定義
DOT EQU 31H ORG 0000H LJMP START ORG 0100H
START: MOV DPTR,#TABLE ;設(shè)置表格首地址
MOV R5,#10 ;設(shè)置顯示字符數(shù)為;10個(gè)NEXT_CHAR: MOV R6,#255 ;設(shè)置每個(gè)字符顯示;的次數(shù)為255次ONE_CHAR: MOV ROW,#01H ;指向第一行
MOV DOT,#00H ;00→DOT MOV R7,#8 ;設(shè)置掃描行的次數(shù)
DOT_CHAR:MOV
A,ROW
MOV
P2,A ;行單元的內(nèi)容送P2口
RL
A ;A左移
MOV
ROW,A ;送給行單元,指向下一行
MOV
A,DOT ;DOT→A
MOVC
A,@A+DPTR;查表得該行的顯示碼型
MOV
P0,A ;將顯示碼型送到P0口
LCALLDELAY_1MS;調(diào)延時(shí)子程序
INC
DOT ;DOT加1,以便查表格的;下一個(gè)數(shù)值
DJNZ
R7,DOT_CHAR ;8行掃描完了嗎?若沒(méi);有完,則繼續(xù)下一行
DJNZ
R6,ONE_CHAR ;顯示次數(shù)到255次?若;未到則繼續(xù)重復(fù)顯示
MOVA,DPL ;一個(gè)字符顯示完則更新查表;首地址,DPL→A
ADD
A,#8 ;A+8→A MOV
DPL,A ;A→DPL MOV
A,DPH ;DPH→A
ADDC
A,#0 ;A+CY→A MOV
DPH,A ;A→DPH DJNZ
R5,NEXT_CHAR;10個(gè)字符顯示完?未;完則開(kāi)始下一個(gè)的掃描
LJMP
START ;全部顯示完,則重新開(kāi)始DELAY_1MS: 略,參見(jiàn)例6.3
TABLE:DB00H,1CH,36H,36H,36H,36H,36H,1CH
;“0”的顯示字符表格
DB00H,18H,1CH,18H,18H,18H,18H,18H
;“1”的顯示字符表格
DB00H,1EH,30H,30H,1CH,06H,06H,3EH
;“2”的顯示字符表格
DB00H,1EH,30H,30H,1CH,30H,30H,1EH
;“3”的顯示字符表格
DB00H,30H,38H,34H,32H,7EH,30H,30H
;“4”的顯示字符表格
DB00H,1EH,02H,02H,1EH,10H,10H,1EH
;“5”的顯示字符表格
DB00H,1CH,06H,1EH,36H,36H,36H,1CH
;“6”的顯示字符表格
DB00H,3EH,30H,18H,18H,0CH,0CH,0CH
;“7”的顯示字符表格
DB00H,1CH,36H,36H,1CH,36H,36H,1CH
;“8”的顯示字符表格
DB00H,1CH,36H,36H,36H,3CH,30H,1CH
;“9”的顯示字符表格
END實(shí)際應(yīng)用中,由于顯示要求的內(nèi)容豐富,所需顯示器件復(fù)雜,同時(shí)顯示屏體與計(jì)算機(jī)及控制器有一定的距離,因此應(yīng)盡量減少兩者之間控制信號(hào)線的數(shù)量。信號(hào)一般采用串行移動(dòng)方式傳送。由計(jì)算機(jī)控制器送出的信號(hào)只有5個(gè),即時(shí)鐘PCLK、顯示數(shù)據(jù)DATA、行控制信號(hào)HS(串行傳送時(shí),僅需一根信號(hào)線)、場(chǎng)控制信號(hào)VS(串行傳送時(shí),僅需一根信號(hào)線)以及地線。圖6.12是8051與LED大屏幕顯示器接口的一種具體應(yīng)用。圖中,LED顯示器為8×64點(diǎn)陣,由8個(gè)8×8的點(diǎn)陣LED顯示塊拼裝而成。8個(gè)塊的行線相應(yīng)地并接在一起,形成8路復(fù)用,行控制信號(hào)HS由Pl口經(jīng)行驅(qū)動(dòng)后形成行掃描信號(hào)輸出(并行傳送,8根信號(hào)線)。8個(gè)塊的列控制信號(hào)分別經(jīng)由各74LS164驅(qū)動(dòng)后輸出。74LS164為8位串入并出移位寄存器,8個(gè)74LS164串接在一起,形成8×8=64位串入并出的移位寄存器,其輸出對(duì)應(yīng)64列。顯示數(shù)據(jù)DATA由8051的RXD端輸出,時(shí)鐘PCLK由8051的TXD端輸出。RXD發(fā)送串行數(shù)據(jù),而TXD輸出移位時(shí)鐘,此時(shí)串行口工作于方式0,即同步串行移位寄存器狀態(tài)。顯示屏體的工作以行掃描方式進(jìn)行,掃描顯示過(guò)程是每一次顯示一行64個(gè)LED點(diǎn),顯示時(shí)間稱為行周期。8行掃描顯示完成后開(kāi)始新一輪掃描,這段時(shí)間稱為場(chǎng)周期。顯示數(shù)據(jù)DATA與時(shí)鐘PCLK配合傳送某一行(64個(gè)點(diǎn))的顯示信息。在一行周期內(nèi)有64個(gè)PCLK脈沖信號(hào),它將一行的顯示信息串行移入8個(gè)串入并出移位寄存器74LS164中。在行結(jié)束時(shí),由行信號(hào)HS控制將顯示信息存入對(duì)應(yīng)鎖存電路并開(kāi)始新一行顯示,直到下一行顯示數(shù)據(jù)開(kāi)始鎖入為止,由此實(shí)現(xiàn)行掃描。因圖6.12所示LED顯示屏只有8行,所以無(wú)需采用場(chǎng)掃描控制信號(hào)VS,且行、場(chǎng)掃描的控制可通過(guò)單片機(jī)對(duì)P1口編程實(shí)現(xiàn)。圖中的鎖存與驅(qū)動(dòng)電路可由74LS273、74LS373或74LS374等集成電路實(shí)現(xiàn)。圖6.128051與LED大屏幕顯示器的接口
3)?LED大屏幕顯示的編程要點(diǎn)由上述內(nèi)容可知,LED大屏幕顯示一般都采用動(dòng)態(tài)顯示,所以要實(shí)現(xiàn)穩(wěn)定顯示,需遵循動(dòng)態(tài)掃描的規(guī)律?,F(xiàn)將編程要點(diǎn)敘述如下:
(1)從串行口輸出8字節(jié)共64位的數(shù)據(jù)到74LS164中,形成64列的列驅(qū)動(dòng)信號(hào)。
(2)從P1口輸出相應(yīng)的行掃描信號(hào),與列信號(hào)在一起,點(diǎn)亮行中有關(guān)的點(diǎn)。
(3)延時(shí)l~2ms。此時(shí)間受50Hz閃爍頻率的限制,不能太大,應(yīng)保證掃描所有8行(即一幀數(shù)據(jù))所用時(shí)間之和在20ms以內(nèi)。
(4)從串行口輸出下一組數(shù)據(jù)后,從P1口輸出下一行掃描信號(hào)并延時(shí)l~2ms,完成下一行的顯示。
(5)重復(fù)上述操作,直到所有8行全掃描顯示一次,即完成一幀數(shù)據(jù)的顯示。
(6)重新掃描顯示的第一行,開(kāi)始下一幀數(shù)據(jù)的掃描顯示工作。如此不斷地循環(huán),即可完成相應(yīng)的畫(huà)面顯示。
(7)要更新畫(huà)面時(shí),只需將新畫(huà)面的點(diǎn)陣數(shù)據(jù)輸入到顯示緩沖區(qū)中即可。
(8)通過(guò)控制畫(huà)面的顯示,可以形成多種顯示方式,如左平移、右平移、開(kāi)幕式、合幕式、上移、下移及動(dòng)畫(huà)等。
4)?LED大屏幕顯示的擴(kuò)展如將圖6.12顯示屏擴(kuò)展為320×32點(diǎn)陣的顯示屏,則水平方向應(yīng)有40個(gè)8×8LED點(diǎn)陣,垂直方向應(yīng)有4個(gè)8×8LED點(diǎn)陣,整個(gè)顯示屏由40×4=160個(gè)8×8LED點(diǎn)陣組成。由于一行的LED點(diǎn)數(shù)太多,可將行驅(qū)動(dòng)分成5組驅(qū)動(dòng),每一組驅(qū)動(dòng)8×8=64個(gè)LED點(diǎn)。由于每一場(chǎng)對(duì)應(yīng)的行數(shù)達(dá)32行,因此如仍采用8路復(fù)用,則垂直方向應(yīng)分成4組驅(qū)動(dòng),每一組驅(qū)動(dòng)8行LED點(diǎn)。此時(shí)必須引入場(chǎng)掃描控制信號(hào)VS,如采用并行傳送方式,則需占用單片機(jī)的4根I/O口線(加譯碼器只需2根)。場(chǎng)掃描控制信號(hào)VS與相應(yīng)的行驅(qū)動(dòng)電路配合,使行掃描信號(hào)分時(shí)送入垂直方向的4組LED點(diǎn)陣,以此實(shí)現(xiàn)場(chǎng)掃描。上述大屏幕LED顯示的行、場(chǎng)控制信號(hào)的傳輸均采用并行方式,掃描驅(qū)動(dòng)電路相對(duì)簡(jiǎn)單,但其占用單片機(jī)的資源較多(需10~12根I/O口線),且信號(hào)傳輸線多,成本高,抗干擾性能差,不適合遠(yuǎn)距離控制。因此在實(shí)用電路中,常采用串行傳輸方式。采用串行傳輸只需占用2根I/O口線,相應(yīng)的信號(hào)傳輸線也減少,成本降低,抗干擾性能增強(qiáng)。不足之處是掃描驅(qū)動(dòng)需增加8位移位寄存器(可采用74LS164),硬件電路相對(duì)復(fù)雜一些。以上簡(jiǎn)要地介紹了大屏幕LED顯示器的工作原理,而實(shí)際的大屏幕顯示器比這要復(fù)雜得多,要考慮很多問(wèn)題,如采用多少路復(fù)用為好,選擇什么樣的驅(qū)動(dòng)器,當(dāng)顯示像素很多時(shí)是否要采用DMA傳輸?shù)?。但不論LED大屏幕顯示器的實(shí)際電路如何復(fù)雜,其顯示原理是相同的,即用動(dòng)態(tài)掃描顯示。限于篇幅,本書(shū)不再贅述,讀者如有興趣,可參閱有關(guān)參考資料。6.1.4LCD液晶顯示器和接口
1.LCD顯示器簡(jiǎn)介
LCD顯示器由于類型、用途不同,因而其性能、結(jié)構(gòu)也不可能完全相同,但其基本形態(tài)和結(jié)構(gòu)卻是大同小異的。
1)?LCD顯示器的結(jié)構(gòu)液晶顯示器的結(jié)構(gòu)圖如圖6.13所示。不同類型的液晶顯示器的組成可能會(huì)有所不同,但是所有液晶顯示器都可以認(rèn)為是由兩片光刻有透明導(dǎo)電電極的基板夾持一個(gè)液晶層,經(jīng)封接而成的一個(gè)偏平盒(有時(shí)在外表面還可能貼裝有偏振片)。圖6.13液晶顯示器的結(jié)構(gòu)圖
2)?LCD顯示器的特點(diǎn)液晶顯示器有以下幾個(gè)顯著特點(diǎn):
(1)低壓微功耗。其工作電壓只有3~5V,工作電流只有幾個(gè)微安每平方厘米。因此它成為便攜式和手持式儀器儀表的顯示屏幕。
(2)平板型結(jié)構(gòu)。LCD顯示器內(nèi)有由兩片平行玻璃組成的夾層盒,面積可大可小,且適合于大批量生產(chǎn),安裝時(shí)占用體積小,減小了設(shè)備體積。
(3)被動(dòng)顯示。液晶本身不發(fā)光,而是靠調(diào)制外界光進(jìn)行顯示,因此適合人的視覺(jué)習(xí)慣,不會(huì)使人眼睛疲勞。
(4)顯示信息量大。LCD顯示器的像素可以做到很小,相同面積上可容納更多信息。
(5)易于彩色化。
(6)沒(méi)有電磁輻射。LCD顯示器在顯示期間不會(huì)產(chǎn)生電磁輻射,對(duì)環(huán)境無(wú)污染,有利于人體健康。
(7)壽命長(zhǎng)。LCD器件本身無(wú)老化問(wèn)題,壽命極長(zhǎng)。
2.LCD顯示器分類通??蓪CD分為筆段型、字符型和點(diǎn)陣圖形型。
(1)筆段型。筆段型以長(zhǎng)條狀顯示像素組成一位顯示。該類型主要用于數(shù)字顯示,也可用于顯示西文字母或某些字符。這種段型顯示通常有6段、7段、8段、9段、14段和16段等,在形狀上總是圍繞數(shù)字“8”的結(jié)構(gòu)而變化,其中以7段顯示最常用,廣泛用于電子表、數(shù)字儀表、筆記本計(jì)算機(jī)中。
(2)字符型。字符型液晶顯示模塊是專門用來(lái)顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶顯示模塊。在電極圖形設(shè)計(jì)上它是由若干個(gè)5×8或5×11點(diǎn)陣組成的,每一個(gè)點(diǎn)陣顯示一個(gè)字符。這類模塊廣泛應(yīng)用于手機(jī)、電子筆記本等電子設(shè)備中。
(3)點(diǎn)陣圖形型。點(diǎn)陣圖形型是指在一平板上排列多行和多列,形成矩陣形式的晶格點(diǎn),點(diǎn)的大小可根據(jù)顯示的清晰度來(lái)設(shè)計(jì)。這類液晶顯示器可廣泛用于圖形顯示,如游戲機(jī)、筆記本電腦和彩色電視等設(shè)備中。
3.8051與筆段型LCD的接口用單片機(jī)的并行接口與筆段型LCD直接相連,再通過(guò)軟件編程驅(qū)動(dòng)筆段型LCD顯示,是實(shí)現(xiàn)靜態(tài)液晶顯示器件驅(qū)動(dòng)的常用方法之一,它尤其適合于位數(shù)較少的筆段型LCD。圖6.14給出了8051與三位半筆段型LCD的接口電路。圖中通過(guò)8051的并行接口P1、P2、P3來(lái)實(shí)現(xiàn)靜態(tài)液晶顯示。編寫(xiě)啟動(dòng)程序的基本要求是:
(1)顯示位的狀態(tài)與背電極BP不在同一狀態(tài)上,即當(dāng)BP為1狀態(tài)時(shí),顯示位數(shù)據(jù)為0狀態(tài);當(dāng)BP為0狀態(tài)時(shí),顯示位數(shù)據(jù)為1狀態(tài)。
(2)不顯示位的狀態(tài)與BP狀態(tài)相同。
(3)定時(shí)間隔地將驅(qū)動(dòng)信號(hào)取反,以實(shí)現(xiàn)交流驅(qū)動(dòng)波形的變化。在編程時(shí)首先要建立顯示緩沖區(qū)和顯示驅(qū)動(dòng)區(qū)。比如把DIS1、DIS2、DIS3單元設(shè)置為顯示緩沖區(qū),同時(shí)建立驅(qū)動(dòng)區(qū)(DRIl、DRI2、DRI3單元),用來(lái)實(shí)現(xiàn)驅(qū)動(dòng)波形的變化和輸出。P1、P2、P3為驅(qū)動(dòng)的輸出瑞。各區(qū)與驅(qū)動(dòng)輸出的對(duì)應(yīng)關(guān)系如表6.3所示。在編程時(shí)首先還要建立顯示字形數(shù)據(jù)庫(kù)?,F(xiàn)設(shè)定顯示狀態(tài)為“l(fā)”,不顯示狀態(tài)為“0”,可得0~9的字型數(shù)據(jù)為:5FH,06H,3BH,2FH,66H,6DH,7DH,07H,7FH,6FH。圖6.148051與筆段型LCD的接口電路表6.3各區(qū)與驅(qū)動(dòng)輸出的對(duì)應(yīng)關(guān)系編程的基本思路是:
(1)使用定時(shí)器產(chǎn)生交流驅(qū)動(dòng)波形。在顯示驅(qū)動(dòng)區(qū)內(nèi)將數(shù)據(jù)求反,然后送驅(qū)動(dòng)輸出端。
(2)在顯示緩沖區(qū)內(nèi)修改顯示數(shù)據(jù),然后將BP位置“0”,以表示有新數(shù)據(jù)輸入。
(3)在顯示驅(qū)動(dòng)程序中先判斷驅(qū)動(dòng)區(qū)BP位是否為“1”。若是“1”,再判斷顯示區(qū)BP位是否為“0”,若為“0”,表示顯示區(qū)的數(shù)據(jù)為新修改的數(shù)據(jù),則將顯示緩沖區(qū)內(nèi)的顯示數(shù)據(jù)寫(xiě)入顯示驅(qū)動(dòng)區(qū)內(nèi),再輸出給驅(qū)動(dòng)輸出端;否則將驅(qū)動(dòng)區(qū)單元內(nèi)容求反后輸出。
(4)如此循環(huán)下去,可實(shí)現(xiàn)在液晶顯示器上的交流驅(qū)動(dòng),進(jìn)而達(dá)到顯示的效果。驅(qū)動(dòng)程序:采用定時(shí)器0為驅(qū)動(dòng)時(shí)鐘,中斷程序?yàn)轵?qū)動(dòng)子程序。程序如下:
DIS1
EQU 30H
DIS2
EQU 31H
DIS3
EQU 32H
DRIl
EQU 33H
DRI2
EQU 34H
DRI3
EQU 35H
ORG
000BH ;定時(shí)器0中斷入口
LCD:MOV TL0,#OEFH ;設(shè)置時(shí)間常數(shù)
MOV TH0,#OD8H ;掃描頻率=50Hz
PUSH ACC ;A入棧
MOV A,DRI3 ;取驅(qū)動(dòng)單元DRI3
JNB ACC.7,LCD1 ;判BP=1否,否則轉(zhuǎn)
MOV A,DIS3 ;取小時(shí)單元DIS3
JB
ACC.7,LCD1 ;判BP=0否,否則轉(zhuǎn)
MOV DIR3,A ;顯示區(qū)→驅(qū)動(dòng)區(qū)
SETB ACC.7 ;置BP=1表示數(shù)據(jù)已舊
MOV DIS3,A ;寫(xiě)入顯示單元
MOV DRI2,DIS2
MOV DRI1,DIS1
LJMP LCD2 ;轉(zhuǎn)驅(qū)動(dòng)輸出
LCD1:MOV A,DRI3
CPL A ;驅(qū)動(dòng)單元數(shù)據(jù)取反
MOV DRI3,A
MOV A,DRI2
CPL A
MOV DRI2,A
MOV A,DRI1
CPL A
MOV DRI1,A
LCD2:MOV P1,DRI1 ;驅(qū)動(dòng)輸出
MOV P2,DRI2
MOV P3,DRI3
POP ACC ;A出棧
SETB TR0
RETI驅(qū)動(dòng)程序使用了定時(shí)器0中斷方式,定時(shí)器每20ms中斷一次,在程序中要判斷顯示驅(qū)動(dòng)區(qū)BP位的狀態(tài)。當(dāng)BP=1時(shí),可以修改顯示驅(qū)動(dòng)區(qū)內(nèi)容,這時(shí)判斷一下顯示區(qū)BP位的狀態(tài)。當(dāng)BP=0時(shí)表示顯示區(qū)的數(shù)據(jù)已被更新,此時(shí)需要將顯示區(qū)的數(shù)據(jù)傳輸給驅(qū)動(dòng)區(qū),再輸出給驅(qū)動(dòng)輸出瑞。因?yàn)樵瑽P為“l(fā)”,所以此時(shí)修改驅(qū)動(dòng)區(qū)數(shù)據(jù)正好也可實(shí)現(xiàn)交流驅(qū)動(dòng)。若驅(qū)動(dòng)區(qū)BP=0或顯示區(qū)BP=1(表示數(shù)據(jù)未被修改),那么僅將驅(qū)動(dòng)區(qū)數(shù)據(jù)取反,再輸出給驅(qū)動(dòng)輸出端驅(qū)動(dòng)液晶顯示器件。在主程序中,要實(shí)現(xiàn)中斷方式驅(qū)動(dòng)液晶顯示器件,需要一些初始化設(shè)置,同樣也要對(duì)顯示緩沖區(qū)、顯示驅(qū)動(dòng)區(qū)和驅(qū)動(dòng)輸出進(jìn)行初始化。受篇幅限制,這里未提供主程序及四位數(shù)字修改子程序。
4.8051與字符型LCD的接口字符型液晶顯示模塊是一類專用于顯示字母、數(shù)字、符號(hào)等的點(diǎn)陣型液晶顯示模塊,它是由若干個(gè)5×8或5×11點(diǎn)陣塊組成的字符塊集。每一個(gè)字符塊是一個(gè)字符位,每一位都可以顯示一個(gè)字符,字符位之間空有一個(gè)點(diǎn)距的間隔,起著字符間距和行距的作用;這類模塊使用的是專用于字符顯示控制與驅(qū)動(dòng)的IC芯片。因此,這類模塊的應(yīng)用范圍僅局限于字符而不包括圖形,所以稱其為字符型液晶顯示模塊。字符型液晶顯示驅(qū)動(dòng)控制器廣泛應(yīng)用于字符型液晶顯示模塊上。目前最常用的字符型液晶顯示驅(qū)動(dòng)控制器是HD44780U,最常用的液晶顯示驅(qū)動(dòng)器為HD44100及其替代品。字符型液晶顯示模塊在世界上是比較通用的,而且接口格式也是比較統(tǒng)一的,其主要原因是各制造商所采用的模塊控制器都是HD44780U及其兼容品。不管顯示屏的尺寸如何,它的操作指令及其形成的模塊接口信號(hào)定義都是兼容的。所以只要會(huì)使用一種字符型液晶顯示模塊,就會(huì)使用所有的字符型液晶顯示模塊。
HD44780U由控制部、驅(qū)動(dòng)部和接口部三部分組成??刂撇渴荋D44780U的核心,它產(chǎn)生HD44780U內(nèi)部的工作時(shí)鐘,控制著全部功能邏輯電路的工作狀態(tài),管理著字符發(fā)生器CGROM和CGRAM、顯示存儲(chǔ)器DDRAM。HD44780U的控制部由時(shí)序發(fā)生器電路、地址指針計(jì)數(shù)器AC、光標(biāo)閃爍控制電路、字符發(fā)生器、顯示存儲(chǔ)器和復(fù)位電路組成。
HD44780U的驅(qū)動(dòng)部具有液晶顯示驅(qū)動(dòng)能力和擴(kuò)展驅(qū)動(dòng)能力,由并/串?dāng)?shù)據(jù)轉(zhuǎn)換電路、16路行驅(qū)動(dòng)器和16位移位寄存器、40路列驅(qū)動(dòng)器和40位鎖存器、40位移位寄存器和液晶顯示驅(qū)動(dòng)信號(hào)輸出以及液晶顯示驅(qū)動(dòng)偏壓等組成。
HD44780U的接口部是HD44780U與計(jì)算機(jī)的接口,由I/O緩沖器、指令寄存器和譯碼器、數(shù)據(jù)寄存器、“忙”標(biāo)志BF觸發(fā)器等組成。液晶顯示與控制常常被封裝成功能統(tǒng)一的模塊,以方便用戶開(kāi)發(fā)和使用。常用的典型液晶模塊有LCM-162,其中162是指2行16位的字符模塊,其基本組成如圖6.15所示。圖6.15液晶模塊的基本組成從圖6.15可以看出,液晶控制模塊封裝為統(tǒng)一接口,有8條數(shù)據(jù)線,3條控制線;與微處理器或微控制器相連,通過(guò)送入數(shù)據(jù)和指令,就可使模塊正常工作。LCD模塊的管腳排列與功能如表6.4所示,寄存器選擇如表6.5所示。表6.4LCD模塊的管腳排列與功能表6.5LCD模塊的寄存器選擇
LCM-162的讀/寫(xiě)操作、屏幕和光標(biāo)的操作等都是通過(guò)指令編程來(lái)實(shí)現(xiàn)的。LCM-162液晶模塊內(nèi)部的控制器共有11條控制指令,如表6.6所示。表6.6CM-162液晶模塊的控制指令根據(jù)液晶模塊的顯示原理,液晶上顯示的內(nèi)容對(duì)應(yīng)在DDRAM相應(yīng)的地址中,顯示位與DDRAM地址的對(duì)應(yīng)關(guān)系如表6.7所示。表6.7顯示位與DDRAM地址的對(duì)應(yīng)關(guān)系例如第二行第一個(gè)字符的地址是40H,那么是否直接寫(xiě)入40H就可以將光標(biāo)定位在第二行第一個(gè)字符的位置上呢?顯然不行,因?yàn)閺谋?.6可以看出,在設(shè)置數(shù)據(jù)存儲(chǔ)器(DDRAM)地址時(shí)要求最高位D7恒定為高電平1,所以實(shí)際寫(xiě)入的數(shù)據(jù)應(yīng)該是11000000B,即0C0H。
5.字符型液晶顯示模塊接口電路單片機(jī)與字符型LCD顯示模塊的連接方法分為直接訪問(wèn)和間接訪問(wèn)兩種,數(shù)據(jù)傳輸?shù)男问椒譃?位和4位兩種。
1)直接訪問(wèn)方式直接訪問(wèn)方式下,字符型液晶顯示模塊作為存儲(chǔ)器或I/O接口設(shè)備直接連到單片機(jī)總線上。采用8位數(shù)據(jù)傳輸形式時(shí),數(shù)據(jù)端DB0~DB7直接與單片機(jī)的數(shù)據(jù)線相連,寄存器選擇端RS信號(hào)和讀/寫(xiě)選擇端R/信號(hào)由單片機(jī)的地址線來(lái)控制,使能端E信號(hào)則由單片機(jī)的和信號(hào)共同控制,以實(shí)現(xiàn)HD44780所需的接口時(shí)序。圖6.16給出了直接訪問(wèn)方式下8031與字符型液晶顯示模塊的接口電路。在圖6.16中,8位數(shù)據(jù)總線與8031的數(shù)據(jù)總線直接相連,P0口產(chǎn)生的地址信號(hào)被鎖存在74LS373內(nèi),其輸出Q0、Q1給出了RS和R/的控制信號(hào)。E信號(hào)由和信號(hào)邏輯與非后產(chǎn)生的信號(hào)與高位地址線組成的“片選”信號(hào)共同選通控制。圖6.16直接訪問(wèn)方式下8031與字符型液晶顯示模塊的接口高3位地址線經(jīng)譯碼輸出打開(kāi)了E信號(hào)的控制門,接著或控制信號(hào)和P0口進(jìn)行數(shù)據(jù)傳輸,實(shí)現(xiàn)對(duì)字符型LCD顯示模塊的每一次訪問(wèn)。在寫(xiě)操作過(guò)程中,HD44780要求E信號(hào)結(jié)束后,數(shù)據(jù)線上的數(shù)據(jù)要保持10μs以上的時(shí)間,而單片機(jī)8031的P0接口在信號(hào)失效后將有58μs(以12MHz晶振計(jì)算)的數(shù)據(jù)保持時(shí)間,足以滿足該項(xiàng)控制時(shí)間的要求。在讀操作過(guò)程中,HD44780在E信號(hào)為高電平時(shí)就將所需數(shù)據(jù)送到數(shù)據(jù)線上,E信號(hào)結(jié)束后,數(shù)據(jù)可保持20μs,這滿足了8031對(duì)該時(shí)序的要求。單片機(jī)對(duì)字符型LCD顯示模塊的操作是通過(guò)軟件實(shí)現(xiàn)的。編程時(shí)要求單片機(jī)每次訪問(wèn)都要先對(duì)忙標(biāo)志BF進(jìn)行識(shí)別,當(dāng)BF為0,即HD44780允許單片機(jī)訪問(wèn)時(shí),再進(jìn)行下一步操作。在圖6.16所示的電路中,產(chǎn)生的操作字符型液晶顯示模塊的各驅(qū)動(dòng)子程序如下:
COM EQU 20H ;指令寄存器
DAT EQU 21H ;數(shù)據(jù)寄存器
CW_Add EQU 0F000H ;指令口寫(xiě)地址
CR_Add EQU 0F002H ;指令口讀地址
DW_Add EQU 0F001H ;數(shù)據(jù)口寫(xiě)地址
DR-Add EQU 0F003H ;數(shù)據(jù)口讀地址
(1)讀BF和AC值子程序:
PR0: PUSH DPH ;保護(hù)現(xiàn)場(chǎng)
PUSH DPL
PUSH ACC
MOV DPTR,#CR_Add ;設(shè)置指令口讀地址
MOVX A,@DPTR ;讀BF和AC值
MOV COM,A ;存入COM單元
POP ACC ;恢復(fù)現(xiàn)場(chǎng)
POP DPL
POP DPH
RET
(2)寫(xiě)指令代碼子程序:
PR1:PUSH DPH
PUSH DPL
PUSH ACC
MOV DPTR,#CR_Add;設(shè)置指令口讀地址
PR11:MOVX A,@DPTR ;讀BF和AC值
JB ACC.7,PR11 ;判BF=0?是,則繼續(xù)
MOV A,COM ;取指令代碼
MOV DPTR,#CW_Add;設(shè)置指令口寫(xiě)地址
MOVX @DPTR,A ;寫(xiě)指令代碼
POP ACC
POP DPL
POP DPH
RET
(3)寫(xiě)顯示數(shù)據(jù)子程序:
PR2:PUSH DPH
PUSH DPL
PUSH ACC
MOV DPTR,#CR_Add;設(shè)置指令口讀地址
PR21:MOVX A,@DPTR ;讀BF和AC值
JB ACC.7,PR21 ;判BF=0?是,則繼續(xù)
MOV A,DAT ;取數(shù)據(jù)
MOV DPTR,#DW_Add;設(shè)置數(shù)據(jù)口寫(xiě)地址
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45137-2024畜禽基因組編輯育種技術(shù)規(guī)程
- 2025年度緊急避難場(chǎng)所標(biāo)示牌設(shè)計(jì)與施工合同3篇
- 2024物業(yè)服務(wù)合同補(bǔ)充:社區(qū)物業(yè)智能化改造協(xié)議3篇
- 2024水廠給排水設(shè)備采購(gòu)與維護(hù)服務(wù)合同
- 腦梗死健康宣教
- 2024年水利樞紐建設(shè)勞務(wù)承包合同
- 專業(yè)個(gè)人道路運(yùn)輸協(xié)議樣式2024
- 2024年財(cái)產(chǎn)質(zhì)押擔(dān)保合同模板6篇
- 福建省南平市萬(wàn)安中學(xué)2022年高一生物下學(xué)期期末試題含解析
- 色彩之旅模板
- 制作課件wps教學(xué)課件
- MCN機(jī)構(gòu)簽約合同范本
- 解讀智能問(wèn)答系統(tǒng)研究
- 2024年露天煤礦地質(zhì)勘查服務(wù)協(xié)議版
- 部編版四年級(jí)上冊(cè)道德與法治期末測(cè)試卷
- DB11T 1805-2020 實(shí)驗(yàn)動(dòng)物 病理學(xué)診斷規(guī)范
- 人教版小學(xué)六年級(jí)下冊(cè)音樂(lè)教案全冊(cè)
- 2024年資格考試-WSET二級(jí)認(rèn)證考試近5年真題附答案
- 個(gè)體工商營(yíng)業(yè)執(zhí)照變更委托書(shū)
- 2024版【人教精通版】小學(xué)英語(yǔ)六年級(jí)下冊(cè)全冊(cè)教案
- 人教版歷史2024年第二學(xué)期期末考試七年級(jí)歷史試卷(含答案)
評(píng)論
0/150
提交評(píng)論