验12864好坏的汇编程序
时间:10-02
整理:3721RD
点击:
;******************************************************************************
;-----------------------脚功能定义----------------------------
RS EQU P1.0
RW EQU P1.1
E EQU P1.2
PSB EQU P1.6 ;PSB脚为12864-12系列的串、并通讯功能切换,我们使用8位并行接口,PSB=1
;----------------------定义计数器
COUNT EQU 32H
COUNT1 EQU 33H
COUNT2 EQU 34H
COUNT3 EQU 35H
STORE EQU 39H
;-----------------------------------------------
ORG 0000H
LJMP csh
ORG 0100H
;----------------初始化--------------------------
csh:MOV SP,#5FH
LCALL DELAY4 ;延时40.301ms
NOP
SETB PSB ;通讯方式为8位数据并口
;----------------12864初始化---------------------
MOV A,#34H ;34H扩充指令操作
LCALL xzl ;调用写指令子程序
MOV A,#30H ;返回基本指令操作
LCALL xzl
MOV A,#01H ;清除显示
LCALL xzl
MOV A,#06H ;指定在资料写入或读取时,光标右移,DDRAM 的地址计数器(AC)加1
LCALL xzl
MOV A,#0CH ;开显示,关光标,不闪烁
LCALL xzl
zcx:acall gx12864
sjmp zcx
;================ 更新12864================
gx12864:MOV DPTR,#TAB1A ;'5 1 单片机实验板'的首地址
MOV COUNT,#10H ;地址计数器设为16,'5 1 单片机实验板'连空格共占有16个单元
MOV A,#80H ;确定第一行起始地址,显示第一行字符
LCALL xzl
LCALL cb ;查表子程序,表中共16个码(asc码和汉字编码,一个汉字两个编码) ,查一个,写入12864一个,直到查完
MOV DPTR,#TAB1B ;' www.lydz8.com '的首地址
MOV COUNT,#10H ;地址计数器设为16。
MOV A,#90H ;确定第二行起始地址,显示第二行字符
LCALL xzl
LCALL cb ;查表子程序
MOV DPTR,#TAB1c ;'吉林大学珠海学院 '的首地址
MOV COUNT,#10H ;地址计数器设为16。
MOV A,#88H ;确定第三行起始地址,显示第三行字符
LCALL xzl
LCALL cb ;查表子程序
MOV DPTR,#TAB1d ;'电子信息系制作 '的首地址
MOV COUNT,#10H ;地址计数器设为16。
MOV A,#98H ;确定第四行起始地址,显示第四行字符
LCALL xzl
LCALL cb ;查表子程序
ret
;==================闪烁子程序================
FLASH:MOV A,#08H ;关闭显示,关光标,关反白
LCALL xzl
LCALL DELAY5 ;延时256ms
MOV A,#0CH ;开显示,关光标,不闪烁
LCALL xzl
LCALL DELAY5
MOV A,#08H ;关闭显示,关光标,关反白
LCALL xzl
LCALL DELAY5
MOV A,#0CH ;开显示,关光标,不闪烁
LCALL xzl
LCALL DELAY5
MOV A,#08H ;关闭显示,关光标,关反白
LCALL xzl
LCALL DELAY5
RET
;===================清屏子程序===============
qp:MOV A,#01H ;清屏
LCALL xzl
MOV A,#34H ;8位数据扩充指令,绘图显示关
LCALL xzl
MOV A,#30H ;返回基本指令
LCALL xzl
RET
;==============查表取数据送显示==============
;dptr←表首地址,count←表中字符个数(ASC码)
cb:CLR A
MOVC A,@A+DPTR ;查表取数据
LCALL xsj ;写数据送显示
INC DPTR
LCALL DELAY4 ;写一个数据延时40ms
DJNZ COUNT,cb ;表中数据没有查完,继续
RET
;===================写数据子程序=============
;待写数据(A)
xsj:LCALL cm ;测忙子程序
SETB RS ;数据
CLR RW ;写
MOV P0,A ;待写数据(A)--P0(数据总线)
SETB E ;E的下降沿P0(数据总线)数据--12864DDRAM
NOP
NOP
CLR E
ret
;==================写指令子程序==============
;待写指令(A)
xzl:LCALL Cm ;测忙子程序
CLR RS ;rs=0,指令
CLR Rw ;rw=0,写
MOV P0,A ;待写指令(A)--P0(数据总线)
SETB E ;E的下降沿,P0(数据总线)指令--12864IR
NOP
NOP
CLR E
RET
;==================读数据子程序==============
;读出的数据存在STORE
dsj:LCALL Cm ;测忙子程序
SETB RS ;数据
SETB RW ;读
SETB E ;E=1时,12864数据--P0(数据总线)
NOP
MOV A,P0 ;读出的数据存在STORE
CLR E
MOV STORE,A
RET
;===============测忙碌子程序===================
;12864忙.再测,不忙,返回
Cm:MOV P0,#0FFH ;p0接受数据前先送1
CLR RS ;指令
SETB RW ;读
SETB E ;配合SETB RW 将db0--db7送数据总线p0
JB P0.7,cm ;忙.再测
CLR E ;不忙,返回
RET
;===================延时子程序 =================
DELAY1:
MOV R6,#06H
DEL11: MOV R7,#08H
DEL12: DJNZ R7,DEL12
DJNZ R6,DEL11
RET
DELAY2: ;
MOV R6,#0CH
DEL21: MOV R7,#18H
DEL22: DJNZ R7,DEL22
DJNZ R6,DEL21
RET
DELAY3: ;1秒
MOV R5,#16H
DEL31: MOV R6,#100
DEL32: MOV R7,#0FFH
DEL33: DJNZ R7,DEL33
DJNZ R6,DEL32
DJNZ R5,DEL31
RET
DELAY4: ;延时40.301ms
MOV R6,#100
DEL41: MOV R7,#200
DEL42: DJNZ R7,DEL42
DJNZ R6,DEL41
RET
DELAY5: ;延时256ms
MOV R5,#05H
DEL51: MOV R6,#100
DEL52: MOV R7,#0FFH
DEL53: DJNZ R7,DEL53
DJNZ R6,DEL52
DJNZ R5,DEL51
RET
;***************待显示字符表********************************
TAB1A: DB '5 1 单片机实验板' ;显示在第一行
TAB1B: DB ' www.lydz8.com ' ;显示在第二行
TAB1c: DB '吉林大学珠海学院 ' ;显示在第三行
TAB1d: DB '电子信息系制作 ' ;显示在第四行
end