赞
踩
16×16LED滚动显示
AT89C51 | *1 |
74HC595 | *2 |
74LS138 | *2 |
主要功能是实现LED点阵的滚动显示,包括暂停功能。
LED点阵采用列扫描方式,所以每次只能点亮LED屏的一列以此类推,行数据通过595并行输出,配合列扫描每次点亮一列所需要亮起的点,接下来行数据更新点亮下一列对应的点,由于人眼延迟,在人眼观察下,LED屏就会显示出对应的图形,只需要不断地更新对应列所需要亮起的行数据,就可以实现屏幕的显示及滚动显示了。
电路结构采用两片HC595级联,串行输入并行输出,输出口与LED点阵行相连接,两片LS138级联作为列选择,十六个引脚与LED点阵列相连,用来进行列扫描。暂停功能通过C51的外部中断INT0来响应。595与138工作原理以及C51外部中断原理请参考如下连接:
- $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中数据按对应方向调换顺序 )
https://pan.baidu.com/s/1gm0QNtq8-WRRqdFEUTZnCQ?pwd=2617
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。