当前位置:   article > 正文

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

led点阵滚动显示 51

效果展示:

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

代码解析:

  1. $NOMOD51
  2. $INCLUDE (8051.MCU)
  3. ORG 0000H
  4. JMP START
  5. ORG 000BH
  6. JMP SER0 ;中断服务程序
  7. ORG 0100H
  8. START:
  9. MOV DPTR ,#TABLE
  10. CLR EA ;关中断
  11. SETB IT0 ;设置外部中断INT0
  12. SETB EX0
  13. SETB EA ;开中断
  14. MOV R2, #00H ;用来改变显示的起始指针
  15. MOV R3,#21H ;同一幅图循环显示的次数
  16. MOV R4,#00H ;R4的值为01,只在中断程序里修改,用来判断是否滚动
  17. LABLE:
  18. MOV B,R2
  19. MOV R0,B ;起始地址R2赋给R0
  20. MOV A, #10H ;用于列扫描
  21. LABLE0:
  22. CLR P1.2
  23. PUSH ACC
  24. MOV R1,#08H
  25. MOV A,R0
  26. MOVC A,@A+DPTR
  27. MOV B,A
  28. ACALL LABLE1 ;高8位推入595
  29. INC R0
  30. MOV R1,#08H
  31. MOV A,R0
  32. MOVC A,@A+DPTR
  33. MOV B,A
  34. ACALL LABLE1 ;低8位推入595
  35. INC R0
  36. POP ACC
  37. DEC A ;点亮A对应列
  38. MOV P0,A ;用列扫描,对应列输出0
  39. NOP
  40. NOP
  41. NOP
  42. SETB P1.2 ;行输出,点亮LED点阵的一列
  43. NOP
  44. NOP
  45. NOP
  46. JNZ LABLE0 ;一次列扫描未结束,循环
  47. DEC R3; ;同一幅图循环次数自减
  48. MOV A,R3
  49. JNZ LABLE ;同一幅图循环显示
  50. MOV A,R4 ;判断是否滚动
  51. JNZ LABLE ;不滚动则不改变R2的值
  52. MOV A,R2
  53. INC A
  54. INC A
  55. MOV B,#42H ;滚动则R22
  56. DIV AB
  57. MOV R2,B
  58. MOV R3,#21H ;重新设置同一幅图循环显示次数
  59. AJMP LABLE
  60. LABLE1: ;用来移入行的8
  61. CLR P1.1
  62. MOV A,B
  63. ANL A,#80H
  64. JNZ OUT1 ;非0跳转
  65. CLR P1.3 ;最高位是0,移入0
  66. AJMP PUT
  67. OUT1:
  68. SETB P1.3 ;最高位是1,移入1
  69. PUT:
  70. MOV A,B
  71. RL A ;左移
  72. MOV B,A
  73. SETB P1.1 ;移入一位数字
  74. DEC R1
  75. MOV A,R1
  76. JNZ LABLE1
  77. CLR P1.1
  78. RET
  79. SER0: ; 中断子程序
  80. PUSH ACC
  81. PUSH PSW
  82. INC R4
  83. MOV A,R4
  84. MOV B,#02 ;改变R4的值,从而改变是否滚动
  85. DIV AB
  86. MOV R4,B
  87. POP PSW
  88. POP ACC
  89. RETI
  90. TABLE:
  91. 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
  92. ;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
  93. 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
  94. 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
  95. END

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

电路连接:

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

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

提取码:2617
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/400495
推荐阅读
相关标签
  

闽ICP备14008679号