;16x2 LCD造字練習程式 LCD_RS EQU P1.0 ;定義LCD接線位置 LCD_RW EQU P1.1 LCD_E EQU P1.2 LCD_DATA EQU P2 ; MOV R5,#1 ;如果電源關掉重開時,LCD無法正常顯示 ; CALL DELAY ;請加上此延遲程式 CLR LCD_RW ;習慣上直接將LCD的RW接腳直接接地, MOV A,#00111000B ;設定LCD介面為8位元, 2行, 5x7字型 CALL WRIR MOV A,#00001111B ;設定要LCD顯示, 要有游標, 要閃爍 CALL WRIR MOV A,#00000110B ;設定寫資料進入LCD時, 顯示器不要動, 游標向右移一格 CALL WRIR MOV A,#1 ;清除LCD CALL WRIR MOV R5,#1 ;延遲等清除LCD命令處理完畢 CALL DELAY MOV A,#01000000B ;設定寫入字型資料, 從第一字的第一行開始 CALL WRIR CALL SET_FONT ;寫入字型資料 MOV A,#10000000B ;游標移到第一行開頭 CALL WRIR MOV A,#00000000B ;顯示第一個字 CALL WRDR MOV A,#00000001B ;顯示第二個字 CALL WRDR JMP $ ;---------------------------------------------------------------------------- SET_FONT: ;造字副程式 MOV DPTR,#FONT ;指標指到字型表開頭 MOV R6,#8*2 ;一個字8筆資料, n個字共 8 x n 筆資料 NEXT: CLR A ;清除累加器內資料 MOVC A,@A+DPTR ;讀取字型資料 CALL WRDR INC DPTR ;指標內容加1, 指到下一行字型 DJNZ R6,NEXT RET FONT: DB 00000B ;第一個字的5x7字型 DB 01110B DB 10101B DB 11111B DB 10101B DB 11011B DB 01110B DB 00000B DB 00100B ;第二個字的5x7字型 DB 00100B DB 11111B DB 00100B DB 00100B DB 00000B DB 11111B DB 00000B ;需要造其他字形的話, 以此類推 ;---------------------------------------------------------------------------- WRiR: CLR LCD_RS ;寫命令到LCD副程式 SETB LCD_E MOV LCD_DATA,A MOV R7,#50 ;延遲等訊號穩定 DJNZ R7,$ CLR LCD_E ;讓Enable接腳產生負緣訊號 MOV R7,#60 ;延遲等訊號處裡完畢 DJNZ R7,$ RET WRDR: SETB LCD_RS ;寫資料到LCD副程式 SETB LCD_E MOV LCD_DATA,A MOV R7,#50 ;延遲等訊號穩定 DJNZ R7,$ CLR LCD_E ;讓Enable接腳產生負緣訊號 MOV R7,#60 ;延遲等訊號處裡完畢 DJNZ R7,$ RET DELAY: MOV R6,#100 DEL: MOV R7,#100 DJNZ R7,$ DJNZ R6,DEL DJNZ R5,DELAY RET END