|
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
不一定要流程图的,具体的说一下执行过程就行了,谢谢各位大侠了。
因为我很久没有接触汇编了。不太熟悉了。
|
|