导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→发表看法:[zzcdsh][转帖]



No.98871
作者:zzcdsh
邮件:zzagdz@163.com
ID:61781
登陆:3次
文章数:1篇
最后登陆IP:218.29.116.24
最后登陆:2006/10/24 9:16:40
注册:2006/10/24 8:58:34
财富:105
发帖时间:2006/10/24 9:16:40
发贴者IP:218.29.116.24
标题:zzcdsh:[转帖]
摘要:No.98871[转帖] 89s51。ASM程序请高手帮忙改一下让能显示四个字。
;                   **********************************
;                   *                                 *
;                   *  单个16*16点阵电子屏字符显示器  *
;                   *     AT89C52   12MHZ晶振         *
;                   *       2004.2.11   LRM           *
;                   **********************************
;显示字用查表法,不占内存,字符用16*16共阳LED点阵,
;效果:向上滚动显示19个字,再重复循环。
;R1:查表偏址寄存器,B:查表首址,R2:扫描地址(从00-0FH)。
;R3:滚动显示时控制移动速度,单字显示可控制静止显示的时间。
;************;
;中断入口程序;
;************;
;
ORG     0000H
LJMP    START
ORG     0003H
RETI
ORG     000BH
LJMP    INTT0
ORG     0013H
RETI
ORG     001BH
RETI
ORG     0023H
RETI
ORG     002BH
RETI
;
;************;
; 初始化程序 ;
;************;
;
;
;************;
;   主程序   ;
;************;
;
START:          MOV     20H,#00H             ;清标志,00H为第16行开始扫描标志,01为1帧扫描结束标志
                MOV     A,#0FFH              ;端口初始化
                MOV     P1,A
                MOV     P2,A
                MOV     P3,A
                MOV     P0,A
                CLR     P1.6            ;串行寄存器打入输出端控制位
                MOV     TMOD,#01H       ;使用T0作16位定时器,行扫描用。
                MOV     TH0,#0FCH       ;1ms初值(12MHZ)
                MOV     TL0,#18H
                MOV     SCON,#00H       ;串口0方式传送显示字节
                MOV     IE,#82H         ;T0中断允许,总中断允许
                MOV     SP,#70H
MAIN:           LCALL   DIS1            ;显示准备,黑屏,1.5秒
                MOV     DPTR,#TAB
                LCALL   MOVDISP         ;向上滚动显示一页(8个字)
                INC     DPH
                LCALL   MOVDISP         ;向上滚动显示一页(8个字)
                INC     DPH
                LCALL   MOVDISP         ;向上滚动显示一页(8个字)
                AJMP    MAIN
;
;
;********************;
; 多字滚动显示子程序 ;
;********************;
;每次8个字,入口时定义好DPTR值
;
MOVDISP:        MOV     B,#00H          ;向上移动显示,查表偏址暂存(从00开始)
DISLOOP:        MOV     R3,#07H         ;移动速度
DISMOV:         MOV     R2,#00H         ;第0行开始
                MOV     R1,B            ;
                SETB    TR0             ;开扫描(每次一帧)
WAITMOV:        JBC     01H,DISMOV1     ;标志为1扫描一帧结束(16毫秒为1帧,每行1毫秒)
                AJMP    WAITMOV
DISMOV1:        DJNZ    R3,DISMOV       ;1帧重复显示(控制移动速度)
                INC     B               ;显示字的下一行(每行2字节)
                INC     B               ;
                MOV     A,R1            ;R1为0,8个字显示完
                JZ      MOVOUT          ;
                AJMP    DISLOOP         ;
MOVOUT:         RET                     ;移动显示结束
;
;
;*****************;
; 单字显示子程序  ;
;*****************;
;显示表中某个字
DIS1:           MOV     R3,#5AH         ;静止显示时间控制(16MS*#=1.6秒)
DIS11:          MOV     R2,#00H         ;一帧扫描初始值(行地址从00-0FH)
                MOV     DPTR,#TAB       ;取表首址
                MOV     R1,#00H         ;查表偏址(显示第一个字)
                SETB    TR0             ;开扫描(每次一帧)
WAIT11:         JBC     01H,DIS111      ;为1,扫描一帧结束
                AJMP    WAIT11
DIS111:         DJNZ    R3,DIS11
                RET
;
;
;************;
;  扫描程序  ;
;************;
;1MS刷新一次,每行显示1毫秒
INTT0:          PUSH    ACC
                MOV     TH0,#0FCH       ;1ms初值重装
                MOV     TL0,#18H
                JBC     00H,GOEND       ;16行扫描标志为1,结束
                INC     R1              ;取行右边字节偏址
                MOV     A,R1
                MOVC     A,@A+DPTR      ;查表
                MOV     SBUF,A          ;串口0方式发送
WAIT:           JBC     TI,GO           ;等待发送完毕
                AJMP    WAIT            ;
GO:             DEC     R1              ;取行左边字节偏址
                MOV     A,R1
                MOVC     A,@A+DPTR
                MOV     SBUF,A
WAIT1:          JBC     TI,GO1
                AJMP    WAIT1
GO1:            SETB    P1.7            ;关行显示,准备涮新
                NOP                     ;串口寄存器数据稳定
                SETB    P1.6            ;产生上升沿,行数据打入输出端
                NOP                     ;
                NOP                     ;
                CLR     P1.6            ;恢复低电平
                MOV     A,R2            ;修改显示行地址
                ORL     A,#0F0H         ;修改显示行地址
                MOV     R2,A            ;修改显示行地址
                MOV     A,P1            ;修改显示行地址
                ORL     A,#0FH          ;修改显示行地址
                ANL     A,R2            ;修改显示行地址
                MOV     P1,A            ;修改完成
                CLR     P1.7            ;开行显示
                INC     R2              ;下一行扫描地址值
                INC     R1              ;
                INC     R1              ;下一行数据地址
                MOV     A,R2
                ANL     A,#0FH
                JNZ     GO2
                SETB    00H             ;R2为10H,现为末行扫描,置标志
GO2:            POP     ACC
                RETI
GOEND:          CLR     TR0             ;一帧扫描完,关扫描
                SETB    01H             ;一帧扫描完,置结束标志
                POP     ACC
                RETI                    ;退出
;
;
;*********** ......

>>返回讨论的主题


  发表回复
用户名   *您没有注册?
密码   *
验证码   * .
标题   *
心情
随便说说    我回答你    最新发现    得意的笑   
气死我了    真是没劲    坚决同意    表示反对   
大家过来    好奇怪哟    懒得理它    大家小心   
文件上传
内容


字体:      字体大小:    颜色:
粗体 斜体 下划线 居中 超级连接 Email连接 图片 Flash图片 Shockwave文件 realplay视频文件 Media Player视频文件 QuickTime视频文件 引用 飞行字 移动字 发光字 阴影字 查看更多的心情图标 背景音乐
点击加入表情
                         
选项
有回复时用短消息通知您?

   




老古网执行:47毫秒 最大:3859毫秒 查询6次