也没去理解AC,只知道第一行第1点的地址是80H,第二行第1 点是C0H。
下面就是你要的程序,仅供参考
RS BIT P1.2 这3位是液晶屏的控制信号,连接方式由具体硬件而定
RW BIT P1.1
E BIT P1.0
ORG 00H
AJMP MAIN
ORG 30H
MAIN:
mov R0,#24
ACALL INITIAL
AJMP MAIN
-------液晶显示---------------------------------------
DISPLAY:
MOV A,#80H 第一行第1 个点
ACALL WR_CMD
MOV DPTR, #LINE1
ACALL PR_STR
ACALL WR_DATA
DISP1:
MOV A,#1CH 字符左移命令(注:实物中左移命令字为18H)
ACALL WR_CMD
ACALL D05S
DJNZ R0,DISP1
RET
---液晶屏初始化-------------------------------------------------
INITIAL:
MOV A, #01H
ACALL WR_CMD
MOV A, #38H
ACALL WR_CMD
MOV A, #0CH
ACALL WR_CMD
MOV A, #06H
ACALL WR_CMD
RET
----写液晶指令的子程序------------------------------------------
WR_CMD:
MOV P3, A
CLR RS 写入控制命令
CLR RW
CLR E
ACALL DELAY
SETB E
RET
----写液晶数据---------------------------------------------
WR_DATA:
MOV P3, A
SETB RS 写入数据
CLR RW
CLR E
ACALL DELAY 判断液晶模块是否忙?
SETB E
RET
-----写行字符---------------------------------------------------------------
PR_STR:
CLR A
MOVC A, @A+DPTR
JZ END_PR
ACALL WR_DATA
INC DPTR
AJMP PR_STR
END_PR:
RET
----查看液晶忙碌信号---------------------------------------------------------
DELAY:
MOV P3,#0FFH 判断液晶显示器是否忙的子程序
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P3.7,DELAY 如果P3.7为高电平表示忙就循环等待
RET
----0.5S延时(按12MHZ算)-----------------------------------------------------------------
D05S:
MOV R6,#25
MOV R5,#100
MOV R4,#100
DJNZ R4,$
DJNZ R5,$-4
DJNZ R6,$-8
RET
--------------------------------------------------------------------------------------
LINE1:
DB ' ZHU NI YI SHENG PING AN',00H
END
#include <reg51.h>#define uchar unsigned char
#define uint unsigned int
#define lcd_ports P1
sbit lcdrs=P3^5
sbit lcdrw=P3^3
sbit lcde=P3^4
void delay(uint z) //延迟子程序
{
uchar i,j
for(i=zi>0i--)
for(j=256j>0j--)
}
void write_com(uchar com) //1602写指令
{
lcdrs=0
P1=com
delay(5)
lcde=1
delay(5)
lcde=0
}
void write_data(uchar date) //1602写数据,写的是你要显示数据的ASCLL码值
{
lcdrs=1
P1=date
delay(5)
lcde=1
delay(5)
lcde=0
}
void init() //初始化
{
lcdrw=0
lcde=0
write_com(0x38)//使液晶显示点阵
write_com(0x0e)//初始设置
write_com(0x06) //初始设置
write_com(0x01) //清零
write_com(0x80+0x00)//使指针指向第一行第一列
}
void main()
{
init()
while(1){
write_com(0x80)//从第一行第一列开始写数据。
write_data(0x73) //显示s字符
write_data(0x69)//第一行第二列显示字符i
write_data(0x6e)//第一行第三列显示字符n
write_data(0x65)//第一行第四列显示字符e;}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)