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

📄 lcd2001.asm

📁 此程序是液晶与数码管的结合.是初学者必须掌握的.可以为以后写综合程序有所帮助
💻 ASM
字号:
;程序名:MCU2005
;功  能:XPH-3实验板液晶演示程序
;时  间:2005年6月
;字  模:阴码、逆向、列行式

;Designed by PP.T


;信号引脚及常量定义
LCDIR   EQU     0C000H
LCDDR   EQU     0E000H
cs1     BIT     p3.5
CS2     BIT     P1.0
RST     BIT     P2.6
XADR    EQU     0B8H
YADR    EQU     40H
X       EQU     23H
Y       EQU     24H
RAM     EQU     22H

        ORG     00H
        JMP     START


;主程序
START:
        ;初始化
        MOV     SP,#60H
        CLR     RST
        CALL    DELAY
        SETB    RST
        SETB    CS1
        SETB    CS2
        MOV     RAM,#3FH
        CALL    PUTIR
        MOV     RAM,#0C0H
        CALL    PUTIR
        ;清屏
        CALL    CLEAR
        CALL    CLEAR

        ;显示字符
        MOV     X,#01H
        MOV     Y,#14H
        MOV     DPTR,#tb1
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#01H
        MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb2
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#01H
        MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb3
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#01H
        MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb4
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#01H
        MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb5
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#01H
        MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb6
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        ;显示EDA-IV实验系统
        MOV     X,#04H
        MOV     Y,#0bH
        MOV     DPTR,#tb7
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#04H
        MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tbA
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#04H
        MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb9
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#04H
       MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb10
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#04H
      MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb11
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#04H
     MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb12
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        MOV     X,#04H
      MOV     A,#0FH
        ADD     A,Y
        MOV     Y,A
        MOV     DPTR,#tb13
        CALL    DISP

        CALL    DELAY5
        CALL    DELAY5

        ;MOV     X,#04H
        ;MOV     Y,#69H
        ;MOV     DPTR,#tb14
        ;CALL    DISP

        ;CALL    DELAY6
        ;停机
        LJMP    START





;模块名:DISP
;参  数:X,Y  - 坐标
;        DPTR - 地址
;功  能:在X,Y的坐标显示一个16*16点阵的汉字或字符
;注  意:字模方向为 列行式,逆向
DISP:
        ;暂存坐标
        PUSH    X
        PUSH    Y
        ;行坐标
        MOV     R6,X
        ;共两行
        MOV     R4,#02H
   ROW:
        ;列坐标
        MOV     R7,Y

        ;设置片选信号
        SETB    CS1     ;设置为左边区域(默认)
        CLR     CS2
        ;CALL    DELAY

        CLR     C       ;判断显示的区域
        MOV     A,Y
        SUBB    A,#40H
        JC      ADDR

        ;设置为右边区域
        MOV     R7,A
        CLR     CS1
        SETB    CS2
        ;CALL    DELAY

        ;计算字符显示位置的起始地址
   ADDR:
        ;显示一行
        MOV     R5,#10H  ; 16 列
   COL:
        CLR     A
        MOV     A,#XADR  ;计算X坐标
        ADD     A,R6
        MOV     RAM,A    ;保存X坐标对应的地址
        CALL    PUTIR

        MOV     A,#YADR  ;计算Y坐标对应的地址
        ADD     A,R7
        MOV     RAM,A     ;保存Y坐标
        CALL    PUTIR

        CLR     A
        MOVC    A,@A+DPTR;写一列数据
        MOV     RAM,A
        CALL    PUTCHR

        INC     DPTR     ;修改指针
        INC     R7       ;修改Y地址

        CLR     C        ;检测是否超过#3F
        MOV     A,R7
        SUBB    A,#40H

        JC      NEXT     ;检测是否溢出

        ;溢出
        CLR     C        ;检测是哪个边界溢出
        MOV     C,CS1    ;检测左边界
        JNC     RIGHT
        ;左边界越界选通右边区域
        MOV     R7,A
        CLR     CS1
        ;CALL    DELAY1
        SETB    CS2


        SJMP    NEXT

        ;右边界越界选通左边区域
  RIGHT:
        MOV     R7,A
        SETB    CS1
        ;CALL    DELAY1
        CLR     CS2


   NEXT:DJNZ    R5,COL   ;判断是否已显示完一行?
        INC     R6       ;计算下一行地址
        DJNZ    R4,ROW   ;全部显示完了吗?
        ;恢复片选信号
        CLR     CS1
        CLR     CS2
        POP     Y
        POP     X
        RET



;模块名:PUTIR
;参  数:无
;功  能:向液晶发送写指令命令
;时  间:2004年7月
PUTIR:
        PUSH    DPH
        PUSH    DPL
        CALL    BUSY
        MOV     DPTR,#LCDIR
        MOV     A,RAM
        MOVX    @DPTR,A
        POP     DPL
        POP     DPH
        RET

;模块名:PUTCHR
;参  数:无
;功  能:向液晶发送写数据命令
;时  间:2004年7月
PUTCHR:
        PUSH    DPH
        PUSH    DPL
        CALL    BUSY
        MOV     DPTR,#LCDDR
        MOV     A,RAM
        MOVX    @DPTR,A
        POP     DPL
        POP     DPH
        RET


;模块名:BUSY
;参  数:无
;功  能:检测液晶忙状态
;时  间:2004年7月
BUSY:
        MOV     DPTR,#LCDIR
BUSY1:  MOVX    A,@DPTR
        ANL     A,#80H
        XRL     A,#80H
        JZ      BUSY1
        RET


;模块名:CLEAR
;参  数:无
;功  能:清屏
;时  间:2004年7月
CLEAR:
        SETB    CS1
        SETB    CS2
        MOV     R2,#08
        MOV     R4,#00
CLR0:   MOV     A,R4
        ADD     A,#XADR
        MOV     RAM,A
        CALL    PUTIR
        MOV     RAM,#YADR
        CALL    PUTIR
        MOV     R3,#64
CLR1:   MOV     RAM,#00H
        CALL    PUTCHR
        DJNZ    R3,CLR1
        INC     R4
        DJNZ    R2,CLR0
        MOV     RAM,#YADR
        CALL    PUTIR
        MOV     RAM,#XADR
        CALL    PUTIR
        CLR     CS1
        CLR     CS2
        RET


DELAY6: MOV     R5,#04FH
D6:     MOV     R6,#0FFH
D7:     MOV     R7,#0FFH
        DJNZ    R7,$
        DJNZ    R6,D7
        DJNZ    R5,D6
        RET




DELAY5: MOV     R6,#07FH
D5:     MOV     R7,#0FFH
        DJNZ    R7,$
        DJNZ    R6,D5
        RET



;模块名:DELAY
;参  数:无
;功  能:延时
;时  间:2004年7月
DELAY:  MOV     R6,#8
D1:     MOV     R7,#248
        DJNZ    R7,$
        DJNZ    R6,D1
        RET

;模块名:DELAY1
;参  数:无
;功  能:延时
;时  间:2004年7月
DELAY1: MOV     R6,#2
D2:     MOV     R7,#248
        DJNZ    R7,$
        DJNZ    R6,D2
        RET



;====字模====
  tb1:
DB 00H, 0FEH,02H,12H,12H,12H,92H,72H,0FEH,12H,12H,12H,02H,0FEH,00H,00H ;
DB 00H,0FFH,48H,44H,42H,41H,50H,60H,5FH,40H,40H,40H,40H,0FFH,00H,00H ; "团" 0
   tb2:
DB 20H,30H,0ACH,63H,10H,00H,08H,48H,48H,48H,7FH,48H,48H,48H,08H,00H ;
DB 22H,23H,22H,12H,12H,00H,00H,7EH,22H,22H,22H,22H,22H,7EH,00H,00H ; "结" 1
 tb3:
DB 04H,0E4H,24H,25H,26H,24H,0E4H,24H,20H,0E0H,3FH,0E0H,22H,2CH,20H,00H ;
DB 20H,11H,4DH,81H,7FH,05H,59H,20H,18H,07H,00H,3FH,40H,40H,70H,00H ; "就" 2
   tb4:
DB 80H,80H,80H,80H,0BEH,0AAH,0AAH,0AAH,0AAH,0AAH,0AAH,0BEH,80H,80H,80H,00H ;
DB 00H,40H,20H,10H,0EH,10H,20H,3FH,44H,44H,44H,44H,44H,40H,40H,00H ; "是" 3
    tb5:
DB 00H,10H,10H,10H,10H,10H,10H,0FFH,10H,10H,10H,10H,10H,0F0H,00H,00H ;
DB 00H,00H,80H,40H,20H,18H,06H,01H,00H,00H,40H,80H,40H,3FH,00H,00H ; "力" 4
     tb6:
DB 40H,40H,40H,0DFH,55H,55H,55H,0D5H,55H,55H,55H,0DFH,40H,40H,40H,00H ;
DB 40H,40H,40H,57H,55H,55H,55H,7FH,55H,55H,55H,57H,50H,40H,40H,00H ; "量" 5
   tb7:
DB 02H,0F2H,12H,12H,1EH,00H,80H,80H,0FFH,0A0H,90H,88H,86H,84H,80H,00H ;
DB 01H,03H,41H,81H,7FH,00H,00H,40H,0FFH,40H,23H,0CH,10H,60H,20H,00H ; "张" 6
    tbA:
DB 00H,0F8H,00H,0FFH,00H,0F8H,0A0H,0B0H,0ACH,0A7H,0E4H,0B4H,0ACH,0E4H,80H,00H ;
DB 10H,3FH,10H,1FH,08H,0FH,00H,04H,44H,84H,7FH,04H,04H,07H,00H,00H ; "峥" 7
     tb9:
DB 10H,4CH,44H,44H,44H,44H,0C5H,00FEH,0C4H,44H,44H,44H,54H,4CH,04H,00H ;
DB 00H,20H,10H,08H,04H,03H,00H,7FH,01H,02H,04H,08H,10H,30H,10H,00H ; "宋" 8
    tb10:
DB 40H,48H,48H,48H,0FFH,48H,48H,82H,0C2H,0BEH,82H,00A2H,0C2H,0BEH,00H,00H ;
DB 60H,1FH,20H,40H,7FH,42H,42H,40H,5FH,48H,48H,48H,48H,5FH,40H,00H ; "超" 9
    tb11:
DB 10H,12H,0D2H,0FEH,91H,11H,80H,0BFH,0A1H,0A1H,0A1H,0A1H,0BFH,80H,00H,00H ;
DB 04H,03H,00H,0FFH,00H,41H,44H,44H,44H,7FH,44H,44H,44H,44H,40H,00H ; "程" 10
   tb12:
DB 10H,88H,0E4H,3BH,12H,04H,0F4H,94H,0F4H,9FH,94H,0F4H,94H,0F4H,04H,00H ;
DB 01H,00H,0FFH,00H,42H,3AH,02H,3AH,42H,4AH,52H,42H,62H,0AH,32H,00H ; "德" 11
   tb13:
DB 00H,0FEH,22H,22H,22H,0FEH,00H,00H,0FFH,11H,11H,11H,11H,0FFH,00H,00H ;
DB 00H,03H,02H,02H,02H,43H,20H,18H,07H,01H,01H,41H,81H,7FH,00H,00H ; "明" 12


⌨️ 快捷键说明

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