C51单片机控制16×16LED点阵滚动显示

效果展示:

16×16LED滚动显示

 主要器件:

AT89C51*1
74HC595*2
74LS138*2

功能及原理简介:

主要功能是实现LED点阵的滚动显示,包括暂停功能。

LED点阵采用列扫描方式,所以每次只能点亮LED屏的一列以此类推,行数据通过595并行输出,配合列扫描每次点亮一列所需要亮起的点,接下来行数据更新点亮下一列对应的点,由于人眼延迟,在人眼观察下,LED屏就会显示出对应的图形,只需要不断地更新对应列所需要亮起的行数据,就可以实现屏幕的显示及滚动显示了。

电路结构采用两片HC595级联,串行输入并行输出,输出口与LED点阵行相连接,两片LS138级联作为列选择,十六个引脚与LED点阵列相连,用来进行列扫描。暂停功能通过C51的外部中断INT0来响应。595与138工作原理以及C51外部中断原理请参考如下连接:

74LS138讲解:https://www.bilibili.com/video/BV1Hr4y1w7TJ/?spm_id_from=333.337.search-card.all.click&vd_source=81b8a97085ada13a1b7738e1ae5cd010
 74HC595讲解:https://www.bilibili.com/video/BV1UE411d7jV/?spm_id_from=333.337.search-card.all.click&vd_source=81b8a97085ada13a1b7738e1ae5cd010
 C51外部中断:https://www.bilibili.com/video/BV1LD4y1g781/?spm_id_from=333.337.search-card.all.click&vd_source=81b8a97085ada13a1b7738e1ae5cd010

代码解析:

$NOMOD51
$INCLUDE (8051.MCU)
      ORG  0000H
      JMP   START
      
      ORG   000BH
      JMP   SER0            ;中断服务程序
      
      ORG   0100H
START:	
    MOV DPTR ,#TABLE    
	
	CLR EA                  ;关中断
    SETB IT0                ;设置外部中断INT0
	SETB EX0
    SETB EA                 ;开中断
      
    MOV R2, #00H            ;用来改变显示的起始指针
	MOV R3,#21H             ;同一幅图循环显示的次数
	MOV R4,#00H             ;R4的值为0或1,只在中断程序里修改,用来判断是否滚动
	
LABLE:
    MOV B,R2
	MOV R0,B                ;起始地址R2赋给R0
	MOV A, #10H             ;用于列扫描
LABLE0:	
	CLR  P1.2
	PUSH ACC
	MOV R1,#08H      
	MOV A,R0
	MOVC A,@A+DPTR
	MOV B,A
	ACALL LABLE1	        ;高8位推入595
    INC R0
	
	MOV R1,#08H
	MOV A,R0
	MOVC A,@A+DPTR
	MOV B,A
	ACALL LABLE1	        ;低8位推入595
	INC R0
	
	POP ACC
	DEC A                   ;点亮A对应列
	MOV P0,A	            ;用列扫描,对应列输出0
	NOP
	NOP
	NOP
	SETB P1.2              ;行输出,点亮LED点阵的一列
	NOP
	NOP
	NOP
	JNZ   LABLE0	       ;一次列扫描未结束,循环
	
	DEC R3;                ;同一幅图循环次数自减
	MOV A,R3
	JNZ  LABLE             ;同一幅图循环显示
	MOV A,R4               ;判断是否滚动
	JNZ  LABLE             ;不滚动则不改变R2的值
	
	MOV  A,R2
	INC A
	INC A
	MOV B,#42H             ;滚动则R2加2
    DIV AB
    MOV R2,B 
	MOV R3,#21H            ;重新设置同一幅图循环显示次数
	
	AJMP LABLE       
	
	
LABLE1:                    ;用来移入行的8位
	CLR  P1.1
	MOV A,B
	ANL A,#80H
	JNZ  OUT1              ;非0跳转
    CLR  P1.3	           ;最高位是0,移入0
	AJMP  PUT
OUT1:        
	SETB P1.3              ;最高位是1,移入1
PUT:
    MOV A,B
	RL   A                 ;左移
	MOV B,A
	SETB P1.1              ;移入一位数字
	DEC R1
	MOV A,R1
	JNZ LABLE1
	CLR  P1.1
	RET

SER0:                      ; 中断子程序
      PUSH ACC
      PUSH PSW
      INC R4
      MOV A,R4
      MOV B,#02            ;改变R4的值,从而改变是否滚动
      DIV AB
      MOV R4,B 
      POP PSW
      POP ACC
      RETI
      
TABLE:
      DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
      ;DB  00H,00H,00H,00H,0FFH,0FFH,0FFH,0FFH,00H,00H,00H,00H,0FFH,0FFH,0FFH,0FFH,00H,00H,00H,00H,0FFH,0FFH,0FFH,0FFH,00H,00H,00H,00H,0FFH,0FFH,0FFH,0FFH
      DB  00H,00H,40H,20H,20H,0A0H,11H,24H,0BH,28H,07H,38H,0DH,0E0H,38H,20H,20H,30H,00H,20H,2FH,0F0H,40H,10H,40H,00H,7FH,0FCH,00H,00H,00H,00H
      DB  00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H,00H
	 END

(   该代码只循环显示汉字“刘” , 如需循环显示其他内容只需添加对应的TABLE表 , 另外 , 由于不同的接线方式 , 代码移植时滚动方向可能会改变 , 这时需要调整代码中的列扫描方向使其从低位到高位扫描 , 或将TABLE中数据按对应方向调换顺序  )

电路连接:

实验工程下载连接(Proteus):

https://pan.baidu.com/s/1gm0QNtq8-WRRqdFEUTZnCQ?pwd=2617

提取码:2617
  • 4
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.KEG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值