[ บทความ : ตัวอย่างสำหรับ 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 ได้เลยครับ