本文為大大維原創,最早於博客園發表,轉載請注明出處!!!
一、實驗目的和要求
了解LED點陣顯示的基本原理和實現方法。掌握點陣漢字庫的編碼和從標准字庫中提取漢字編碼的方法。
二、實驗設備
單片機測控實驗系統
LED點陣顯示器實驗模塊
Keil開發環境
STC-ISP程序下載工具
三、實驗內容
了解16*16點陣電路的原理。編寫匯編語言程序,編寫一行漢字字符(至少三個字)的顯示程序,並且能夠從左到右(或從右到左)循環顯示。
四、實驗步驟
1. 掌握點陣式LED顯示屏的控制方法;
2. 使用MCS-51匯編語言,使用LED點陣顯示器顯示出正確的漢字字符及動態效果;
3. 將編譯后的程序下載到51單片機,觀察LED顯示屏的顯示結果。
五、實驗原理
高亮度LED發光管構成點陣,通過編程控制可以顯示中英文字符、圖形及視頻動態圖形。所顯示字符的點陣數據可以自行編寫(即直接點陣畫圖),也可從標准字庫(如ASC16、HZ16)中提取。后者需要正確掌握字庫的編碼方法和字符定位的計算。
實驗用的LED點陣顯示屏為16*16點陣。
行和列分別使用兩個移位寄存器作為輸出。
當移位寄存器輸出的第i行為0,第j列為1時點亮點(i,j)。
為了能夠顯示出一個點陣字型,需要進行循環掃描,也就是每一次只點亮一行,然后在列上輸出該列對應的16個點陣值。
輸出一行后暫停一段時間,輸出下一行。為了達到較好的顯示效果,整屏總的掃描時間不高於40ms。
上述過程中行列可以互換。
實驗中使用的移位寄存器是74HC595,它是一個同時具有串行移位和輸出鎖存驅動功能的器件。
74HC595是具有8位移位寄存器和一個存儲器,三態輸出功能。 移位寄存器和存儲器是分別的時鍾。
數據在SRCK(移位寄存器時鍾輸入)的上升沿輸入到移位寄存器中,在RCK(存儲器時鍾輸入)的上升沿輸入到存儲寄存器中去。
移位寄存器有一個串行移位輸入(行Dx(P00)、列Dy(P03)),和一個串行輸出(QH),和一個異步的低電平復位,存儲寄存器有一個並行8位的,具備三態的總線輸出,當使能 (P02和P07為低電平)時,存儲寄存器的數據輸出到總線。
在控制74HC595時,首先將數據放到串行輸入的SI端,然后在串行時鍾SRCK上產生一個脈沖,即可輸出一個bit,重復以上步驟16次,輸出所有列值。
然后給存儲器時鍾RCK一個脈沖,將串行數據鎖存起來。將使能端 輸出低電平,驅動到LED點陣上。
行的輸出每次只移位一次,並重新鎖存即可。
其他信息見給定的參考資料。
六、實驗代碼
ORG 0000H
AJMP START
ORG 0030H
START:
D_X EQU P0.0
CK_X EQU P0.1
CK_XL EQU P0.2
D_Y EQU P0.3
EN_Y EQU P0.4
CK_Y EQU P0.5
CK_YL EQU P0.6
EN_X EQU P0.7
COUNT EQU R0
COUNT_X EQU R3
COUNT_Y EQU R4
MOV R0,#0 ;完成第R0/2屏掃描
MOV R1,#8
MOV R2,#16
MOV COUNT_X,#0
MOV COUNT_Y,#0
MOV R5,#32 ;一屏16列,總共掃描48列,需要掃48-16=32屏
CLR EN_X
CLR EN_Y
;初始化
MAIN:
CLR A
MOV COUNT_Y,A ;COUNT_Y=0
CLR A
MOV A,COUNT
MOV COUNT_X,A ;COUNT_X=COUNT
LOOP:
ACALL DISPLAY_Y
ACALL DISPLAY_X
ACALL DELAY
DJNZ R2,LOOP
;長延遲
MOV R1,#0FFH
MOV R7,#2FH
L_DELAY:
ACALL DELAY
DJNZ R1,L_DELAY
DJNZ R7,L_DELAY
MOV R1,#8
INC COUNT
INC COUNT ;掃一屏,COUNT加2
DJNZ R5,MAIN
MOV R5,#0FFH
AJMP START
DISPLAY_Y:
MOV DPTR,#TAB_Y
CLR A
MOV A,COUNT_Y
MOVC A,@A+DPTR
MOV R1,#8
LP_Y1:
RLC A
CLR CK_Y
MOV D_Y,C
SETB CK_Y
DJNZ R1,LP_Y1
MOV R1,#8
INC COUNT_Y
CLR A
MOV A,COUNT_Y
MOVC A,@A+DPTR
LP_Y2:
RLC A
CLR CK_Y
MOV D_Y,C
SETB CK_Y
DJNZ R1,LP_Y2
MOV R1,#8
INC COUNT_Y
CLR CK_YL
NOP
SETB CK_YL
CLR EN_Y
CLR CK_YL
RET
DISPLAY_X:
MOV DPTR,#TAB_X
CLR A
MOV A,COUNT_X
MOVC A,@A+DPTR
MOV R1,#8
LP_X1:
RLC A
CLR CK_X
MOV D_X,C
SETB CK_X
DJNZ R1,LP_X1
MOV R1,#8
INC COUNT_X
CLR A
MOV A,COUNT_X
MOVC A,@A+DPTR
LP_X2:
RLC A
CLR CK_X
MOV D_X,C
SETB CK_X
DJNZ R1,LP_X2
MOV R1,#8
INC COUNT_X
CLR CK_XL
NOP
SETB CK_XL
CLR EN_X
CLR CK_XL
RET
;延遲函數
DELAY:
MOV R6,#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
七、附錄
實驗電路原理圖:點擊查看