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