[51单片机] 51单片机驱动16×16LED点阵显示动画汉字汇编程序

[复制链接]
1772|6
 楼主| 芙蓉洞 发表于 2015-8-29 14:59 | 显示全部楼层 |阅读模式
电路图就不贴出来了16×16LED点阵的典型接法。这里提供一个完整的AT89S51单片机驱动驱动led点阵显示具有动画效果的汉字的汇编程序列子.
  1. ORG  0000H
  2. ST:      MOV  A,#0FFH ;初始化
  3.          MOV  P1,A
  4.          MOV  P2,A
  5.          MOV  P3,A
  6.          MOV  P0,A
  7.          CLR  A
  8.          MOV  R0,#50H ;显示缓存清0
  9.          MOV  R1,#20H ;控制清0的次数
  10. ST0:     MOV  @R0,A
  11.          INC  R0
  12.          DJNZ R1,ST0
;正文显示
  1. CHINESE: MOV  DPTR,#TAB1 ;查表指针指向TAB1
  2.          LCALL HZ




 楼主| 芙蓉洞 发表于 2015-8-29 14:59 | 显示全部楼层
;结束动画
  1. SCREE:
  2.          MOV  DPTR,#TAB2;查表指针指向TAB2
  3.          ACALL DD
  4.          MOV  DPTR,#TAB3;查表指针指向TAB3
  5.          ACALL DD
  6.          MOV  DPTR,#TAB4;查表指针指向TAB4
  7.          ACALL DD
  8.          LJMP CHINESE
  9. ;显示8幅画面子程序,SCREE专用,用字模软件字要倒置(表必须深256字节)
  10. DD:      MOV  B,#00H
  11.          MOV  R0,#08H  ;显示8幅画面
  12.          AJMP CC
  13. CC0:     MOV  A,B
  14.          ADD  A,#20H   ;指向下一幅画面
  15.          MOV  B,A
  16. CC:      MOV  R7,#08H  ;画面停留时间
  17.          MOV  R3,B
  18.          MOV  37H,R0
  19.          LCALL ENTER
  20. DIS00:   LCALL DISPLAY
  21.          DJNZ R7,DIS00
  22.          MOV  R0,37H
  23.          DJNZ R0,CC0
  24.          RET
  25. ;汉字上移子程序,可显示8个汉字,(表必须深256字节)
  26. HZ:      MOV  R3,#00H ;查表偏移量
  27.          MOV  R5,#81H ;查表128次
  28. MOVBACK: MOV  R4,#10H ;使显示完一个汉字
  29. MOVBACK0: MOV  R7,#02H ;一桢画面显示时间
  30.          MOV  R0,#6DH ;低8位R0指向显示缓存倒数第3个字节,以备与最后1个字节交换
  31.          MOV  R1,#6CH ;高8位R1指向显示缓存倒数第4个字节,以备与倒数第2个字节交换
  32.          MOV  R2,#10H ;内存后移的次数
  33.          DJNZ R5,MOVBACK1
  34.          RET           ;显示完该表,返回
  35. MOVBACK1: MOV  A,@R0  ;低8位被后移的内存单元数据暂存入A
  36.          INC  R0     ;后移两字节
  37.          INC  R0
  38.          MOV  @R0,A  ;放入要移的低8位数据
  39.          MOV  A,R0   ;R0指向下一个要后移的内存单元
  40.          SUBB A,#04H
  41.          MOV  R0,A
  42.          MOV  A,@R1  ;高8位被后移的内存单元数据暂存入A
  43.          INC  R1     ;后移两字节
  44.          INC  R1
  45.          MOV  @R1,A  ;放入要移高8位的数据
  46.          MOV  A,R1   ;R1指向下一个要后移的内存单元
  47.          SUBB A,#04H
  48.          MOV  R1,A   ;R1指向下一个要后移的内存单元
  49.          DJNZ R2,MOVBACK1 ;显示缓存数据依次后移
  50.          MOV  A,R3   ;从表TAB1读入要移进50H,51H的数据
  51.          MOVC A,@A+DPTR;先给50H读数据
  52.          MOV  50H,A
  53.          MOV  A,R3    ;指向下一字节
  54.          INC  A
  55.          MOV  R3,A
  56.          MOVC A,@A+DPTR;再给51H读数据
  57.          MOV  51H,A
  58.          MOV  A,R3    ;指向下一字节
  59.          INC  A
  60.          MOV  R3,A
  61.          MOV  30H,R3  ;保护数据
  62.          MOV  31H,R4
  63.          MOV  32H,R5
  64. DISMOV:  LCALL DISPLAY  ;显示当前数据
  65.          DJNZ R7,DISMOV
  66.          MOV  R3,30H
  67.          MOV  R4,31H
  68.          MOV  R5,32H
  69.          DJNZ R4,MOVBACK0
  70.          MOV  30H,R3   ;保护数据
  71.          MOV  32H,R5
  72.          MOV  R7,#24H ;显示当前数据延时
  73. DISMOV0: LCALL DISPLAY
  74.          DJNZ R7,DISMOV0
  75.          MOV  R3,30H
  76.          MOV  R5,32H
  77.          LJMP MOVBACK
  78. ;放进一幅显示数据到显示缓存子程序,要先设好指针DPTR和R3,影响R1,R2,R3
  79. ENTER:   MOV  R1,#50H ;从50H单元起把表存入
  80.          MOV  R2,#20H ;查表次数
  81.          MOV  A,R3
  82. CLLOOP_: MOVC A,@A+DPTR ;查表
  83.          MOV  @R1,A    ;将表放进5X,6X单元
  84.          INC  R1       ;R1指向下一个地址空间
  85.          MOV  A,R3     ;查表指针后移
  86.          INC  A
  87.          MOV  R3,A     ;将指针修改结果存入R3
  88.          DJNZ R2,CLLOOP_;没查完转CLLOOP_
  89.          RET
  90. ;15MS,显示子程序,一桢32个字节,影响A,R0,R1,R3,R4,R5,R6;
  91. ;http://www.51hei.com单片机网提供汉字取模工具,可显示任意汉字
  92. DISPLAY: MOV  A,#0FFH
  93.          MOV  P0,A
  94.          MOV  P1,A
  95.          MOV  P2,A
  96.          MOV  P3,A
  97.          SETB C
  98.          MOV  R6,#7FH  ;赋扫描字初值,左移后初值为0FEH
  99.          MOV  R5,#00H  ;列扫描低8位控制
  100.          MOV  R0,#50H  ;行的高8(p1)位要显示的数据起始地址
  101.          MOV  R1,#10H  ;扫描次数
  102. DISLOOP: MOV  A,@R0    ;从内存读数据
  103.          MOV  P2,#0FFH ;装入数据时不显示任何东西
  104.          MOV  P3,#0FFH
  105.          CPL  A        ;数据取反以适合显示
  106.          MOV  P1,A     ;送入行的高8(p1)位要显示的数据
  107.          INC  R0       ;修改R0指向低8位要显示的数据
  108.          MOV  A,@R0    ;读低8位要显示的数据
  109.          CPL  A        ;数据取反以适合显示
  110.          MOV  P0,A     ;送入行的低8(p0)位要显示的数据
  111.          INC  R0       ;R0指向下一个高8(p0)位要显示的数据
  112.          LCALL NEXT     ;调用列扫描程序
  113.          LCALL DELAY1MS ;显示延时
  114.          DJNZ R1,DISLOOP;一桢显示完返回
  115.          MOV  P3,#0FFH ;全灭
  116.          RET
  117. ;列扫描子程序DISLOOP专用
  118. NEXT:    JNC  NEXT1    ;C=0转扫描高8(p3)位行
  119.          MOV  A,R6     ;修改扫描字
  120.          RL   A
  121.          MOV  R6,A
  122.          INC  R5
  123.          CJNE R5,#09H,NEXT0 ;R6=#0FEH时C=0
  124.          AJMP NEXT1
  125. BACK:    RET
  126. NEXT0:   MOV  P2,R6    ;扫描低8(p2)位行
  127.          AJMP BACK
  128. NEXT1:   MOV  P2,#0FFH
  129.          MOV  P3,R6    ;扫描高8(p3)位行
  130.          MOV  A,R6     ;修改扫描字
  131.          RL   A
  132.          MOV  R6,A
  133.          AJMP BACK
  134. ;延时1MS子程序
  135. DELAY1MS: MOV  R3,#10
  136. D0:      MOV  R4,#50
  137. D1:      DJNZ R4,D1
  138.          DJNZ R3,D0
  139.          RET

  140. TAB1:
  141. DB 01FH,0F8H,001H,000H,07FH,0FEH,041H,004H,01DH,070H,001H,000H,01DH,070H,000H,000H
  142. DB 01FH,0F0H,011H,010H,01FH,0F0H,011H,010H,01FH,0F2H,001H,002H,001H,002H,000H,0FEH;電
  143. DB 000H,000H,03FH,0F0H,000H,020H,000H,040H,000H,080H,001H,000H,001H,000H,001H,004H
  144. DB 0FFH,0FEH,001H,000H,001H,000H,001H,000H,001H,000H,001H,000H,005H,000H,002H,000H;子
  145. DB 008H,000H,008H,0FCH,07EH,084H,008H,084H,0FFH,094H,041H,088H,022H,080H,014H,0FEH
  146. DB 07EH,0A4H,008H,0A4H,008H,098H,0FFH,098H,008H,0A4H,008H,0A6H,008H,0C4H,008H,080H;報
  147. DB 000H,000H,000H,010H,03FH,0F8H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
  148. DB 000H,000H,000H,000H,000H,000H,000H,004H,07FH,0FEH,000H,000H,000H,000H,000H,000H;二
  149. DB 01FH,0F8H,001H,000H,07FH,0FEH,041H,004H,01DH,070H,001H,000H,01DH,070H,002H,080H
  150. DB 004H,060H,01AH,01EH,0E1H,008H,01FH,0E0H,000H,040H,002H,080H,001H,000H,001H,000H;零
  151. DB 01FH,0F8H,001H,000H,07FH,0FEH,041H,004H,01DH,070H,001H,000H,01DH,070H,002H,080H
  152. DB 004H,060H,01AH,01EH,0E1H,008H,01FH,0E0H,000H,040H,002H,080H,001H,000H,001H,000H;零
  153. DB 004H,000H,003H,000H,001H,080H,001H,000H,0FFH,0FEH,000H,000H,000H,000H,004H,080H
  154. DB 006H,040H,004H,020H,008H,010H,008H,018H,010H,00CH,020H,00CH,040H,008H,000H,000H;六
  155. DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
  156. DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H;(空)
 楼主| 芙蓉洞 发表于 2015-8-29 15:00 | 显示全部楼层
  1. ;结束动画
  2. ;-- 水纹 -- ** 宋体, 12 **
  3. ; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=128x16, 调整后为: 128x16
  4. TAB2:DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,001H,080H
  5. DB 001H,080H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
  6. DB 000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,001H,080H,003H,0C0H
  7. DB 003H,0C0H,001H,080H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H,000H
  8. DB 000H,000H,000H,000H,000H,000H,000H,000H,001H,080H,002H,040H,004H,020H,008H,010H
  9. DB 008H,010H,004H,020H,002H,040H,001H,080H,000H,000H,000H,000H,000H,000H,000H,000H
  10. DB 000H,000H,001H,0C0H,006H,030H,008H,008H,008H,008H,010H,004H,020H,002H,020H,002H
  11. DB 020H,002H,010H,004H,008H,008H,008H,008H,006H,030H,001H,0C0H,000H,000H,000H,000H
  12. DB 003H,0C0H,00CH,030H,010H,008H,010H,008H,060H,006H,040H,002H,080H,001H,080H,001H
  13. DB 080H,001H,080H,001H,040H,002H,060H,006H,010H,008H,010H,008H,00CH,030H,003H,0C0H
  14. DB 000H,000H,038H,01CH,046H,062H,081H,081H,080H,001H,040H,002H,040H,002H,020H,004H
  15. DB 020H,004H,040H,002H,040H,002H,080H,001H,081H,081H,046H,062H,038H,01CH,000H,000H
  16. DB 0C0H,003H,0A0H,005H,058H,01EH,024H,024H,024H,024H,01EH,078H,005H,0A0H,002H,040H
  17. DB 002H,040H,005H,0A0H,01AH,078H,024H,024H,024H,024H,058H,01AH,0A0H,005H,0C0H,003H
  18. DB 000H,000H,0C0H,003H,0B0H,00DH,088H,011H,044H,022H,025H,0A4H,012H,048H,00DH,0B0H
  19. DB 00DH,0B0H,012H,048H,025H,0A4H,044H,022H,088H,011H,0B0H,00DH,0C0H,003H,000H,000H
  20. ;--福-- ** 宋体, 12 **
  21. ; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=16x16, 调整后为: 16x16
  22. TAB3:DB 0AAH,055H,055H,0AAH,0AAH,055H,055H,0AAH,0AAH,055H,055H,0AAH,0AAH,055H,055H,0AAH
  23. DB 055H,0AAH,0AAH,055H,055H,0AAH,0AAH,055H,055H,0AAH,0AAH,055H,055H,0AAH,0AAH,055H
  24. DB 0AAH,055H,055H,0AAH,0AAH,055H,055H,0AAH,0AAH,055H,054H,02AH,0A8H,015H,050H,00AH
  25. DB 050H,00AH,0A8H,015H,054H,02AH,0AAH,055H,055H,0AAH,0AAH,055H,055H,0AAH,0AAH,055H
  26. DB 0AAH,055H,054H,02AH,0A8H,015H,050H,00AH,0A0H,005H,040H,002H,080H,001H,000H,000H
  27. DB 000H,000H,080H,001H,040H,002H,0A0H,005H,050H,00AH,0A8H,015H,054H,02AH,0AAH,055H
  28. DB 0A0H,005H,040H,002H,091H,0F9H,000H,000H,074H,0F0H,019H,008H,031H,008H,058H,0F0H
  29. DB 014H,000H,011H,0F8H,012H,044H,013H,0FCH,012H,044H,091H,0F9H,040H,002H,0A0H,005H
  30. DB 020H,000H,013H,0FEH,010H,000H,0FDH,0FCH,005H,004H,009H,004H,011H,0FCH,030H,000H
  31. DB 05BH,0FEH,096H,022H,012H,022H,013H,0FEH,012H,022H,012H,022H,013H,0FEH,012H,002H
  32. DB 000H,004H,07FH,0C8H,000H,008H,03FH,0BFH,020H,0A0H,020H,090H,03FH,088H,000H,00CH
  33. DB 07FH,0DAH,044H,069H,044H,048H,07FH,0C8H,044H,048H,044H,048H,07FH,0C8H,040H,048H
  34. DB 010H,040H,010H,080H,091H,000H,073H,0FFH,014H,080H,018H,040H,040H,0FFH,05EH,092H
  35. DB 052H,092H,052H,092H,052H,0FEH,052H,092H,052H,092H,05EH,092H,040H,0FFH,000H,000H
  36. DB 012H,002H,013H,0FEH,012H,022H,012H,022H,013H,0FEH,012H,022H,096H,022H,05BH,0FEH
  37. DB 030H,000H,011H,0FCH,009H,004H,005H,004H,0FDH,0FCH,010H,000H,013H,0FEH,020H,000H
  38. TAB4:DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0F8H,0FFH,0F8H,0FFH,0C0H,0FFH,0C0H
  39. DB 0FEH,000H,0FEH,000H,0F0H,000H,0F0H,007H,0B0H,002H,0C8H,002H,048H,006H,030H,002H;STEP1
  40. DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0F8H,0FFH,0F8H,0FFH,0C0H,0FFH,0C0H
  41. DB 0FEH,000H,0FEH,000H,0F6H,000H,0F9H,007H,089H,002H,086H,001H,000H,005H,000H,002H;STEP2
  42. DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0F8H,0FFH,0F8H,0FFH,0C0H,0FFH,0C0H
  43. DB 0FEH,0C0H,0FFH,020H,0F1H,020H,0F0H,0C7H,080H,001H,080H,007H,000H,001H,000H,007H;STEP3
  44. DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0F8H,0FFH,0F8H,0FFH,0D8H,0FFH,0E4H
  45. DB 0FEH,024H,0FEH,018H,0F0H,000H,0F0H,001H,080H,001H,080H,007H,000H,005H,000H,005H;STEP4
  46. DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FBH,0FFH,0FCH,0FFH,0C4H,0FFH,0C3H
  47. DB 0FEH,000H,0FEH,000H,0F0H,000H,0F0H,007H,080H,001H,080H,007H,000H,004H,000H,007H;STEP5
  48. DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,000H,000H,000H,000H,000H,000H
  49. DB 000H,000H,000H,000H,000H,000H,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
  50. DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
  51. DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
  52. DB 000H,000H,0F4H,058H,084H,0D4H,085H,052H,0F5H,052H,085H,052H,086H,054H,0F4H,058H
  53. DB 000H,000H,022H,05EH,022H,050H,022H,050H,023H,0DEH,022H,050H,022H,050H,0FAH,05EH
  54. END
受不了了 发表于 2015-8-29 20:31 | 显示全部楼层
半调子水平写的程序:lol
IversonCar 发表于 2015-8-30 08:40 | 显示全部楼层
完整的AT89S51单片机驱动驱动led点阵显示
还有动画显示,不错啊
quray1985 发表于 2015-8-30 20:23 | 显示全部楼层
受不了了 发表于 2015-8-29 20:31
半调子水平写的程序

为啥这么说的,我看着写的挺好的啊
风的样子 发表于 2015-8-31 20:40 | 显示全部楼层
还有动画呢,程序真不错
您需要登录后才可以回帖 登录 | 注册

本版积分规则

42

主题

398

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部