HT1621的汇编驱动代码--适合MCS51内核MCU
深圳市炜烨兴电子有限公司|LCD在线 网站
深圳市炜烨兴电子有限公司
yesever
2009-3-17 21:28:15
HT1621是驱动段式液晶的典型芯片电路,不同的LCD其驱动显示的代码是很大的差别,以下的代码仅供参考,对于显示其它的LCD,它是不可能显示出正常的效果。
用户应取其思路。
; 用来测试KM3006的程序
; KM3006A for LCM 1621
; KM3006
;R1--传递指令码/显示码
;R0--传递地址
CS BIT P3.0 ;CS FOR KM3006
_WR BIT P3.1
DAT BIT P3.2
LED BIT P3.3
KEY BIT P3.4
DDD EQU 60H
ORG 0000H
LJMP START
ORG 0030H
START:
SETB KEY
MOV SP,#67H
MOV R1,#00000001B ;SYS EN (use interal clock)
LCALL COM
MOV R1,#00011000B ;RC 256K (system default)
LCALL COM
MOV R1,#00101001B; ;BIAS 1/3 (use com0~com3)
LCALL COM
MOV R1,#00000011B ;LCD ON
LCALL COM
LCALL DIS_ALL
LCALL DELAY
DISPK: ;DISPLAY ICONS FOR KM3002
LCALL CLEAR
LCALL DELAY
MOV R0,#0
MOV R1,#01H
LCALL INDA
LCALL DELAY1
LCALL DELAY1
MOV R1,#03H
LCALL INDA
LCALL DELAY1
LCALL DELAY1
MOV R1,#07H
LCALL INDA
LCALL DELAY1
LCALL DELAY1
MOV R1,#0FH
LCALL INDA
LCALL DELAY1
LCALL DELAY1
MOV R0,#2
LOOP1: MOV R1,#01H ;ICONS FOR KM3002
LCALL INDA
INC R0
INC R0
LCALL DELAY1
LCALL DELAY1
CJNE R0,#16,LOOP1
; KM3006A for LCM 1621
; KM3006
;R1--传递指令码/显示码
;R0--传递地址
CS BIT P3.0 ;CS FOR KM3006
_WR BIT P3.1
DAT BIT P3.2
LED BIT P3.3
KEY BIT P3.4
DDD EQU 60H
ORG 0000H
LJMP START
ORG 0030H
START:
SETB KEY
MOV SP,#67H
MOV R1,#00000001B ;SYS EN (use interal clock)
LCALL COM
MOV R1,#00011000B ;RC 256K (system default)
LCALL COM
MOV R1,#00101001B; ;BIAS 1/3 (use com0~com3)
LCALL COM
MOV R1,#00000011B ;LCD ON
LCALL COM
LCALL DIS_ALL
LCALL DELAY
DISPK: ;DISPLAY ICONS FOR KM3002
LCALL CLEAR
LCALL DELAY
MOV R0,#0
MOV R1,#01H
LCALL INDA
LCALL DELAY1
LCALL DELAY1
MOV R1,#03H
LCALL INDA
LCALL DELAY1
LCALL DELAY1
MOV R1,#07H
LCALL INDA
LCALL DELAY1
LCALL DELAY1
MOV R1,#0FH
LCALL INDA
LCALL DELAY1
LCALL DELAY1
MOV R0,#2
LOOP1: MOV R1,#01H ;ICONS FOR KM3002
LCALL INDA
INC R0
INC R0
LCALL DELAY1
LCALL DELAY1
CJNE R0,#16,LOOP1
LCALL DELAY
LCALL CLEAR
MOV DDD,#0
LCALL DIS_NUMBER
LCALL DELAY
MOV DDD,#2
LCALL DIS_NUMBER
LCALL DELAY
MOV DDD,#4
LCALL DIS_NUMBER
LCALL DELAY
MOV DDD,#8
LCALL DIS_NUMBER
LCALL DELAY
CPL LED
LCALL CLEAR
LJMP START
;=======================================
DIS_NUMBER:
PUSH DDD
MOV DPTR,#TAB_3006
MOV A,DDD
MOVC A,@A+DPTR
MOV DDD,A
MOV R0,#1
DDDD:
MOV A,DDD
SWAP A
MOV R1,A
LCALL INDA
INC R0
MOV R1,DDD
LCALL INDA
INC R0
LCALL DELAY1
LCALL DELAY1
CJNE R0,#17,DDDD
POP DDD
RET
;=======================================
CLEAR: MOV R0,#0
MOV R1,#00H
REPP: LCALL INDA
INC R0
CJNE R0,#32,REPP
; LCALL MS200
RET
;=======================================
DIS_ALL:
MOV R0,#0 ;THE ADDRESS OF display content
MOV R1,#0FH
REP1: LCALL INDA
INC R0
CJNE R0,#32,REP1
RET
;====================================
COM:
CLR CS
LCALL INCOM
SETB CS
RET
;=====================================
INDA:
CLR CS
LCALL INDAT
SETB CS
RET
;--------------------------------
INCOM:
NOP
MOV A,#10000000B
MOV R7,#3
SPT1: RLC A
MOV DAT,C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPT1
MOV A,R1
MOV R7,#9
SPT2: RLC A
MOV DAT,C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPT2
RET
;==============================
INDAT:
NOP
MOV A,#10100000B
MOV R7,#3
SPP1: RLC A
MOV DAT, C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPP1 ;SEND'WRITE'INSTRUCTION TO 1621 CONTROLER
LCALL CLEAR
MOV DDD,#0
LCALL DIS_NUMBER
LCALL DELAY
MOV DDD,#2
LCALL DIS_NUMBER
LCALL DELAY
MOV DDD,#4
LCALL DIS_NUMBER
LCALL DELAY
MOV DDD,#8
LCALL DIS_NUMBER
LCALL DELAY
CPL LED
LCALL CLEAR
LJMP START
;=======================================
DIS_NUMBER:
PUSH DDD
MOV DPTR,#TAB_3006
MOV A,DDD
MOVC A,@A+DPTR
MOV DDD,A
MOV R0,#1
DDDD:
MOV A,DDD
SWAP A
MOV R1,A
LCALL INDA
INC R0
MOV R1,DDD
LCALL INDA
INC R0
LCALL DELAY1
LCALL DELAY1
CJNE R0,#17,DDDD
POP DDD
RET
;=======================================
CLEAR: MOV R0,#0
MOV R1,#00H
REPP: LCALL INDA
INC R0
CJNE R0,#32,REPP
; LCALL MS200
RET
;=======================================
DIS_ALL:
MOV R0,#0 ;THE ADDRESS OF display content
MOV R1,#0FH
REP1: LCALL INDA
INC R0
CJNE R0,#32,REP1
RET
;====================================
COM:
CLR CS
LCALL INCOM
SETB CS
RET
;=====================================
INDA:
CLR CS
LCALL INDAT
SETB CS
RET
;--------------------------------
INCOM:
NOP
MOV A,#10000000B
MOV R7,#3
SPT1: RLC A
MOV DAT,C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPT1
MOV A,R1
MOV R7,#9
SPT2: RLC A
MOV DAT,C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPT2
RET
;==============================
INDAT:
NOP
MOV A,#10100000B
MOV R7,#3
SPP1: RLC A
MOV DAT, C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPP1 ;SEND'WRITE'INSTRUCTION TO 1621 CONTROLER
MOV A,R0 ;ADDRESS(FROM 0~31)
RLC A ;LOW 6 BIT IS AVAILABITITY
RLC A ;
MOV R7,#6
SPP2: RLC A
MOV DAT,C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPP2
RLC A ;LOW 6 BIT IS AVAILABITITY
RLC A ;
MOV R7,#6
SPP2: RLC A
MOV DAT,C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPP2
MOV A,R1 ;DATA
RLC A
RLC A
RLC A
RLC A ;MISSING HIGH 4 BIT
MOV R7,#4 ;Low 4 bit is D0,D1,D2,D3
SPP3: RLC A
MOV DAT,C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPP3
NOP
RET
;================================
DELAY:
MOV 50H,#100
D2: MOV 51H,#0
LCALL MS100
D1: SETB KEY
JNB KEY,KEY_PAUSE
DJNZ 51H,D1
LCALL MS100
DJNZ 50H,D2
RET
KEY_PAUSE:
LCALL PAUSE
RET
PAUSE:
SETB KEY ;PAUSE KEY PROCESS
SETB KEY
LCALL MS100
JNB KEY,PAUSE ;CHECK KEY WAS PRESSED
PAUSE1:
LCALL MS100
JB KEY,PAUSE1 ;CHECK KEY OPEN AFTER PRESSED
PAUSE2: SETB KEY
SETB KEY
LCALL MS100
JNB KEY,PAUSE2 ;CHECK KEY WAS PRESSED AGAIN
RET
;========================================
delay1:
MOV 53H,#0ffh
DEL11: MOV 54H,#0ffh
DJNZ 54H,$
DJNZ 53H,del11
RET
;--------------------------------
MS200: MOV 50h,#10
QEAT: SETB KEY
SETB KEY
QEA1: LCALL MS100
JB KEY,$
QEA2: LCALL MS100
JNB KEY,$
LCALL MS100
RET
;--------------------------------
MS100: MOV R5,#100
DJNZ R5,$
RET
;--------------------------------
TAB_3002:
DB 0AFH ;0
DB 0A0H ;1
DB 06BH ;2
DB 0E3H ;3
DB 0E4H ;4
DB 0C7H ;5
DB 0CDH ;6
DB 0A2H ;7
DB 0EFH ;8
DB 0E7H ;9
TAB_3006:
DB 0BEH; 07DH ;0
DB 0A0H; 005H ;1
DB 07CH; 03EH ;2
DB 0F8H; 01FH ;3
DB 0E2H; 047H ;4
DB 0DAH; 05BH ;5
DB 0CEH; 073H ;6
DB 0B0H; 00DH ;7
DB 0FEH; 07FH ;8
DB 0FAH; 05FH ;9
RLC A
RLC A
RLC A
RLC A ;MISSING HIGH 4 BIT
MOV R7,#4 ;Low 4 bit is D0,D1,D2,D3
SPP3: RLC A
MOV DAT,C
NOP
CLR _WR
NOP
SETB _WR
NOP
DJNZ R7,SPP3
NOP
RET
;================================
DELAY:
MOV 50H,#100
D2: MOV 51H,#0
LCALL MS100
D1: SETB KEY
JNB KEY,KEY_PAUSE
DJNZ 51H,D1
LCALL MS100
DJNZ 50H,D2
RET
KEY_PAUSE:
LCALL PAUSE
RET
PAUSE:
SETB KEY ;PAUSE KEY PROCESS
SETB KEY
LCALL MS100
JNB KEY,PAUSE ;CHECK KEY WAS PRESSED
PAUSE1:
LCALL MS100
JB KEY,PAUSE1 ;CHECK KEY OPEN AFTER PRESSED
PAUSE2: SETB KEY
SETB KEY
LCALL MS100
JNB KEY,PAUSE2 ;CHECK KEY WAS PRESSED AGAIN
RET
;========================================
delay1:
MOV 53H,#0ffh
DEL11: MOV 54H,#0ffh
DJNZ 54H,$
DJNZ 53H,del11
RET
;--------------------------------
MS200: MOV 50h,#10
QEAT: SETB KEY
SETB KEY
QEA1: LCALL MS100
JB KEY,$
QEA2: LCALL MS100
JNB KEY,$
LCALL MS100
RET
;--------------------------------
MS100: MOV R5,#100
DJNZ R5,$
RET
;--------------------------------
TAB_3002:
DB 0AFH ;0
DB 0A0H ;1
DB 06BH ;2
DB 0E3H ;3
DB 0E4H ;4
DB 0C7H ;5
DB 0CDH ;6
DB 0A2H ;7
DB 0EFH ;8
DB 0E7H ;9
TAB_3006:
DB 0BEH; 07DH ;0
DB 0A0H; 005H ;1
DB 07CH; 03EH ;2
DB 0F8H; 01FH ;3
DB 0E2H; 047H ;4
DB 0DAH; 05BH ;5
DB 0CEH; 073H ;6
DB 0B0H; 00DH ;7
DB 0FEH; 07FH ;8
DB 0FAH; 05FH ;9
END
责任编辑: admin
参与评论
- 相关文章
- 带字库液晶12864-12/12232F等C51驱动程序和电..[03-17]
- 汉字库液晶KM12864-19B[03-17]
- 内置ST7920控制器带中文字库液晶屏KM12864-12[03-17]
- 内置ST7920控制器带中文字库液晶屏KM12232H01[03-17]
- 汉字库液晶KM12232F[03-17]
- 图形点阵液晶KM19264C[03-17]
- 最新文章
- 带字库液晶12864-12/12232F等C51驱动程序和电..[03-17]
- 汉字库液晶KM12864-19B[03-17]
- 内置ST7920控制器带中文字库液晶屏KM12864-12[03-17]
- 内置ST7920控制器带中文字库液晶屏KM12232H01[03-17]
- 汉字库液晶KM12232F[03-17]
- 图形点阵液晶KM19264C[03-17]
