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

* 98871: [转帖]

   zzcdsh 
zzcdsh发表的帖子 

 [转帖]
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                    ;退出
;
;
;***************;
;  扫描文字表   ;
;***************;
;
TAB:    DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH     ;黑屏
        DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
        DB  0F7H,0DFH,0F9H,0CFH,0FBH,0BFH,0C0H,007H,0DEH,0F7H,0C0H,007H,0DEH,0F7H,0DEH,0F7H    ;--  文字:  单  --
        DB  0C0H,007H,0DEH,0F7H,0FEH,0FFH,000H,001H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH
        DB  0FFH,0BFH,0EFH,0BFH,0EFH,0BFH,0EFH,0BBH,0E0H,001H,0EFH,0FFH,0EFH,0FFH,0EFH,0FFH    ;--  文字:  片  --
        DB  0E0H,00FH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0DFH,0EFH,0DFH,0EFH,0BFH,0EFH,07FH,0EFH
        DB  0EFH,0FFH,0EFH,007H,0EFH,077H,001H,077H,0EFH,077H,0EFH,077H,0C7H,077H,0CBH,077H    ;--  文字:  机  --
        DB  0ABH,077H,0AFH,077H,06EH,0F7H,0EEH,0F5H,0EDH,0F5H,0EDH,0F5H,0EBH,0F9H,0EFH,0FFH
        DB  0FFH,0FFH,0F0H,00FH,0F7H,0EFH,0F0H,00FH,0F7H,0EFH,0F0H,00FH,0FFH,0FFH,000H,001H    ;--  文字:  是  --
        DB  0FEH,0FFH,0F6H,0FFH,0F6H,007H,0F6H,0FFH,0EAH,0FFH,0DCH,0FFH,0BFH,001H,0FFH,0FFH
        DB  0FFH,0FFH,0C0H,003H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH     ;--  文字:  工  --
        DB  0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,000H,001H,0FFH,0FFH,0FFH,0FFH
        DB  0FBH,0BFH,0FBH,0BFH,0FBH,0BFH,0FBH,0BBH,0BBH,0B9H,0DBH,0B3H,0DBH,0B7H,0EBH,0AFH     ;--  文字:  业  --
        DB  0E3H,0AFH,0EBH,09FH,0FBH,0BFH,0FBH,0BFH,0FBH,0BBH,000H,001H,0FFH,0FFH,0FFH,0FFH
        DB  0FEH,0FFH,0FEH,0FFH,0DEH,0F7H,0C0H,003H,0DEH,0F7H,0DEH,0F7H,0DEH,0F7H,0DEH,0F7H     ;--  文字:  中  --
        DB  0DEH,0F7H,0C0H,007H,0DEH,0F7H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH
;
        DB  0FEH,0FFH,0FEH,0FFH,0DEH,0F7H,0C0H,003H,0DEH,0F7H,0DEH,0F7H,0DEH,0F7H,0DEH,0F7H     ;--  文字:  中  --
        DB  0DEH,0F7H,0C0H,007H,0DEH,0F7H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH
        DB  0E0H,00FH,0EFH,0EFH,0E0H,00FH,0EFH,0EFH,0E0H,00FH,0FFH,0FFH,000H,001H,0DDH,0FFH    ;--  文字:  最  --
        DB  0C1H,003H,0DDH,077H,0C1H,0AFH,0DCH,0DFH,0C1H,0AFH,01DH,071H,0FCH,0FBH,0FDH,0FFH
        DB  0F7H,0DFH,0F7H,0DFH,080H,003H,0F7H,0DFH,0F0H,01FH,0F7H,0DFH,0F0H,01FH,0F7H,0DFH    ;--  文字:  基  --
        DB  000H,001H,0F7H,0DFH,0EEH,0E7H,0C0H,011H,03EH,0FBH,0FEH,0FFH,080H,003H,0FFH,0FFH
        DB  0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,000H,001H,0FCH,07FH,0FCH,0BFH,0FAH,0BFH,0FAH,0DFH    ;--  文字:  本  --
        DB  0F6H,0EFH,0EEH,0E7H,0D0H,011H,03EH,0FBH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FFH,0FFH
        DB  0EFH,07FH,0EFH,07FH,0DFH,07FH,083H,003H,0BAH,0FBH,0BAH,0FBH,0B9H,0FBH,083H,07BH    ;--  文字:  的  --
        DB  0BBH,0BBH,0BBH,09BH,0BBH,0DBH,0BBH,0FBH,083H,0FBH,0BBH,0D7H,0BFH,0EFH,0FFH,0FFH
        DB  0FEH,0FFH,0FFH,07FH,0C0H,003H,0DFH,0FFH,0DDH,0FFH,0DEH,0F7H,0CFH,073H,0D7H,037H   ;--  文字:  应  --
        DB  0DBH,06FH,0DBH,06FH,0D9H,0DFH,0BBH,0DFH,0BFH,0BFH,0A0H,001H,07FH,0FFH,0FFH,0FFH
        DB  0FFH,0FFH,0E0H,003H,0EFH,07BH,0EFH,07BH,0EFH,07BH,0E0H,003H,0EFH,07BH,0EFH,07BH   ;--  文字:  用  --
        DB  0EFH,07BH,0E0H,003H,0EFH,07BH,0EFH,07BH,0DFH,07BH,0DFH,07BH,0BFH,06BH,07FH,077H
        DB  0FDH,0FFH,0FEH,0FFH,0FFH,07FH,000H,001H,0FDH,0FFH,0FDH,0FFH,0FCH,00FH,0FDH,0EFH    ;--  文字:  方  --
        DB  0FBH,0EFH,0FBH,0EFH,0F7H,0EFH,0F7H,0EFH,0EFH,0EFH,0DFH,06FH,03FH,09FH,0FFH,0FFH
