打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
51单片机驱动16×16LED点阵显示动画汉字汇编程序 (1)
51单片机驱动16×16LED点阵显示动画汉字汇编程序 (1)
 
电路图就不贴出来了16×16LED点阵的典型接法。这里提供一个完整的AT89S51单片机驱动驱动led点阵显示具有动画效果的汉字的汇编程序列子.
         ORG  0000H
ST:      MOV  A,#0FFH ;初始化
         MOV  P1,A
         MOV  P2,A
         MOV  P3,A
         MOV  P0,A
         CLR  A
         MOV  R0,#50H ;显示缓存清0
         MOV  R1,#20H ;控制清0的次数
ST0:     MOV  @R0,A
         INC  R0
         DJNZ R1,ST0
;正文显示
CHINESE: MOV  DPTR,#TAB1 ;查表指针指向TAB1
         LCALL HZ
;结束动画
SCREE:
         MOV  DPTR,#TAB2;查表指针指向TAB2
         ACALL DD
         MOV  DPTR,#TAB3;查表指针指向TAB3
         ACALL DD
         MOV  DPTR,#TAB4;查表指针指向TAB4
         ACALL DD
         LJMP CHINESE
;显示8幅画面子程序,SCREE专用,用字模软件字要倒置(表必须深256字节)
DD:      MOV  B,#00H
         MOV  R0,#08H  ;显示8幅画面
         AJMP CC
CC0:     MOV  A,B
         ADD  A,#20H   ;指向下一幅画面
         MOV  B,A
CC:      MOV  R7,#08H  ;画面停留时间
         MOV  R3,B
         MOV  37H,R0
         LCALL ENTER
DIS00:   LCALL DISPLAY
         DJNZ R7,DIS00
         MOV  R0,37H
         DJNZ R0,CC0
         RET
;汉字上移子程序,可显示8个汉字,(表必须深256字节)
HZ:      MOV  R3,#00H ;查表偏移量
         MOV  R5,#81H ;查表128次
MOVBACK: MOV  R4,#10H ;使显示完一个汉字
MOVBACK0: MOV  R7,#02H ;一桢画面显示时间
         MOV  R0,#6DH ;低8位R0指向显示缓存倒数第3个字节,以备与最后1个字节交换
         MOV  R1,#6CH ;高8位R1指向显示缓存倒数第4个字节,以备与倒数第2个字节交换
         MOV  R2,#10H ;内存后移的次数
         DJNZ R5,MOVBACK1
         RET           ;显示完该表,返回
MOVBACK1: MOV  A,@R0  ;低8位被后移的内存单元数据暂存入A
         INC  R0     ;后移两字节
         INC  R0
         MOV  @R0,A  ;放入要移的低8位数据
         MOV  A,R0   ;R0指向下一个要后移的内存单元
         SUBB A,#04H
         MOV  R0,A
         MOV  A,@R1  ;高8位被后移的内存单元数据暂存入A
         INC  R1     ;后移两字节
         INC  R1
         MOV  @R1,A  ;放入要移高8位的数据
         MOV  A,R1   ;R1指向下一个要后移的内存单元
         SUBB A,#04H
         MOV  R1,A   ;R1指向下一个要后移的内存单元
         DJNZ R2,MOVBACK1 ;显示缓存数据依次后移
         MOV  A,R3   ;从表TAB1读入要移进50H,51H的数据
         MOVC A,@A+DPTR;先给50H读数据
         MOV  50H,A
         MOV  A,R3    ;指向下一字节
         INC  A
         MOV  R3,A
         MOVC A,@A+DPTR;再给51H读数据
         MOV  51H,A
         MOV  A,R3    ;指向下一字节
         INC  A
         MOV  R3,A
         MOV  30H,R3  ;保护数据
         MOV  31H,R4
         MOV  32H,R5
DISMOV:  LCALL DISPLAY  ;显示当前数据
         DJNZ R7,DISMOV
         MOV  R3,30H
         MOV  R4,31H
         MOV  R5,32H
         DJNZ R4,MOVBACK0
         MOV  30H,R3   ;保护数据
         MOV  32H,R5
         MOV  R7,#24H ;显示当前数据延时
DISMOV0: LCALL DISPLAY
         DJNZ R7,DISMOV0
         MOV  R3,30H
         MOV  R5,32H
         LJMP MOVBACK
;放进一幅显示数据到显示缓存子程序,要先设好指针DPTR和R3,影响R1,R2,R3
ENTER:   MOV  R1,#50H ;从50H单元起把表存入
         MOV  R2,#20H ;查表次数
         MOV  A,R3
CLLOOP_: MOVC A,@A+DPTR ;查表
         MOV  @R1,A    ;将表放进5X,6X单元
         INC  R1       ;R1指向下一个地址空间
         MOV  A,R3     ;查表指针后移
         INC  A
         MOV  R3,A     ;将指针修改结果存入R3
         DJNZ R2,CLLOOP_;没查完转CLLOOP_
         RET
;15MS,显示子程序,一桢32个字节,影响A,R0,R1,R3,R4,R5,R6;
;http://www.51hei.com单片机网提供汉字取模工具,可显示任意汉字
DISPLAY: MOV  A,#0FFH
         MOV  P0,A
         MOV  P1,A
         MOV  P2,A
         MOV  P3,A
         SETB C
         MOV  R6,#7FH  ;赋扫描字初值,左移后初值为0FEH
         MOV  R5,#00H  ;列扫描低8位控制
         MOV  R0,#50H  ;行的高8(p1)位要显示的数据起始地址
         MOV  R1,#10H  ;扫描次数
DISLOOP: MOV  A,@R0    ;从内存读数据
         MOV  P2,#0FFH ;装入数据时不显示任何东西
         MOV  P3,#0FFH
         CPL  A        ;数据取反以适合显示
         MOV  P1,A     ;送入行的高8(p1)位要显示的数据
         INC  R0       ;修改R0指向低8位要显示的数据
         MOV  A,@R0    ;读低8位要显示的数据
         CPL  A        ;数据取反以适合显示
         MOV  P0,A     ;送入行的低8(p0)位要显示的数据
         INC  R0       ;R0指向下一个高8(p0)位要显示的数据
         LCALL NEXT     ;调用列扫描程序
         LCALL DELAY1MS ;显示延时
         DJNZ R1,DISLOOP;一桢显示完返回
         MOV  P3,#0FFH ;全灭
         RET
;列扫描子程序DISLOOP专用
NEXT:    JNC  NEXT1    ;C=0转扫描高8(p3)位行
         MOV  A,R6     ;修改扫描字
         RL   A
         MOV  R6,A
         INC  R5
         CJNE R5,#09H,NEXT0 ;R6=#0FEH时C=0
         AJMP NEXT1
BACK:    RET
NEXT0:   MOV  P2,R6    ;扫描低8(p2)位行
         AJMP BACK
NEXT1:   MOV  P2,#0FFH
         MOV  P3,R6    ;扫描高8(p3)位行
         MOV  A,R6     ;修改扫描字
         RL   A
         MOV  R6,A
         AJMP BACK
;延时1MS子程序
DELAY1MS: MOV  R3,#10
D0:      MOV  R4,#50
D1:      DJNZ R4,D1
         DJNZ R3,D0
         RET 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
单片机入门教程
8课:单片机寻址方式与指令系统
MCS-51与串行D/A转换器的接口设计
单片机学习知识点全攻略
DS18B20应用_放松好运|Free&Lucky
单片机第十课
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服