⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 escreen.txt

📁 电子屏显示器
💻 TXT
字号:
附录  源程序
;                   *************************
;                   *                       *
;                   *  电子屏字符显示器     *
;                   *      "中国加油"       *
;                   *************************
;四个显示字符数据表在50H-6FH单元内,字符用8*8点阵,R4(30H用于
;控制显示静止字的时间,R5(31H)静止字显示跳转地址步距,B内放显示首址
;************;
;中断入口程序;
;************
ORG     0000H                            ;程序执行开始地址
LJMP    START                            ;跳至START执行
ORG     0003H                            ;外中断0中断入口地址
RETI                                     ;中断返回(不开中断)
ORG     000BH                            ;定时器T0中断入口地址
RETI                                     ;中断返回(不开中断)
ORG     0013H                            ;外中断1中断入口地址
RETI                                     ;中断返回(不开中断)
ORG     001BH                            ;定时器T1中断入口地址
RETI                                     ;中断返回(不开中断)
ORG     0023H                            ;串行口中断入口地址
RETI                                     ;中断返回(不开中断)
ORG     002BH                            ;定时器T2中断入口地址
RETI                                     ;中断返回(不开中断)
;**********
;初始化程序
;**********
CLEARMEN:     MOV     A,#0FFH          ;4端口全部置1
                MOV     P1,A
                MOV     P2,A
                MOV     P3,A
                MOV     P0,A
                MOV     DPTR,#TAB        ;取“中国加油”字符表首地址
                CLR     A
                MOV     R3,A             ;R3寄存器清零
                MOV     R1,#50H          ;设字符表移入内存单元首址
                MOV     R2,#20H          ;设置表次数(32次)
CLLOOP:         MOVC     A,@A+DPTR   ;查表将“中国加油”字符数据移入内存单元
                MOV     @R1,A
                MOV     A,R3             ;保存A并将A自加
                INC     A
                MOV     R3,A
                INC     R1
                DJNZ    R2,CLLOOP    ;查表32次,不到转CLLOOP再查
                RET                    ;子程序返回
;**********
;  主程序
;**********
START:          LCALL     CLEARMEN       ;调用上电初始化子程序
START1:         LCALL     KEYWORK        ;调用键扫描子程序
                 AJMP      START1
;************
;键扫描子程序 
;************
KEYWORK:     MOV       P1,#0FFH          
                JNB       P1.0,KEY1       ;P1.0为0(键按下)转KEY1
                JNB       P1.1,KEY2       ;P1.1为0(键按下)转KEY2
                JNB       P1.2,KEY3       ;P1.2为0(键按下)转KEY3
KEYRET:        RET
;按键1功能处理
KEY1:           LCALL   DL10MS          ;延时10MS消抖动
                JB      P1.0,KEYRET       ;是干扰,转KEYRET结束
WAIT:           JNB     P1.0,WAIT         ;不是干扰,等待按键松开
                LCALL   CLEARMEN       ;调用上电初始化子程序
                MOV     30H,#80H         ;1帧显示时间控制
                MOV     31H,#08H         ;换帧跳转步距为8
                LJMP    DISP1             ;转显示子程序DISP1
;按键2功能处理
KEY2:           LCALL   DL10MS
                JB      P1.1,KEYRET
WAIT1:          JNB     P1.1,WAIT1          
                LCALL   CLEARMEN
                MOV     30H,#14H          ;1帧显示时间控制
                MOV     31H,#01H          ;换帧跳转步距为1
                LJMP    DISP1             ;转显示子程序DISP1
;按键3功能处理
KEY3:           LCALL   DL10MS
                JB      P1.2,KEYRET
WAIT2:          JNB     P1.2,WAIT2
                LCALL   CLEARMEN
                LJMP    DISP2             ;转显示子程序DISP2
;************
;显示控制程序
;************
DISP1:          MOV     B,#50H           ;显示数据首址
                MOV     R4,30H           ;放入1帧显示时间控制数据
                MOV     R5,31H           ;放入跳转步距控制数据
LOOP:           LCALL   DISPLAY         ;调用显示子程序一次
                DJNZ    R4,LOOP        ;1帧显示时间未到转LOOP循环
                MOV     R4,30H           ;1帧显示时间到,重装初值
                MOV     A,B
                CJNE    A,#68H,CONT      ;不是末地址转CONT       
                AJMP    START            ;是末地址,重新循环显示
CONT:           ADD     A,R5
                MOV     B,A
                AJMP    LOOP
;显示子程序
DISPLAY:        MOV     A,#0FFH
                MOV     P0,A             ;关显示数据
                MOV     P2,A             ;关扫描
                MOV     R6,#0FEH         ;赋扫描字
                MOV     R0,B             ;赋显示数据首地址
                MOV     R7,#08H          ;一次扫描8行
DISLOOP:        MOV     A,@R0          ;取显示数据
                MOV     P0,A             ;放入P0口
                MOV     P2,R6            ;扫描输出(显示某一行)
                LCALL   DL1MS           ;亮1ms
                INC     R0                ;指向下一行数据地址
                MOV     A,R6             ;扫描字移入A
                RL      A                 ;循环左移一位
                MOV     R6,A             ;放回R6
                DJNZ    R7,DISLOOP       ;8行扫描未完成转DISLOOP继续
                RET                       ;8行扫描结束
;左移显示控制程序
DISP2:          MOV     R5,#32              ;左移32次
DISP22:         LCALL   DISPP               ;调用左移显示控制子程序
                LCALL   MOVH              ;调用高位移出处理子程序MOVH
                LCALL   MOVH1             ;调用高位移出处理子程序MOVH1
                DJNZ    R5,DISP22            ;左移显示32次控制
                LJMP    START                ;跳回主程序
;左移显示控制子程序
DISPP:          MOV     B,#50H               ;显示字符首址
                MOV     R4,#25H              ;一帧显示时间控制
DISPP1:         LCALL   DISPLAY              ;调用显示子程序一次
                DJNZ    R4,DISPP1              
                RET
;高位移出处理子程序,将"中国加油"4个字符数据的最高位移出至20h---23h单元内
MOVH:           MOV     R1,#20H         ;最高位移出存放单元首址
                MOV     R0,#50H           ;取“中国加油”字符数据首址
                MOV     R2,#08H           ;每“字”移8次
MOV1:           MOV     A,@R0           ;取“中国加油”字符数据
                CLR     C                  ;清进位C
                RLC     A                  ;带进位循环左移
                MOV     @R0,A             ;放回原单位
                MOV     A,@R1             ;存放单元数据入A
                RRC     A                  ;带进位循环右移
                MOV     @R1,A             ;放回存放单元
                INC     R0                 ;字符数据地址加1
                DJNZ    R2,MOV1          ;移8次未完转MOV1再移
                MOV     R2,#08H           ;8次移完赋初值
                INC     R1                 ;存放单元地址加1
                MOV     A,R1             
                SUBB    A,#24H             ;判断地址是否小于24H
                JZ      OUT                 ;等于24H退出
                AJMP    MOV1              ;小于24H转MOV1继续
OUT:            RET 
;高位移出处理子程序
MOVH1:          MOV     A,20H    ;20H与21H,22H,23H单元数据循交换
                XCH     A,23H        ;20H与23H全交换
                XCH     A,22H        ;22H与23H全交换
                XCH     A,21H        ;22H与21H全交换
                MOV     20H,A        ;21H与20H全交换
                MOV     R1,#20H      ;重新组成显示字符数据表程序
                MOV    R0,#50H       ;将20H---23H的各位分别移入
                                      50H--6FH的低位
                MOV     R2,#08H      ;移位次数
MOV2:           MOV     A,@R0      ;取字符数据
                RR      A            ;右移
                MOV     @R0,A       ;放回原单位
                MOV     A,@R1       ;取原移出最高位存放单元数
                CLR     C            ;清C
                RRC     A            ;带进位循环右移
                MOV     @R1,A        ;放回原单位
                MOV     A,@R0        ;取字符数据
                RLC     A            ;带进位循环左移
                MOV     @R0,A        ;放回字符数据
                INC     R0           ;字符数据地址加1
                DJNZ    R2,MOV2      ;8次未完成转MOV2再继续
                MOV     R2,#08H      ;8次完赋初值
                INC     R1             ;原移出最高位存放单元地址加1
                MOV     A,R1         ;判断地址是否小于24H
                SUBB    A,#24H
                JZ      OUT           ;等于24H转OUT退出
                AJMP    MOV2         ;小于24H转MOV2继续
;1MS延时子程序
DL1MS:          MOV     R3,#64H  ;100*(10+2)us
LOOPK:          LCALL   KEYWORK
                DJNZ    R3,LOOPK
                RET
;0.5MS延时子程序
DL512:          MOV     R2,#0FFH
LOOP1:          DJNZ    R2,LOOP1
                RET
;10MS延时子程序
DL10MS:         MOV     R3,#14H
LOOP2:          LCALL   DL512
                DJNZ    R3,LOOP2
                RET
;"中国加油"显示用ROM数据表
TAB:    DB      0F7H,80H,0B6H,0B6H,80H,0F7H,0F7H,0F7H   ;中
        DB      01H,01H,6DH,01H,65H,69H,01H,01H          ;国
        DB      0DFH,0DFH,00H,0D2H,0D2H,0B0H,67H,0F7H  ;加
        DB      7BH,0BBH,60H,0AAH,0E0H,0CAH,0A0H,7FH  ;油
        DB      00H,00H,00H,00H
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -