微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > AT89S52与LCD1602(asm/c51)

AT89S52与LCD1602(asm/c51)

时间:11-10 来源:互联网 点击:

LCD1602 DDRAM地址映射表:

第一行地址80H

第二行地址C0H

单片机与LCD1602接口

;///////////////////////////////////////////////
项目名称:AT89S52与LCD1602接口实验
功能:在LCD1602的第一行显示WWW.LZY.EDU.CN:
在LCD1602的第二行显示0830--3150897
;///////////////////////////////////////////////
RS EQUP2.4;P2.4接LCD的RS

RW EQUP2.5;P2.5接LCD的RW

E EQUP2.6;P2.6接LCD的E
DRIR EQUP0;P0口接LCD的DB0-DB7
CWDK EQU 40H
DATK EQU 41H

ORG 0000H
SJMP START
ORG 0030H
;主程序
START:MOV SP,#80H
LCALL RESTE
LCALL TOPDA
LCALL BOTDA
SJMP $
;函数INCWD 指令写入程序
INCWD:CLR RS
CLR RW
MOV A,CWDK
MOV DRIR,A
SETB E
NOP
NOP
CLR E
LCALL DELAY
RET
;函数INDAT显示数据写入程序
INDAT:SETB RS
CLR RW
MOV A,DATK
MOV DRIR,A
SETB E
NOP
NOP
CLR E
LCALL DELAY
RET
;函数RESTELCD1602初始化程序
RESTE:MOV CWDK,#00111000B;工作方式 8位数据接口,二行显示,5*7点阵
LCALL INCWD
MOV CWDK,#00000001B;AC清0 光标复位
LCALL INCWD
MOV CWDK,#00001111B;开显示 开光标 开闪烁
LCALL INCWD
MOVCWDK,#00011100B;屏幕不动光标自动右移
LCALL INCWD
RET
;函数TOPDA LCD1602第一行显示程序
TOPDA:MOV CWDK,#80H
LCALL INCWD
MOV R2,#10H
MOV R3,#00H
MOV DPTR,#TABL1
D1:MOV A,R3
MOVC A,@A+DPTR
MOV DATK,A
LCALL INDAT
LCALL DEL1S
INC R3
DJNZ R2,D1
RET
;函数BOTDA LCD1602第二行显示程序
BOTDA:MOV CWDK,#0C0H
LCALL INCWD
MOV R2,#10H
MOV R3,#00H
MOV DPTR,#TABL2
D2:MOV A,R3
MOVC A,@A+DPTR
MOV DATK,A
LCALL INDAT
LCALL DEL1S
INC R3
DJNZR2,D2
RET
;函数DELAY 480us延时
DELAY:MOV R1,#0A0H
E1:NOP
DJNZ R1,E1
RET
;函数DEL1S 1S延时
DEL1S:MOV R5,#20
E2:MOV R6,#20
E3:MOV R7,#248
DJNZ R7,$
DJNZ R6,E3
DJNZ R5,E2
RET

TABL1:DB "WWW.LZY.EDU.CN"
TABL2:DB " 0830---3150897 "
END

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

付带闪烁光标的LCD1602字符显示

;///////////////////////////////////////////////////

;AT89S52与LCD1602接口

;目的:1602第一行显示:WWW.SINA.COM.CN

;第二行显示:Visual Basic net

;//////////////////////////////////////////////////

RS EQU P2.4

RW EQU P2.5

EEQU P2.6

LDB EQU P0

DAT DATA 40H

COM DATA 41H

ORG 0000H

SJMP START

ORG 0030H

;主程序

START:MOV SP,#50H

LCALL DEL40;1602复位延时

LCALL LRET;LCD1602初始化

LCALL TOPD;显示第一行

LCALL BOMD;显示第二行

LJMP START

;函数BUSY忙标志检测

BUSY: CLR RS

SETB RW

E1:MOV LDB,#0FFH

SETB E

MOV A,LDB

CLR E

JB ACC.7,E1

RET

;函数WCOM LCD1602指令写入子程序

WCOM: LCALL BUSY

CLR RS

CLR RW

MOV A,COM

MOV LDB,A

SETB E

NOP

CLR E

RET

;函数WDAT LCD1602显示数据写入子程序

WDAT: LCALL BUSY

SETB RS

CLR RW

MOV A,DAT

MOV LDB,DAT

SETB E

NOP

CLR E

RET

;函数LRET LCD1602初始化子程序

LRET: MOV COM,#00000001B;清屏

LCALL WCOM

MOV COM,#00111000B;功能设定8bit数据接口,两行显示,5*7点阵

LCALL WCOM

MOV COM,#00000110B;输入方式设定AC加一,画面不动

LCALL WCOM

MOV COM,#00001111B;开显示,开光标,开闪烁

LCALL WCOM

MOV COM,#00000010B;光标复位

LCALL WCOM

MOV COM,#00010100B;光标右移

LCALL WCOM

RET

;函数TOPD LCD1602第一行显示子程序

TOPD: MOV COM,#80H

LCALL WCOM

MOV DPTR,#TAB1

MOV R3,#10H

MOV R4,#00H

E2:MOV A,R4

MOVC A,@A+DPTR

MOV DAT,A

LCALL WDAT

LCALL DEL05

INC R4

DJNZ R3,E2

RET

;函数BOMD LCD1602第二行显示子程序

BOMD: MOV COM,#0C0H

LCALL WCOM

MOV DPTR,#TAB2

MOV R3,#10H

MOV R4,#00H

E3:MOV A,R4

MOVC A,@A+DPTR

MOV DAT,A

LCALL WDAT

LCALL DEL05

INC R4

DJNZ R3,E3

RET

;函数DEL40 40MS延时

DEL40:MOV R0,#160

D1:MOV R1,#250

DJNZ R1,$

DJNZ R0,D1

RET

;函数DEL05 0.5S延时

DEL05:MOV R5,#2

D3:MOV R0,#200

D2:MOV R1,#248

DJNZ R1,$

DJNZ R0,D2

DJNZ R5,D3

RET

;显示数据表

TAB1:DB " WWW.SINA.COM.CN"

TAB2:DB "Visual Basic net"

END

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top