- ;=================================================================
- ;程序编写人:兰建文
- ;编写地点:51hei培训机构
- ;时间:6月2日下午星期二
- ;功能:本程序实现液晶的信息功能
- ;=======================开始初始化================================
- EN BIT P2.5 ;时钟信号
- RS BIT P3.4 ;决定要传送的是命令还是数据
- RW BIT P3.5 ;决定要读还是写,一般写的时候多
- SJ EQU P0 ;数据线
- SHUZI EQU 30H
- ;========================系统程序==================================
- ORG 0000H
- JMP START
- ORG 30H
- START:MOV R0,#32
- CALL CHUSHIHUA ;LCD初始化
- MAIN:
- CALL XIANSHI ;显示
- JMP MAIN
- ;======================初始化子程序===============================
- ;输入:无
- ;输出:无
- ;实现的功能:初始化LCD
- ;=================================================================
- CHUSHIHUA:MOV SJ,#38H
- ACALL ENABLE ;写指令08H,设定LCD为16*2显示,5*6点阵,8位数据接口
- MOV SJ,#08H
- ACALL ENABLE ;写指令08H
- MOV SJ,#01H
- ACALL ENABLE ;写指令01H,显示清屏
- MOV SJ,#06H
- ACALL ENABLE ;写指令06H,显示光标自动右移,整屏不移动
- MOV SJ,#0CH
- ACALL ENABLE ;写指令0CH,开显示,不显示光标
- RET
- ;========================显示子程序===============================
- ;输入:
- ;输出:"P0口"
- ;实现的功能:把数输出到P0口显示
- ;=================================================================
- XIANSHI:
- MOV SJ,#18H
- CALL ENABLE
- MOV SJ,#80H ;第一行显示第一个字符的位置
- CALL ENABLE ;调用写指令
- MOV DPTR,#TAB0;第一行表头位置
- CALL WRITE1 ;调用第一行写子程序
- CALL DELAY1
- MOV SJ,#0C0H ;第二行位置
- CALL ENABLE ;调用写指令
- MOV DPTR,#TAB1;第二行表头位置
- CALL WRITE1 ;调用第二行写子程序
- CALL DELAY1
- DJNZ R0,L
- MOV R0,#32
- MOV R1,#10
- LL:CALL DELAY
- DJNZ R1,LL
- L:RET
- ;======================写命令时序程序=============================
- ;输入:
- ;输出:"P0口"
- ;实现的功能:写时序
- ;=================================================================
- ENABLE:CLR RS
- CLR RW
- SETB EN
- CALL DELAY
- CLR EN
- RET
- ;==========================写入子程序=============================
- ;输入:
- ;输出:"P0口"
- ;实现的功能:写时序
- ;=================================================================
- WRITE1:MOV SHUZI,#00H ;将30H清0
- L1:MOV A,SHUZI ;把30H的值送到ACC
- MOVC A,@A+DPTR ;查表取将显示的数据并把要显示的数送入ACC
- CALL WRITE2 ;调用写程序写入单个字节
- INC SHUZI ;将工作寄存器指针加一
- MOV A,SHUZI ;把30H的内容送到ACC
- CJNE A,#10H,L1 ;ACC的值加到16后就返回到L1处
- RET
- ;=======================写数据时序子程序==========================
- ;输入:
- ;输出:
- ;实现的功能:写数据
- ;=================================================================
- WRITE2:MOV SJ,A ;写单个字符
- SETB RS ;写数据到显示端口
- CLR RW ;写数据时序
- SETB EN
- CALL DELAY
- CLR EN
- RET
- ;============================延时子程序============================
- ;输入;无
- ;输出: 无
- ;实现的功能:延时5MS
- ;==================================================================
- DELAY:
- MOV R6,#4
- L7:MOV R5,#100
- DJNZ R5,$
- DJNZ R6,L7
- RET
- DELAY1:MOV R7,#10
- L9:MOV R3,#25
- L8:MOV R4,#100
- DJNZ R4,$
- DJNZ R3,L8
- DJNZ R7,L9
- RET
- ;==============================表的制作============================
- TAB0:DB "WWW#SsONEEDU#COMWWW#STsNEEDU#COM"
- TAB1:DB "MCU-20-L-JIANWENMCU-20-L-JIANWEN"
- ;=========================程序结束=================================
- END
复制代码
|