RS EQU P3.7 ;RS <---->P3.7
RW EQU P3.6 ;R/W <--->P3.6
E EQU P3.5 ;E <----->P3.5
ORG 0000H
AJMP INT
;
;=======================模块初始化================================
INT: MOV P1,#01H ;清屏
ACALL ENABLE
MOV P1,#38H ;工作方式设置
ACALL ENABLE
MOV P1,#0EH ;显示状态设置
ACALL ENABLE
MOV P1,#06H ;输入方式设置
ACALL ENABLE
;
;=====以下是一个循环显示xuehao
;==================在第一行前8位显示字符==================
MAIN1: MOV P1,#80H ;1 0000000,设定DDRAM地址为00H
; 实际是设定从显示屏的第1位开始显示
ACALL ENABLE
MOV P1,#0FH ;这P1口仅作为辅助指示用
MOV DPTR,#TAB1
MOV R1,#00H
A1: MOV A,R1
MOVC A,@A+DPTR
MOV P1,A ;把取到的数据送给模块显示
ACALL WRITER
INC R1
ACALL DELAY1S
CJNE A,#00H,A1 ;遇00H结束
;
;==================在第一行后前8位显示字符===================
MAIN2: MOV P1,#0C0H ;1 1000000,设定DDRAM地址为40H
; 实际是设定从显示屏的第9位开始显示
ACALL ENABLE
MOV P1,#0F0H ;这P1口仅作为辅助指示用
MOV DPTR,#TAB2
MOV R1,#00H
A2: MOV A,R1
MOVC A,@A+DPTR
MOV P1,A ;把取到的数据送给模块显示
ACALL WRITER
INC R1
ACALL DELAY1S
CJNE A,#00H,A2 ;遇00H结束
ACALL DELAY1S
;
;==============重复显示=======================================
MOV P1,#01H ;清屏
ACALL ENABLE
AJMP MAIN1
;
;======================显示模块前后8位字符表===================
TAB1: DB "105263010440";xuehao
DB 00H
;
;======================显示模块后8位字符表======================
TAB2: DB "weiwei jinshuan" ;xingming
DB 00H
;
;
;
;
;===================模块的各个子程序============================
;
;
;========RS=0,RW=0,E=1,使模块工作并准备接收控制指令===========
ENABLE: CLR RS
CLR RW
CLR E
ACALL WAIT
SETB E
RET
;
;=======读BF的值,对模块进行任何操作前必须判断模块是否“忙”(BF=1)====
; 如果不“忙”(BF=0)才可以进行各种操作
WAIT: MOV P1,#0FFH
CLR RS
SETB RW
CLR E
NOP
SETB E
JB P1.7,WAIT
RET
;
;================RS=1,RW=0,E=1,写显示数据到模块指令============
WRITER: SETB RS
CLR RW
CLR E
ACALL WAIT
SETB E
RET
;
;==============延时=============================
DELAY1S:MOV R5,#04
DL4_PA: MOV R6,#100
DL4_PB: MOV R7,#100
DJNZ R7,$
DJNZ R6,DL4_PB
DJNZ R5,DL4_PA
RET
;===========================================
END
不一定要流程图的,具体的说一下执行过程就行了,谢谢各位大侠了。
因为我很久没有接触汇编了。不太熟悉了。
今天放假哈。。。
LZ是做课设?
那您先扛几天,学学,要是不会
到时候在和你说说。。。
把编译后的HEX或BIN文件载入IDA试试~~~~
大哥,你需要先学习一下LCD的工作流程,你可以下载一些LCD的模块的使用说明书,上面讲得非常清楚的,先设置哪一些位,再设置哪一些位。。。呵呵
先给LCD相关寄存器初始化,然后分别显示两组字符.要说明的是,ENABLE子函数是写寄存器指令的,WRITER子函数是写显示数据的,在LCD模块手册上可以找到说明,体现在RS端子的电平上,H写数据,L写指令.该模块采用6800总线,读写是通过RW与E的时序来实现的,RW为L,且E在上升沿时写入.在显示字符时先确定了起始位置,写字符数据采用的方法不用再说了吧