黄金会员
主题
回帖0
积分9861
阅读权限40
注册时间2009-11-11
最后登录1970-1-1
在线时间 小时
|
;;;;;;;;LCD1602驱动程序;;;;;;;;;;;;;;;;;
;;;;;;12mhz晶振;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;显示固定字符;;;;;;;;;;;;;;;;;;;;
;;;;;;;;p0口高4位接DB7-DB4 RW接地;;;
;;;;有文挡说上电要延时15MS以上再送指令,但试过不延时也行;;;;
RS EQU P2.5
E EQU P2.7
ORG 0000H
ajmp start
org 0033h
start:
mov sp,#60h
;;;;;lcd上电初始化;;;;;;
main: mov p0,#30h ;三条03H指令,因为我的是P0口高4位接的DB7-DB4所以是30H
acall enable
acall delay1 ;增加了延时,没此句在频繁按复位按钮时可能会出现乱码
mov p0,#30h
acall enable
mov p0,#30h
acall enable
mov p0,#20h
acall enable
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;lcd设置;;;;;;;;;;;;;;
MOV P0,#00H;清屏 很多屏此条指令只能放此处
ACALL ENABLE ;指定是传的指令而非数据
MOV P0,#10H
ACALL ENABLE
MOV P0,#00H;清屏
ACALL ENABLE
MOV P0,#10H
ACALL ENABLE
MOV P0,#20H ;功能设置 4总线驱动,2行,5X7
ACALL ENABLE
MOV P0,#80H
ACALL ENABLE
MOV P0,#00H;光标复位
ACALL ENABLE
MOV P0,#20H
ACALL ENABLE
MOV P0,#00H;字符和光标 ,I/D=1光标右移(AC自动加1) S=0字符移动无效
ACALL ENABLE
MOV P0,#60H
ACALL ENABLE
MOV P0,#00H ;显示开关控制 D=1开显示,C=1光标,B=1光标闪
ACALL ENABLE
MOV P0,#0F0H
ACALL ENABLe
;;;;;;;指定显示首址;;;;;;;;;;
MOV DPTR ,#TAB
MOV A,#80H ;;第1行第1位
mov p0,A
ACALL ENABLE
SWAP A
MOV P0,A
ACALL ENABLE
ACALL DISP
MOV DPTR ,#tab1
MOV A,#0C0H ;第2行第1位
MOV P0,A
ACALL ENABLE
SWAP A
mov p0,A
ACALL ENABLE
ACALL DISP
AJMP $
;;;;;;;;;;;;;;;;;;;;
;;送指令子程序;;;;;;
ENABLE: CLR RS ;送命令
CLR E
ACALL DELAY
SETB E
RET
;;;;;;;;;;;;;;;;;;;;;;
;;;;显示子程序;;;;;;;;
DISP: MOV R0,#16
LOOP:MOV A,#00H
MOVC A,@A+DPTR
ACALL DISP1
INC DPTR
DJNZ R0,LOOP
RET
;;;;;;;;;;;;;;;
DISP1:MOV P0,A
SETB RS ;1
CLR E ;2
ACALL DELAY ;3
SETB E ;4 1,2,3,4四句指定传的是数据
SWAP A
MOV P0,A
SETB RS
CLR E
ACALL DELAY
SETB E
RET
;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;
DELAY: MOV R7,#100
D1: MOV R6,#2
DJNZ R6,$
DJNZ R7,D1
RET
DELAY1: MOV R7,#38H ;5。1MS
D11: MOV R6,#2CH
DJNZ R6,$
DJNZ R7,D11
RET
TAB: DB "CHENLI 1602TEXT"
tab1:db "TEL: 15000000000"
END
|
|