单片机LCD1602液晶显示的汇编程序

单片机LCD1602液晶显示的汇编程序,第1张

也没去理解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

ACALL DISPLAY调用液晶显示子程序

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;}

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11150147.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存