1.8X8 LED
LED 点阵是由发光二极管排列组成的显示器件,在我们日常生活的电器中随处可见。
点阵一次只能控制一行LED灯的亮灭,本文使用51单片机P0口控制共阴极,P2口控制共阳极
由于一次只能控制一行LED灯,所以得用动态刷新的方式,当刷新得时间间隔低于30ms,人眼就不能观察到间隔,只能捕捉到一幅画面。
控制好刷新时间就可以显示字符
同时点阵可以分为行刷新和列刷新,本文涉及行刷新
2.消隐
在点阵显示字符时,由于较高的刷新率,在前面的等还没有完全熄灭时后面的灯就点亮了,这样会让字符糊成一坨,难以辨认
具体思路:
先送数据(点亮)——>后选通——>延时——>送数据(熄灭)——>延时——>送数据(点亮)
…………
MOV P2,R4
LCALL TIME_25MS ;调用延时程序
MOV P0,#0FFH ;给P0高电平,让所有灯熄灭
MOV P2,#00H ;给P2低电平,让所有灯熄灭
…………
3.行列数据编码
想让点阵点亮最重要的是进行数据编码,对显示字符进行编码,高电平为1,低电平为0
由于A5开发板是动态刷新行显示,所以LED的每一行都要编码
LED点阵的行是共阳极,所以选通行要给高电平,给其他行低电平。
列是共阴极,给选通的列低电平,其他列高电平(下图由EXCEL制作)
TAP_ROW:DB 80H,40H,20H,10H,08H,04H,02H,01H ;行点亮编码
TAP_CUL:DB 0EBH,0EFH,000H,0EFH,0D5H,0D3H,0A6H,070H ;列点亮编码
编码表是一 一对应关系,与实际接线顺序相关,具体现象需要调试
4.汇编代码
ORG 0000H
MOV R2,#00H ;查表计数累加
MAIN :
MOV TMOD,#01H ;使用计时方式1
MOV DPTR,#TAP_ROW ;行编码查表
MOV A,R2
MOVC A,@A+DPTR
MOV R4,A ;列编码查表
MOV DPTR,#TAP_CUL
MOV A,R2
MOVC A,@A+DPTR
MOV R5,A
INC R2 ;计数累加,用于判断LED点亮到第几行,完成第八行返回就第一行
MOV P0,R5 ;选通列的数据
MOV P2,R4 ;选通行的数据
LCALL TIME_25MS ;调用延时程序
MOV P0,#0FFH ;给P0高电平,让所有灯熄灭
MOV P2,#00H ;给P2低电平,让所有灯熄灭
CJNE R2,#09H,SUU ;判断 是否查表超过7次,小于或大于7次跳转
SUU:
JC MAIN ;小于7次跳转初始化
MOV R2,#00H ;大于7次清零R2
LJMP MAIN ;跳转循环主函数
TIME_25MS: ;延时1MS程序
CLR TF0
MOV TH0,#0FCH
MOV TL0,#018H
SETB TR0
JNB TF0,$
RET
TAP_ROW:DB 80H,40H,20H,10H,08H,04H,02H,01H ;行点亮编码
TAP_CUL:DB 0EBH,0EFH,000H,0EFH,0D5H,0D3H,0A6H,070H ;列点亮编码
END
1s调试用程序
TIME_1S: MOV R7,#10 ;延时1S子程序,调试程序用
DL1: MOV R6,#200
DL2: MOV R5,#248
DJNZ R5,$
DJNZ R6,DL2
DJNZ R7,DL1
RET