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

小弟最近在学习LCD1602液晶,我现在想问一个问题就是"AC"是什么意思,我看了好多的资料,都还不能理解AC的意思。AC是用于DDRAM和CGRAM地址的地址计数器,那我想问了,如果我要想编写一个在1602的第一行循环显示“ZHU NI YI SHENG PING AN”现在这段字符已经超过了16个,也就是一行不能显示下来,要向左移动显示,知道将最后一个N移完,在进行下一次的移动显示,来回循环。我想要编写一个这样的汇编程序,那我是不是就可以改变AC的值能,让他每次显示一个字符后加一呢?可是实现吗?如果不可以那程序应该怎么编写呢?我只会汇编的。还有帮忙在解释一下AC的意思,我现在很乱。谢谢。

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

 

 

 

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-28
懂C,不是很了解汇编!