⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lchar.asm

📁 液晶字符显示完全源程序(汇编) 文件根据需要建立其他关联,默认为DXP2004,
💻 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 + -