[ บทความ : ตัวอย่างสำหรับ CP-SB31 V2 ตอนที่ 8 ] ทดสอบติดต่อกับ LCD ตัวอักษร ด้วย CP-SB31V2

ตัวอย่างซอร์สโค้ดสำหรับติดต่อกับ LCD แบบตัวอักษร กับบอร์ด CP-SB31V2 ที่ติดตั้ง ET-DEBUG31 เป็นดังนี้



;/**********************************/;
;/* Demo Program For DotMatrix LCD */;
;/* Hardware  :  ET-CPSB31 V2.0    */;
;/* Complier  :  Cross-32  V2.0    */;
;/**********************************/;

;/***************************************/;
;/* Equate List Port I/O ET-CPSB31 V2.0 */;
;/***************************************/;
;
WR_INSLCD  EQU     0E0C0H                  ; Instruction Port of LCD
RD_INSLCD  EQU     0E0C1H                  ; Read Busy Port LCD
WR_DATLCD  EQU     0E0C2H                  ; Write Character LCD
RD_DATLCD  EQU     0E0C3H                  ; Read DDRAM From LCD

            ORG     2200H                   ; Strat Program For "ET-DEBUG31"

MAIN:       MOV     R2,#02H                 ; Power-on Delay
PWR_DLY1:   MOV     R3,#00H
PWR_DLY2:   MOV     R4,#00H
            DJNZ    R4,$
            DJNZ    R3,PWR_DLY2
            DJNZ    R2,PWR_DLY1
            ;
            LCALL   INIT_LCD                ; Initial LCD
            MOV     A,#00H
            LCALL   GOTO_LCD
            LCALL   PRINT_LCD
            DB     "TEST LCD SB31 V2",00   ; Display LCD Line1 (16X2)
            MOV     A,#40H
            LCALL   GOTO_LCD
            LCALL   PRINT_LCD
            DB     "BY...ETT CO.,LTD",00   ; Display LCD Line2 (16X2)
            SJMP    $

;/*********************************/;
;/* Initial Character LCD Display */;
;/*********************************/;
;
INIT_LCD:   MOV     DPTR,#WR_INSLCD         ; Write Instruction
            MOV     A,#00111000B            ; Function Set
            MOVX    @DPTR,A                 ; DL=1 8bit,N=1 1/16 duty,F=0 5x7
            LCALL   BUSY_LCD                ; Wait LCD Busy
            ;
            MOV     A,#00001100B            ; Display on/off Control
            MOVX    @DPTR,A                 ; D=1 off,C=0 cursor off,B=0 not blink
            LCALL   BUSY_LCD                ; Wait LCD Busy
            ;
            MOV     A,#00000110B            ; Entry Mode Set
            MOVX    @DPTR,A                 ; I/D=1 increment,S=0 right
            LCALL   BUSY_LCD                ; Wait LCD Busy
            ;
            MOV     A,#00000001B            ; Clear Display LCD all digit
            MOVX    @DPTR,A
            LCALL   BUSY_LCD                ; Wait LCD Busy
            RET

;/************************/;
;/*  Read Busy Flag LCD  */;
;/************************/;
;
BUSY_LCD:   PUSH    DPL
            PUSH    DPH
            PUSH    ACC
            MOV     DPTR,#RD_INSLCD
BUSY1:      MOVX    A,@DPTR
            JB      ACC.7,BUSY1
            POP     ACC
            POP     DPH
            POP     DPL
            RET

;/************************/;
;/* GOTO Position of LCD */;
;/* Input : A (Address)  */;
;/************************/;
;
GOTO_LCD:   PUSH    DPL
            PUSH    DPH
            LCALL   BUSY_LCD                ; Wait LCD Busy
            MOV     DPTR,#WR_INSLCD
            SETB    ACC.7                   ; Set DD RAM
            MOVX    @DPTR,A
            POP     DPH
            POP     DPL
            RET

;/************************/;
;/*  Wrire ASCII to LCD  */;
;/*  Input :  A (ASCII)  */;
;/************************/;
;
WR_LCD:     PUSH    DPL
            PUSH    DPH
            LCALL   BUSY_LCD                ; Wait LCD Busy
            MOV     DPTR,#WR_DATLCD
            MOVX    @DPTR,A
            POP     DPH
            POP     DPL
            RET

;/************************************/;
;/* Print Data data to Character LCD */;
;/* Usage    : LCALL PRINT_LCD       */;
;/*          : DB   'xxxx',00        */;
;/* Register : ACC                   */;
;/* Note     : last byte must be 00H */;
;/************************************/;
;
PRINT_LCD:  POP     DPH
            POP     DPL
PRN_LCD1:   CLR     A
            MOVC    A,@A+DPTR
            CJNE    A,#00H,PRN_LCD2
            SJMP    PRN_LCD3
PRN_LCD2:   LCALL   WR_LCD
            INC     DPTR
            SJMP    PRN_LCD1
PRN_LCD3:   PUSH    DPL
            PUSH    DPH
            RET

            END
                

สามารถ download ไฟล์ตัวอย่างของบอร์ด พร้อม assembler ได้เลยครับ


เขียนโดย : ETT
Author : ETT team
e-mail : sales@etteam.com
วันที่ทำการปรับปรุง : ๒๘ ธ.ค. ๒๕๔๓