一、實驗目的和要求
了解LED點陣顯示的基本原理和實現(xiàn)方法。掌握點陣漢字庫的編碼和從標準字庫中提取漢字編碼的方法。
二、實驗設備
單片機測控實驗系統(tǒng)
LED點陣顯示器實驗模塊
Keil開發(fā)環(huán)境
STC-ISP程序下載工具
三、實驗內(nèi)容
了解16*16點陣電路的原理。編寫匯編語言程序,編寫一行漢字字符(至少三個字)的顯示程序,并且能夠從左到右(或從右到左)循環(huán)顯示。
四、實驗步驟
1. 掌握點陣式LED顯示屏的控制方法;
2. 使用MCS-51匯編語言,使用LED點陣顯示器顯示出正確的漢字字符及動態(tài)效果;
3. 將編譯后的程序下載到51單片機,觀察LED顯示屏的顯示結(jié)果。
五、實驗原理
高亮度LED發(fā)光管構(gòu)成點陣,通過編程控制可以顯示中英文字符、圖形及視頻動態(tài)圖形。所顯示字符的點陣數(shù)據(jù)可以自行編寫(即直接點陣畫圖),也可從標準字庫(如ASC16、HZ16)中提取。后者需要正確掌握字庫的編碼方法和字符定位的計算。
實驗用的LED點陣顯示屏為16*16點陣。
行和列分別使用兩個移位寄存器作為輸出。
當移位寄存器輸出的第i行為0,第j列為1時點亮點(i,j)。
為了能夠顯示出一個點陣字型,需要進行循環(huán)掃描,也就是每一次只點亮一行,然后在列上輸出該列對應的16個點陣值。
輸出一行后暫停一段時間,輸出下一行。為了達到較好的顯示效果,整屏總的掃描時間不高于40ms。
上述過程中行列可以互換。
實驗中使用的移位寄存器是74HC595,它是一個同時具有串行移位和輸出鎖存驅(qū)動功能的器件。
74HC595是具有8位移位寄存器和一個存儲器,三態(tài)輸出功能。 移位寄存器和存儲器是分別的時鐘。
數(shù)據(jù)在SRCK(移位寄存器時鐘輸入)的上升沿輸入到移位寄存器中,在RCK(存儲器時鐘輸入)的上升沿輸入到存儲寄存器中去。
移位寄存器有一個串行移位輸入(行Dx(P00)、列Dy(P03)),和一個串行輸出(QH),和一個異步的低電平復位,存儲寄存器有一個并行8位的,具備三態(tài)的總線輸出,當使能 (P02和P07為低電平)時,存儲寄存器的數(shù)據(jù)輸出到總線。
在控制74HC595時,首先將數(shù)據(jù)放到串行輸入的SI端,然后在串行時鐘SRCK上產(chǎn)生一個脈沖,即可輸出一個bit,重復以上步驟16次,輸出所有列值。
然后給存儲器時鐘RCK一個脈沖,將串行數(shù)據(jù)鎖存起來。將使能端 輸出低電平,驅(qū)動到LED點陣上。
行的輸出每次只移位一次,并重新鎖存即可。
其他信息見給定的參考資料。
六、實驗代碼
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
;長延遲
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) 愛(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;"愛",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