;
        DB  0FDH,0FFH,0FEH,0FFH,0FFH,07FH,000H,001H,0FDH,0FFH,0FDH,0FFH,0FCH,00FH,0FDH,0EFH    ;--  文字:  方  --
        DB  0FBH,0EFH,0FBH,0EFH,0F7H,0EFH,0F7H,0EFH,0EFH,0EFH,0DFH,06FH,03FH,09FH,0FFH,0FFH
        DB  0FFH,05FH,0FFH,067H,0FFH,06FH,080H,003H,0FFH,07FH,0FFH,07FH,0FFH,07FH,0C1H,07FH    ;--  文字:  式  --
        DB  0F7H,0BFH,0F7H,0BFH,0F7H,0BFH,0F4H,0DFH,0E3H,0DDH,08FH,0EDH,0DFH,0F5H,0FFH,0FBH
        DB  0F9H,0BFH,0C7H,0AFH,0F7H,0B7H,0F7H,0B7H,0F7H,0BFH,000H,001H,0F7H,0BFH,0F7H,0B7H    ;--  文字:  我  --
        DB  0F1H,0D7H,0C7H,0CFH,037H,0DFH,0F7H,0AFH,0F6H,06DH,0F7H,0F5H,0D7H,0F9H,0EFH,0FDH
        DB  0FFH,007H,0C0H,06FH,0EDH,0EFH,0F6H,0DFH,0C0H,001H,0DDH,0FDH,0BDH,0FFH,0C0H,003H    ;--  文字:  爱  --
        DB  0FBH,0FFH,0F8H,00FH,0F3H,0DFH,0F4H,0BFH,0EFH,03FH,09CH,0CFH,073H,0F1H,0CFH,0FBH
        DB  0F7H,0DFH,0F9H,0CFH,0FBH,0BFH,0C0H,007H,0DEH,0F7H,0C0H,007H,0DEH,0F7H,0DEH,0F7H    ;--  文字:  单  --
        DB  0C0H,007H,0DEH,0F7H,0FEH,0FFH,000H,001H,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH,0FEH,0FFH
        DB  0FFH,0BFH,0EFH,0BFH,0EFH,0BFH,0EFH,0BBH,0E0H,001H,0EFH,0FFH,0EFH,0FFH,0EFH,0FFH    ;--  文字:  片  --
        DB  0E0H,00FH,0EFH,0EFH,0EFH,0EFH,0EFH,0EFH,0DFH,0EFH,0DFH,0EFH,0BFH,0EFH,07FH,0EFH
        DB  0EFH,0FFH,0EFH,007H,0EFH,077H,001H,077H,0EFH,077H,0EFH,077H,0C7H,077H,0CBH,077H    ;--  文字:  机  --
        DB  0ABH,077H,0AFH,077H,06EH,0F7H,0EEH,0F5H,0EDH,0F5H,0EDH,0F5H,0EBH,0F9H,0EFH,0FFH
        DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH     ;黑屏
        DB  0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
;
       END




发表时间:2006年10月24日9:16:40

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:谁要单片机开发板原理图,留下email  !谁要单片机开发板原理图? 有
[下一篇帖子]:proteus仿真的问题请问各位大虾,当我使用proteus时,为什么我在编译时总是出错,而且调用例