⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 1602lcdtestprocedure.asm

📁 1602LCD测试程序。 含参考文档。程序中对电路接口进行了说明
💻 ASM
字号:
 /*
 2008年12月20日
 1602LCD 测试程序
 参考:伟纳电子 1602LCD 技术文档

 接口说明:
 8051与1602接口可以采用总线模式。
 MCU 读/写信号通过与非门接 1602的使能信号端E; RS接P1.3;RW接P1.4。
 MCU P0接1602数据口,同时接上拉电阻。
 // 1602读操作逻辑:WR=1,E=1;写操作逻辑:WR=0,E为高脉冲(~下降沿~)

 子程序说明:
 BF 检测忙标志BF
 WI 写IR。入口参数:R1
 WD 写DR。入口参数:R2
 DELAY 延时65ms
 INI 指令初始化模块
 WDD 写显示字符的字符码到DDRAM
 START 显示主程序
 */
//-------------------------------------------------------------------------------



//-----------------------------------------------------------
//0 显示主程序
//-----------------------------------------------------------

RS EQU P1.3
RW EQU P1.4
ORG 0000H

/*
测试主程序1:显示一个字符'A'
测试对象:INI BF WI WD
START:
LCALL INI
LCALL BF
MOV R1, #80H  // 第一行首字字母
LCALL WI
LCALL BF
MOV R2,#41H	  // 字符'A'
LCALL WD
SJMP $
*/

// 测试主程序2:显示两行字符
// 测试对象:WDD
START:
LCALL INI
LCALL WDD
SJMP $


//-----------------------------------------------------------
//1 忙检测子程序
//-----------------------------------------------------------
/* 
为什么这个BF不行,它会使程序挂起~! 
BF:
 CLR A
 MOVX A, @R0 	  
 JB ACC.7, BF
 RET
*/

// SB,又怀疑是不是软件问题~! 打住!先看看1602使用说明...
// 1602读操作逻辑:RS=0,RW=1,E高电平
BF:
 clr rs
 setb rw   // 如果写成 CLR RW,也会挂起哦~
 CLR A
 MOVX A, @R0 	  
 JB ACC.7, BF
 RET

//不测试BusyFlag,这个程序实际上是个延时程序。
//BF:
//lcall delay   // 如果把这句注释起来,即BF直接返回,只能显示一行字符~~~
//RET



//-----------------------------------------------------------
 //2 写数据到指令寄存器IR
 //入口参数:R1 暂存指令码
//-----------------------------------------------------------
 WI:
 CLR RS
 CLR RW
 MOV A, R1
 MOVX @R0, A
 RET


//-----------------------------------------------------------
 //3 写数据到数据寄存器DR
 //入口参数:R2 暂存字符码或字符字模数据
//-----------------------------------------------------------
 WD:
 SETB RS
 CLR RW
 MOV A, R2
 MOVX @R0, A
 RET


//-----------------------------------------------------------
 //4 延时65ms
//-----------------------------------------------------------
 DELAY:
 MOV R7, #0FH
 LOOP0:MOV R6, #0FFH
 DJNZ R6, $
 DJNZ R7, LOOP0
 RET


//----------------------------------------------------------- 
 //5 指令初始化模块
 // 初始化对象和内容:
 //	 ______________RS_RW_D7_D6_D5_D4_D3_D2_D1_D0_________________
 //	|清屏         |0  0  0	0  0  0	 0  0  0  1
 //	|功能设置     |0  0  0	0  0  0	 1  DL N  F
 //	|显示开关控制 |0  0  0  0  1  D  C  B  *  *
 //	|输入方式     |0  0  0	0  0  0	 0  1 I/D S
 //	|_____________|____________________________
 // 我只知道初始化有以上4部分,内容可根据需要设定。
//-----------------------------------------------------------
 INI:
 MOV R3, #03h  // 不知道为什么要3次
 MOV R1, #38H  // FUNCTION SET
 LCALL WI
 MOV R1, #01H  // DISPLAY CLEAR
 LCALL BF
 LCALL WI
 MOV R1, #06H  // INPUT MODE SET
 LCALL BF
 LCALL WI
 MOV R1, #0CH  // DISPLAY ON/OFF SET
 LCALL BF
 LCALL WI

/* 上面的过程只进行一次也可以~
 MOV R1, #38H  // FUNCTION SET
 LCALL BF
 LCALL WI
 MOV R1, #01H  // DISPLAY CLEAR
 LCALL BF
 LCALL WI
 MOV R1, #06H  // INPUT MODE SET
 LCALL BF
 LCALL WI
 MOV R1, #0CH  // DISPLAY ON/OFF SET
 LCALL BF
 LCALL WI 
 */

 RET


//-----------------------------------------------------------
//6 写显示字符的字符码到DDRAM
// 伟纳电子 1602LCD 技术文档里的那个程序~不明白什么意思,我自己写了个WDD
//----------------------------------------------------------- 
WDD:
MOV DPTR, #0300h 
MOV R4, #16
MOV R1, #80H	// 第一行
LCALL BF
LCALL WI
LOOP1:CLR A
MOVC A, @A+DPTR
INC DPTR
MOV R2, A
LCALL BF
LCALL WD
DJNZ R4, LOOP1

MOV R4, #16
MOV R1, #0C0H	 // 第二行
LCALL BF
LCALL WI
LOOP2:CLR A
MOVC A, @A+DPTR
INC DPTR
MOV R2, A
LCALL BF
LCALL WD
DJNZ R4, LOOP2
RET

//-----------------------------------------------------------
 //9 显示字符的字符码表
//-----------------------------------------------------------
  ORG 0300H
  DB "0123456789ABCDEF"
  DB " PZ:HELLO,1602! "


END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -