Prostě se koukni co v kombinaci 2 x 16 nabízí prodejci a rozhodni se.
Tady máš ASM51 pro obsluhu LCD 2x16 s definicí znaků český abecedy. Adresaci a port si uprav podle svého projektu.
Kód: Vybrat vše
MOD_LCD SEGMENT CODE
;********************************
PUBLIC DISPL,MS15,INIT,CES_AB,DELAY,D_ON,D_OFF,D_BLIK,C_L1_R
PUBLIC C_L2_R,D_HomE
EXTRN XDATA(L1,L2)
Extrn DAtA(Cursor)
;********************************
RSEG MOD_LCD
;prEpis oBsAHu L1 A L2 Do LCD DisplEjE
DISPL: CALL BUSY ;<DPTR,A,PSW,B,R0,P2>
MOV A,#80H ;LINE1
CALL DR
MOV B,#16
MOV R0,#LOW(L1)
CALL DIS_O
CALL BUSY ;LINE2
MOV A,#0C0H
CALL DR
MOV B,#16
MOV R0,#LOW(L2)
CALL DIS_O
RET
;********************************
BUSY: MOV DPTR,#RBUSY ;<DPTR,A>
BUSY1: MOVX A,@DPTR
JB ACC.7,BUSY1
RET
;................................
;DISPLAY RWM, (KAM CHCI PSAT)
;A<-ADR.RWM (MOV A,#1000XXXXB)
DR: MOV DPTR,#WINST ; (MOV A,#1100XXXXB)
MOVX @DPTR,A
RET
;--------------------------------
;B <- POCET ZNAKU (MOV B,#16)
;R0<- UKAZOVATKO NA ZAC.RETEZCE
; ( MOV R0,#LOW(LINE1) )
DIS_O: CALL BUSY ;VYSTUP NA DISPLEJ
MOV DPTR,#WDATA
CALL INSTR
INC R0
DJNZ B,DIS_O
RET
;................................
INSTR: MOV P2,#HIGH(L1) ;<P2,A>
MOVX A,@R0
MOVX @DPTR,A
RET
;********************************
INIT: CALL MS20
CALL INST_I
CALL MS5
CALL INST_I
CALL MS1
CALL INST_I
;FUNCTION SET
MOV A,#1
MOV B,#4
MODS: MOV DPTR,#INITBL
PUSH ACC
CALL DIS_ROM
POP ACC
INC A
DJNZ B,MODS
RET
;................................
MS1: MOV R2,#0
MOV R3,#2
JMP DELAY
MS5: MOV R2,#0
MOV R3,#8
JMP DELAY
MS20: MOV R2,#0
MOV R3,#30
JMP DELAY
MS15: MOV R2,#0 ;!!!!!
MOV R3,#20
DELAY: PUSH B ;<R2,R3>
PUSH ACC
DIV AB
POP ACC
POP B
DJNZ R2,DELAY
DJNZ R3,DELAY
RET
;................................
INST_I: MOV DPTR,#INITBL ;INSTR iniCiAlizACni
MOV A,#0
DIS_ROM:
MOVC A,@A+DPTR
MOV DPTR,#WINST
MOVX @DPTR,A
CALL BUSY
RET
;................................
;iniCiAlizACni tABulkA
INITBL: DB 00110000B ;"6" SET DL TO HiGH
DB 00111000B ;"6" 8 Bit, 2 linEs, 5x7 Dots
DB 00001000B ;"4" DisplAy oFF
DB 00000001B ;"1" ClEAr DisplAy, rEturn Cursor
DB 00000110B ;"3" sEt sHiFt moDE (Entry moDE sEt)
;********************************
WINST EQU 0F000H
WDATA EQU 0F001H
RBUSY EQU 0F002H
;********************************
D_BLIK: MOV A,#00001101B ;DISPLAY ON, CURSOR OFF, BLIK ON
JMP INS_DI
;................................
D_ON: MOV A,#00001100B ;DISPLAY ON, CURSOR OFF
JMP INS_DI
;................................
D_OFF: MOV A,#00001000B ;DISPLAY OFF
INS_DI: PUSH ACC
CALL BUSY
POP ACC
MOV DPTR,#WINST
MOVX @DPTR,A
RET
;................................
D_HomE:
mov A,Cursor
mov B,Cursor
CjnE A,#15,t_D_HomE
jmp C_l1_r
t_D_HomE:
jnC C_l2_r
C_L1_R: MOV A,#00000010B ;CURSOR HOME L1
CALL INS_DI
C_MOVE_R:
CALL BUSY
MOV A,#00010100B ;KURSOR VPRAVO
MOV DPTR,#WINST
MOVX @DPTR,A
DJNZ B,C_MOVE_R
RET
;................................
C_L2_R: MOV A,#00000010B ;CURSOR HOME L2
CALL INS_DI
MOV A,#40-10H
ADD A,B
MOV B,A
JMP C_MOVE_R
;********************************
CES_AB:
CALL BUSY
MOV A,#01000000B ;DLOUHE Y = 0H
CALL AD_C6
MOV DPTR,#DL_Y
CALL DA_C6
MOV A,#01001000B ;DLOUHE E = 1H
CALL AD_C6
MOV DPTR,#DL_E
CALL DA_C6
MOV A,#01010000B ;C S HACKEM = 2H
CALL AD_C6
MOV DPTR,#C_S_H
CALL DA_C6
MOV A,#01011000B ;R S HACKEM = 3H
CALL AD_C6
MOV DPTR,#R_S_H
CALL DA_C6
MOV A,#01100000B ;E S HACKEM = 4H
CALL AD_C6
MOV DPTR,#E_S_H
CALL DA_C6
MOV A,#01101000B ;u DlouHE = 5H
CALL AD_C6
MOV DPTR,#Dl_u
CALL DA_C6
MOV A,#01110000B ;A DLOUHE = 6H
CALL AD_C6
MOV DPTR,#DL_A
CALL DA_C6
MOV A,#01111000B ;I DLOUHE = 7H
CALL AD_C6
MOV DPTR,#DL_I
DA_C6: CLR A ;VYSLI 8 * DATA
MOV B,#8
CYK_DA: PUSH ACC
MOVC A,@A+DPTR ;NACTI Z CODE
PUSH DPH
PUSH DPL
MOV DPTR,#WDATA
MOVX @DPTR,A ;ZAPIS DO DEFIN. RAM DISPLEJE
CALL BUSY
POP DPL
POP DPH
POP ACC
INC A
DJNZ B,CYK_DA ;8 RADKU ZNAKU
RET
AD_C6: MOV DPTR,#WINST ;ADRESA C6
MOVX @DPTR,A
CALL BUSY
RET
;-------------------------------
DL_Y: DB 2,4,11H,11H,0FH,1,0EH,0
DL_E: DB 2,4,0EH,11H,1FH,10H,0EH,0
C_S_H: DB 0AH,4,14,10H,10H,11H,14,0
R_S_H: DB 0AH,4,16H,19H,10H,10H,10H,0
E_S_H: DB 0AH,4,14,11H,1FH,10H,14,0
Dl_u: DB 2,4,11H,11H,11H,13H,0DH,0
DL_A: DB 2,4,0EH,1,15,11H,15,0
DL_I: DB 2,4,12,4,4,4,14,0
;********************************
END