📄 lchar.asm
字号:
;2*16点阵字符液晶显示程序
;Define addressable bit:
RS BIT P1.0
RW BIT P1.1
ENABLE BIT P1.2
DATABUS EQU P0; P0 port should be pulled up by 20k resistors
;
TIMER0 EQU 34H
TIMER1 EQU 35H
COUNTER EQU 36H
N EQU 40H
;
;
ORG 0000H
AJMP BEGIN
;
;
ORG 0040H
BEGIN: NOP
NOP
MOV P0,#0FFH
MOV P1,#03H
NOP
MOV SP,#60H
NOP
LCALL DELAY01
;
;
;
ASTART: MOV A,#38H; 8-bit,2 lines,5X8 dots
LCALL AWRCTRL
MOV A,#06H; increament by 1, no shift
LCALL AWRCTRL
LCALL WRCGCODE; write CGRAM code
NOP
DOT: MOV A,#0CH; display on, cursor off, blink off
LCALL AWRCTRL
NOP
MOV A,#01H; clear disram, set DDRAM address 0
LCALL AWRCTRL
LCALL DELAY1S
NOP
NOP; write dots and square
MOV A,#00H; A is CCODE
MOV B,#11; write 11 CCODE
DOT1: MOV R2,#80
DOT2: LCALL AWRDATA
DJNZ R2,DOT2
LCALL DELAY1S
CJNE A,#07H,DOT3
MOV A,#40H; 41H= "A" DCODE
DOT3: INC A
DJNZ B,DOT1
NOP
NOP
LOOP1: MOV A,#0FH; display on, cursor blink
LCALL AWRCTRL
MOV A,#01H; clear disram, set DDRAM address 0
LCALL AWRCTRL
MOV DPTR,#ATAB0; display successively
LCALL AWRITE
NOP
MOV A,#0C0H; line 2 start address 40H
LCALL AWRCTRL
LCALL AWRITE
LCALL DELAY1S
NOP
NOP
MOV B,#3; shift 3 times
LOOP4: MOV A,#18H; shift display left
LCALL AWRCTRL
LCALL DELAY1S
DJNZ B,LOOP4
NOP
LOOP41: MOV A,#0CH; display on, cursor off
LCALL AWRCTRL
MOV A,#01H; clear disram, set DDRAM address 0
LCALL AWRCTRL
MOV DPTR,#ATAB01
LCALL AWRITE
NOP
MOV A,#0C0H; line 2 start address 40H
LCALL AWRCTRL
LCALL AWRITE
LCALL DELAY1S
LCALL DELAY1S
MOV A,#0CH; display on, cursor off
LCALL AWRCTRL
MOV A,#01H; clear disram, set DDRAM address 0
LCALL AWRCTRL
MOV DPTR,#PHILCHAR
LCALL AWRITE
NOP
MOV A,#0C0H; line 2 start address 40H
LCALL AWRCTRL
LCALL AWRITE
LCALL DELAY1S
LCALL DELAY1S
LJMP DOT
NOP;---------
AWRCTRL: LCALL ABUSY
AWRCTRL1: CLR RS
CLR RW
MOV DATABUS,A
SETB ENABLE
NOP
CLR ENABLE
NOP
RET;---------
ARDCTRL: NOP
MOV DATABUS,#0FFH
CLR RS; RS=0
SETB RW; R/W=1
SETB ENABLE; eanble
NOP
MOV A,DATABUS
CLR ENABLE
RET;---------
AWRDATA: LCALL ABUSY
SETB RS
CLR RW
MOV DATABUS,A
SETB ENABLE
NOP
CLR ENABLE
RET;--------
AWRITE: CLR A
MOVC A,@A+DPTR
INC DPTR
CJNE A,#0FFH,AWRITE1
RET
AWRITE1: LCALL AWRDATA
SJMP AWRITE
NOP;---------
WRCGCODE: MOV A,#40H; set CGRAM address CCODE=00H
LCALL AWRCTRL
MOV DPTR,#CODETAB1; write CGCODE
LCALL AWRITE
RET;---------
ABUSY: PUSH ACC; check busy flag
MOV DATABUS,#0FFH
CLR RS; RS=0
SETB RW; R/W=1
SETB ENABLE; eanble
ABUSY1: MOV A,DATABUS
JB ACC.7,ABUSY1
CLR ENABLE
POP ACC
RET;---------
ATAB0: DB 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; for line 1
DB '0123456789'
DB 00H,01H,02H,03H; square DCODES
DB 0FFH
DB 'abcdefghijklmnopqrstuvwxyz'; for line 2
DB '{[(<',7FH,7EH,'>)]}'
DB 04H,05H,06H,07H; lines DCODES
DB 0FFH
ATAB01: DB 'LAUREL ELECTRONICS CO., LTD.LAUREL ELECT';for line 1
DB 0FFH
DB 'laurel electronics co., ltd.laurel elect';for line 2
DB 0FFH
PHILCHAR: DB 'WELCOME TO HZIEE'
DB 0FFH
TABEND: DB 0FFH
CODETAB1: DB 1FH,00H,1FH,00H,1FH,00H,1FH,00H; "4 lines1"
DB 00H,1FH,00H,1FH,00H,1FH,00H,1FH; "4 lines2"
DB 15H,15H,15H,15H,15H,15H,15H,15H; "3 lines"
DB 0AH,0AH,0AH,0AH,0AH,0AH,0AH,0AH; "2 lines"
DB 15H,0AH,15H,0AH,15H,0AH,15H,0AH; "dot1"
DB 0AH,15H,0AH,15H,0AH,15H,0AH,15H; "dot2"
DB 1FH,11H,11H,11H,11H,11H,11H,1FH; "square"
DB 1FH,1FH,1FH,1FH,1FH,1FH,1FH,1FH; "black"
DB 0FFH
;
;
;The followings are common subroutines:
;
;
DELAY: PUSH TIMER1; delay TIMER1*1 ms for 12MHz
PUSH TIMER0
DELAY1: MOV TIMER0,#250
DELAY2: NOP
NOP
DJNZ TIMER0,DELAY2
DJNZ TIMER1,DELAY1
POP TIMER0
POP TIMER1
RET;---------
DELAY01: MOV TIMER1,#01H; delay 1 ms
DELAY011: LCALL DELAY
RET;---------
DELAY100: NOP; delay 100 ms
PUSH TIMER1
MOV TIMER1,#100
LCALL DELAY
LCALL DELAY
POP TIMER1
RET;---------
DELAY250: NOP; delay 250 sec
PUSH TIMER1
MOV TIMER1,#250
LCALL DELAY
POP TIMER1
RET;---------
DELAY500: NOP; delay 500 ms
PUSH TIMER1
MOV TIMER1,#250
LCALL DELAY
LCALL DELAY
POP TIMER1
RET;---------
DELAY1S: NOP; delay 1 sec
PUSH TIMER1
MOV TIMER1,#250
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
POP TIMER1
RET;----------
;
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -