点阵LED一般采用扫描式显示,实际运用分为三种方式:
(1) 点扫描;
(2) 行扫描;
(3) 列扫描。
若使用第一种方式,其扫描频率必须大于16×64=1024Hz,周期小于1ms即
可。若使用第二和第三种方式,则频率必须大于16×8=128Hz,周期小于7.8ms即可符合视觉暂留要求。此外一次驱动一列或一行(8颗LED)时需外加驱动电路提高电流,否则LED亮度会不足。如图3所示。
下面是一个用P1口控制扫描,用74HC164控制显示输出,使8×8点阵LED显示一个“×”的例程。如图(3)所示。
CLK EQU P3.2
DINA EQU P3.3
DINB EQU P3.4
CLEAR EQU P3.5
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN:
MOV SP,#70H 设堆栈指针
MOV 50H,#07EH 设置发送的列数据(Y0~Y7)
MOV 51H,#0BDH
MOV 52H,#0DBH
MOV 53H,#0E7H
MOV 54H,#0E7H
MOV 55H,#0DBH
MOV 56H,#0BDH
MOV 57H,#07EH
CLR CLEAR 初始化I/O口
SETB CLK
SETB DINA
SETB DINB
SETB CLEAR
mainloop:
mov r6,#8h 设置扫描次数
movdptr,#09000h读取扫描端口数据
MOV R1,#50H 指定列数据指针
flashcy:
MOV A,@R1读取列数据
MOV R0,A
INCR1列数据指针加1
CLR A
MOVCA,@A+DPTR
MOV P1,#0FFH
LCALLSENDTO
MOV P1,A
INCDPTR
LCALL DELAY
DJNZ R6,flashcy
SJMP MAINLOOP
sendto: 发送数据子程序
PUSH ACC
CLR CLK
SENDTIME:
MOV R7,#08H
MOV A,R0
CLR C
SENDCY:
RRC A
MOV DINA,C
SETB CLK
CLRCLK
DJNZ R7,SENDCY
POP ACC
RET
DELAY: MOV R7,#01延时子程序
DELAY0: MOV R4,#17
DELAY1: MOV R3,#28
DJNZR3,$
DJNZR4,DELAY1
DJNZR7,DELAY0
RET
ORG 09000H
DB 0FEH,0FDH,0FBH,0F7H,0EFH,0DFH,0BFH,07FH X0~X7(列扫描)
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)