单片机控制的LED动态扫描显示原理

单片机控制的LED动态扫描显示原理,第1张

现已DS8为个位来讨论,十、百、千为分别为DS7、DS6、DS5。1、首先要了解的是此数码管为共阴极数码管,即三极管Q16、Q15、Q14、Q13导通时数码管才能点亮,亦即相应的单片机P23、P22、P21、P20为低电平。2、动态扫描显示原理如下:(1)P23、P22、P21、P20输出高电平,关闭所有数码管;(2)显示个位——把要显示的数据送到P10~P17,P23送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P23送高电平;(3)显示十位——把要显示的数据送到P10~P17,P22送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P22送高电平;(4)显示百位——把要显示的数据送到P10~P17,P21送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P21送高电平;(5)显示千位——把要显示的数据送到P10~P17,P20送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P20送高电平。(6)以此顺序循环,把它做成子程序,在主循环中调用。

点阵LED扫描法介绍

点阵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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11075446.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-13
下一篇 2023-05-13

发表评论

登录后才能评论

评论列表(0条)

保存