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

📄 lcd.asm

📁 TS1602 LCD 显示的例子,包括,LCD的初始化,显示一行文字,清屏
💻 ASM
字号:
;=================================================
; LCD显示程序 - 内含显示实用子程序
;=================================================
;	本学习板采用四位总线显示方式
;
;	教学请看《液晶显示器件应用技术》 第七章
;
;	《LCD规格书.doc》内有指令表和字符表 
;
;	注意:因为LCD和LED 数码管共用接口,所以使用LCD时P2.4-P2.7 必需设为1。
;=================================================
;

;=================================================
LCDpRS		BIT	P0.0
LCDpRW		BIT	P0.1
LCDpE		BIT	P0.2
LCDLED		BIT	P0.3

ORG 000H
	;初始化
	CALL	LCD_INIT

	CALL	DISP_DATE

	MOV	DPTR,#TAB_YuHua
	MOV	A,#00H
	CALL	LCD_PRINT


JMP	$

;=================================================================================
DISP_DATE:
	;20XX-XX-XX
	MOV	A,#32H
	MOV	B,#43H
	CALL	LCD_WORD
	MOV	A,#30H
	MOV	B,#44H
	CALL	LCD_WORD
	MOV	A,#2DH
	MOV	B,#47H
	CALL	LCD_WORD
	MOV	A,#2DH
	MOV	B,#4AH
	CALL	LCD_WORD


	mov     a,#7	;year
	mov     b,#45H
	call    BCDtoLCD
	mov     a,#1	;month
	mov     b,#48H
	call    BCDtoLCD
	mov     a,#27H	;day
	mov     b,#4BH
	call    BCDtoLCD

ret




;=================================================================================
;	LCD显示控制程序		采用4位总线的结构
;=================================================================================
;	外部调用
;	使用的变量 A B
;=================================================================================
LCD_INIT:	;初始化
	CLR	LCDpRW
	CLR	LCDpRS
	SETB	LCDpE
	ANL	P0,#00001111B
	ORL	P0,#00110000B
	CLR	LCDpE
	CALL	Delay_5ms
	SETB	LCDpE
	ANL	P0,#00001111B
	ORL	P0,#00110000B
	CLR	LCDpE
	CALL	Delay_5ms
	SETB	LCDpE
	ANL	P0,#00001111B
	ORL	P0,#00110000B
	CLR	LCDLED
	CLR	LCDpE
	CALL	Delay_5ms
	SETB	LCDpE
	MOV     a,#28H	;四位总线,两行,5X7
	CALL    LCD_SEND8BIT
	MOV     a,#0cH	;画面显示,不显光标和不闪烁
	CALL    LCD_SEND8BIT

	CLR     LCDpRS
	MOV     a,#01H	;清屏
	CALL    LCD_SEND8BIT
	MOV     a,#0cH	;画面显示,不显光标和不闪烁
	CALL    LCD_SEND8BIT
	MOV     a,#06H	;画面不动,光标右移
	CALL    LCD_SEND8BIT
	MOV     a,#14H	;光标向右滚动
	CALL    LCD_SEND8BIT
RET


LCD_CLR:
	CALL	LCD_CLR_LINE1
	CALL	LCD_CLR_LINE2
RET

LCD_CLR_LINE1:	;清除第一行
	MOV	DPTR,#TAB_CLR_LINE
	MOV	A,#00H
	CALL	LCD_PRINT
RET
LCD_CLR_LINE2:	;清除第二行
	MOV	DPTR,#TAB_CLR_LINE
	MOV	A,#40H
	CALL	LCD_PRINT
RET
	CLR     LCDpRS
	MOV     a,#01H	;清屏
	CALL    LCD_SEND8BIT
RET
;======================================
;  a为十进制BCD数据,b为LCD上的位置(第一行0-fh,第二行40h-4fh)
;======================================
BCDtoLCD:
	PUSH	B
	PUSH	ACC
	SWAP	A
	ANL	A,#00001111b
	ADD	A,#30h
	CALL	LCD_word
	POP	ACC
	ANL	A,#00001111b
	ADD	A,#30h
	POP	B
	INC	B
	CALL	LCD_word
RET

;======================================
;打印显示子程序(显示一串字符)
;    a=为显示地址(第一行0-fh,第二行40h-4fh), dptr=表名 ,0ffH结束标志
;======================================
LCD_PRINT:
	CLR	LCDpRS      ;写地址
	ORL	a,#10000000b
	CALL	LCD_SEND8BIT
	SETB	LCDpRS      ;写数据
