單片機(jī)與控制實(shí)驗(yàn)(2)——LED點(diǎn)陣顯示屏
掃描二維碼
隨時(shí)隨地手機(jī)看文章
一、實(shí)驗(yàn)?zāi)康暮鸵?br/>
了解LED點(diǎn)陣顯示的基本原理和實(shí)現(xiàn)方法。掌握點(diǎn)陣漢字庫(kù)的編碼和從標(biāo)準(zhǔn)字庫(kù)中提取漢字編碼的方法。
二、實(shí)驗(yàn)設(shè)備
單片機(jī)測(cè)控實(shí)驗(yàn)系統(tǒng)
LED點(diǎn)陣顯示器實(shí)驗(yàn)?zāi)K
Keil開(kāi)發(fā)環(huán)境
STC-ISP程序下載工具
三、實(shí)驗(yàn)內(nèi)容
了解16*16點(diǎn)陣電路的原理。編寫(xiě)匯編語(yǔ)言程序,編寫(xiě)一行漢字字符(至少三個(gè)字)的顯示程序,并且能夠從左到右(或從右到左)循環(huán)顯示。
四、實(shí)驗(yàn)步驟
1. 掌握點(diǎn)陣式LED顯示屏的控制方法;
2. 使用MCS-51匯編語(yǔ)言,使用LED點(diǎn)陣顯示器顯示出正確的漢字字符及動(dòng)態(tài)效果;
3. 將編譯后的程序下載到51單片機(jī),觀察LED顯示屏的顯示結(jié)果。
五、實(shí)驗(yàn)原理
高亮度LED發(fā)光管構(gòu)成點(diǎn)陣,通過(guò)編程控制可以顯示中英文字符、圖形及視頻動(dòng)態(tài)圖形。所顯示字符的點(diǎn)陣數(shù)據(jù)可以自行編寫(xiě)(即直接點(diǎn)陣畫(huà)圖),也可從標(biāo)準(zhǔn)字庫(kù)(如ASC16、HZ16)中提取。后者需要正確掌握字庫(kù)的編碼方法和字符定位的計(jì)算。
實(shí)驗(yàn)用的LED點(diǎn)陣顯示屏為16*16點(diǎn)陣。
行和列分別使用兩個(gè)移位寄存器作為輸出。
當(dāng)移位寄存器輸出的第i行為0,第j列為1時(shí)點(diǎn)亮點(diǎn)(i,j)。
為了能夠顯示出一個(gè)點(diǎn)陣字型,需要進(jìn)行循環(huán)掃描,也就是每一次只點(diǎn)亮一行,然后在列上輸出該列對(duì)應(yīng)的16個(gè)點(diǎn)陣值。
輸出一行后暫停一段時(shí)間,輸出下一行。為了達(dá)到較好的顯示效果,整屏總的掃描時(shí)間不高于40ms。
上述過(guò)程中行列可以互換。
實(shí)驗(yàn)中使用的移位寄存器是74HC595,它是一個(gè)同時(shí)具有串行移位和輸出鎖存驅(qū)動(dòng)功能的器件。
74HC595是具有8位移位寄存器和一個(gè)存儲(chǔ)器,三態(tài)輸出功能。 移位寄存器和存儲(chǔ)器是分別的時(shí)鐘。
數(shù)據(jù)在SRCK(移位寄存器時(shí)鐘輸入)的上升沿輸入到移位寄存器中,在RCK(存儲(chǔ)器時(shí)鐘輸入)的上升沿輸入到存儲(chǔ)寄存器中去。
移位寄存器有一個(gè)串行移位輸入(行Dx(P00)、列Dy(P03)),和一個(gè)串行輸出(QH),和一個(gè)異步的低電平復(fù)位,存儲(chǔ)寄存器有一個(gè)并行8位的,具備三態(tài)的總線(xiàn)輸出,當(dāng)使能 (P02和P07為低電平)時(shí),存儲(chǔ)寄存器的數(shù)據(jù)輸出到總線(xiàn)。
在控制74HC595時(shí),首先將數(shù)據(jù)放到串行輸入的SI端,然后在串行時(shí)鐘SRCK上產(chǎn)生一個(gè)脈沖,即可輸出一個(gè)bit,重復(fù)以上步驟16次,輸出所有列值。
然后給存儲(chǔ)器時(shí)鐘RCK一個(gè)脈沖,將串行數(shù)據(jù)鎖存起來(lái)。將使能端 輸出低電平,驅(qū)動(dòng)到LED點(diǎn)陣上。
行的輸出每次只移位一次,并重新鎖存即可。
其他信息見(jiàn)給定的參考資料。
六、實(shí)驗(yàn)代碼
ORG 0000H
AJMP START
ORG 0030H
START:
D_X EQU P0.0
CK_X EQU P0.1
CK_XLEQU P0.2
D_YEQU P0.3
EN_YEQU P0.4
CK_Y EQU P0.5
CK_YLEQU P0.6
EN_X EQU P0.7
COUNT EQU R0
COUNT_XEQU R3
COUNT_YEQU R4
MOV R0,#0;完成第R0/2屏掃描
MOV R1,#8
MOVR2,#16
MOV COUNT_X,#0
MOV COUNT_Y,#0
MOVR5,#32;一屏16列,總共掃描48列,需要掃48-16=32屏
CLR EN_X
CLR EN_Y
;初始化
MAIN:
CLR A
MOVCOUNT_Y,A;COUNT_Y=0
CLRA
MOVA,COUNT
MOVCOUNT_X,A;COUNT_X=COUNT
LOOP:
ACALLDISPLAY_Y
ACALLDISPLAY_X
ACALL DELAY
DJNZR2,LOOP
;長(zhǎng)延遲
MOVR1,#0FFH
MOVR7,#2FH
L_DELAY:
ACALLDELAY
DJNZR1,L_DELAY
DJNZR7,L_DELAY
MOVR1,#8
INCCOUNT
INCCOUNT ;掃一屏,COUNT加2
DJNZR5,MAIN
MOVR5,#0FFH
AJMPSTART
DISPLAY_Y:
MOV DPTR,#TAB_Y
CLR A
MOVA,COUNT_Y
MOVC A,@A+DPTR
MOVR1,#8
LP_Y1:
RLC A
CLR CK_Y
MOV D_Y,C
SETB CK_Y
DJNZ R1,LP_Y1
MOVR1,#8
INCCOUNT_Y
CLR A
MOVA,COUNT_Y
MOVC A,@A+DPTR
LP_Y2:
RLC A
CLR CK_Y
MOV D_Y,C
SETB CK_Y
DJNZ R1,LP_Y2
MOVR1,#8
INCCOUNT_Y
CLR CK_YL
NOP
SETB CK_YL
CLR EN_Y
CLRCK_YL
RET
DISPLAY_X:
MOV DPTR,#TAB_X
CLR A
MOVA,COUNT_X
MOVC A,@A+DPTR
MOVR1,#8
LP_X1:
RLC A
CLR CK_X
MOV D_X,C
SETB CK_X
DJNZ R1,LP_X1
MOV R1,#8
INCCOUNT_X
CLR A
MOVA,COUNT_X
MOVC A,@A+DPTR
LP_X2:
RLC A
CLR CK_X
MOV D_X,C
SETB CK_X
DJNZ R1,LP_X2
MOVR1,#8
INCCOUNT_X
CLR CK_XL
NOP
SETB CK_XL
CLR EN_X
CLR CK_XL
RET
;延遲函數(shù)
DELAY:
MOVR6,#0FH
DJNZ R6,$
RET
TAB_X:
;===========================================================================
;我(0) 愛(ài)(1) 你(2)
DB 04H,00H,24H,10H,24H,12H,24H,21H,7FH,0FEH,0C4H,40H,44H,82H,04H,02H;
DB 04H,04H,0FFH,0C8H,04H,30H,44H,28H,34H,44H,05H,82H,04H,1FH,00H,00H;"我",0
DB 01H,00H,26H,82H,34H,84H,2CH,89H,24H,91H,24H,0E1H,37H,0B2H,4CH,0AAH;
DB 44H,0A4H,44H,0A4H,4CH,0AAH,74H,0B2H,0C4H,81H,45H,01H,06H,01H,00H,00H;"愛(ài)",1
DB 00H,80H,01H,00H,06H,00H,1FH,0FFH,0E0H,00H,02H,08H,04H,30H,18H,0C0H;
DB F0H,02H,10H,01H,13H,0FEH,10H,00H,10H,80H,14H,60H,18H,18H,00H,00H;"你",2
;===========================================================================
TAB_Y:
;===========================================================================
DB ~80H,0FFH,~40H,0FFH,~20H,0FFH,~10H,0FFH,~08H,0FFH,~04H,0FFH,~02H,0FFH,~01H,0FFH
DB 0FFH,~80H,0FFH,~40H,0FFH,~20H,0FFH,~10H,0FFH,~08H,0FFH,~04H,0FFH,~02H,0FFH,~01H
;===========================================================================
END