LCD_PRINT1:
	CLR	A
	CLR	C
	MOVC	A,@A+DPTR
	CJNE	A,#0ffh,$+3
	JNC	LCD_PRINT2
	CALL	LCD_SEND8BIT
	INC	dptr
	JMP	LCD_PRINT1
LCD_PRINT2:
RET
;======================================
;打印显示子程序(显示一个字符)
;  A-写入数据, B-写入地址(第一行0-fh,第二行40h-4fh)
;======================================
LCD_WORD: 
	PUSH	ACC
	MOV	a,b
	CLR	LCDpRS      ;写地址
	ORL	a,#10000000b
	CALL	LCD_SEND8BIT

	SETB	LCDpRS      ;写数据
	POP	ACC
	CALL	LCD_SEND8BIT
RET
;======================================
LCD_SEND8BIT:  ;	A为欲写入的数据
	MOV	B,A
	SETB	LCDpE
	ANL	A,#11110000B
	ANL	P0,#00001111B
	ORL	P0,A
	CLR	LCDpE

	MOV	A,B
	SWAP	A
	SETB	LCDpE
	ANL	A,#11110000B
	ANL	P0,#00001111B
	ORL	P0,A
	CLR	LCDpE

	MOV	B,#0ffH  ;500us
	DJNZ	B,$
RET

;要显示的字符串表 0FFH 表示结束
TAB_AM:		DB 41H,4DH,0FFH
TAB_FM:		DB 46H,4DH,0FFH
TAB_USB:	DB 55H,53H,42H,0FFH
TAB_CLR_LINE:	DB 20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,20H,0FFH
TAB_Volume:	DB 56H,6FH,6CH,75H,6DH,65H,0FFH
TAB_MHz:	DB 4DH,48H,7AH,0FFH
TAB_KHz:	DB 4BH,48H,7AH,0FFH
TAB_MUTE:	DB 4DH,55H,54H,45H,0FFH
TAB_PLAY:	DB 50H,4CH,41H,59H,0FFH
TAB_NO_MP3:	DB 4EH,4FH,20H,4DH,50H,33H,0FFH
TAB_NEXT:	DB 4EH,45H,58H,54H,0FFH
TAB_PREV:	DB 50H,52H,45H,56H,0FFH

TAB_PresetEmpty: DB 50H,72H,65H,72H,65H,74H,20H,20H,20H,45H,6DH,70H,74H,79H,0FFH
TAB_PresetStored: DB 50H,72H,65H,72H,65H,74H,20H,20H,20H,53H,74H,6FH,72H,65H,64H,0FFH
TAB_STEREO:	DB 53H,74H,65H,72H,65H,6FH,0FFH
TAB_MONO:	DB 20H,20H,4DH,6FH,6EH,6FH,0FFH
TAB_STOP:	DB 53H,54H,4FH,50H,0FFH
TAB_PAUSE:	DB 50H,41H,55H,53H,45H,0FFH

TAB_Alarm_Setup:DB 41H,6CH,61H,72H,6DH,20H,53H,65H,74H,75H,70H,0FFH
TAB_Beep:	DB 42H,65H,65H,70H,020H,0FFH
TAB_Radio:	DB 52H,61H,64H,69H,6FH,0FFH
TAB_YuHua:      DB 20H,59H,75H,48H,75H,61H,20H,45H,6CH,65H,63H,74H,72H,6FH,6eH,20H,0FFH

;============================================================================
DELAY_500MS:
	MOV	R2,#208
	JMP	DELAY_MS
DELAY_175MS:
	MOV	R2,#73
	JMP	DELAY_MS
delaY_120MS:
	MOV	R2,#50
	JMP	DELAY_MS
delay_60ms:
	MOV	R2,#25
	JMP	DELAY_MS
delay_30ms:
	MOV	R2,#12
	JMP	DELAY_MS
DELAY_5MS:
	MOV	R2,#2
;===================================
DELAY_MS:
	CALL	DELAY2400
	DJNZ	R2,DELAY_MS
RET
;===================================
DELAY2400:;10x244+4=2447 /1.024=2390
	MOV 	R0,#244	;1
DELAY24001:
	MUL	AB	;4
	MUL	AB	;4
	DJNZ	R0,DELAY24001	;2
	RET
	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -