基于mcs51单片机与lcd液晶显示器的接口技术内容摘要:

S/C R/L 设定情况 0 0 光标左移 1格,且 AC 值减 1 0 1 光标右移 1格,且 AC 值加 1 1 0 显示器上字符全部左移一格,但光标不动 1 1 显示器上字符全部右移一格,但光标不动 表 功能:设定数据总线位数、显示的行数及字型。 参数设定的情况如下: 位名 设置 DL 0=数据总线为 4位 1=数据总线为 8 位 N 0=显示 1行 1=显示 2行 F 0=57 点阵 /每字符 1=510 点阵 /每字符 CGRAM 地址指令 学院 2020 届专科生毕业设计 第 12 页 表 功能:设定下一个要存入数据的 CGRAM 的地址。 DDRAM 地址指令 表 功能:设定下一个要存入数据的 CGRAM 的地址。 AC 地址指令 表 功能: 1 读取忙碌信号 BF 的内容, BF=1 表 示液晶显示器忙,暂时无法接收单片机送来的数据或指令。 当 BF=0 时,液晶显示器可以接收单片机送来的数据或指令。 2 读取地址计数器 (AC)的内容。 DDRAM 或 CGRAM 指令一览 表 学院 2020 届专科生毕业设计 第 13 页 功能: 1 将字符码写入 DDRAM,以使液晶显示屏显示出相对应的字符。 2 将使用者自己设计的图形存入 CGRAM。 CGRAM 或 DDRAM 读出数据的指令一览 表 功能:读取 DDRAM 或 CGRAM 中的内容。 基本操作时序: 读状态 输入: RS=L, RW=H, E=H 输出: DB0~ DB7=状态字 写指令 输入: RS=L, RW=L, E=下降沿脉冲, DB0~ DB7=指令码 输出:无 读数据 输入: RS=H, RW=H,E=H 输出: DB0~ DB7=数据 写数据 输入: RS=H, RW=L, E=下降沿脉冲, DB0~ DB7=数据 输出:无 LCD1602 的一般初始化(复位)过程 延时 15Ms 写指令 38H(不检测忙信号) 延时 5mS 写指令 38H(不检测忙信号) 延时 5mS 写指令 38H(不检测忙信号 ) 以后每次写指令、读 /写数据操作均需要检测忙信号 写指令 38H:显示模式设置 写指令 08H:显示关闭 写指令 01H:显示清屏 学院 2020 届专科生毕业设计 第 14 页 写指令 06H:显示光标移动设置 写指令 0CH:显示开及光标设置 学院 2020 届专科生毕业设计 第 15 页 3 电路软件模拟及仿真 Keil 及 Proteus 使用介绍 单片机编程及仿真软件有很多种,本课程设计主要使用的是 Keil 及 Proteus,下面对两种软件的使用大体介绍下。 [4] 为了能使 Keil 成功与 Proteus 连接,其关键就是在 Keil 中编写驱动程序并生成 .Hex 文件。 图 用红线圈住的部分为生成 .Hex 文件必做步骤,图 为软件中一些常用的项或注意点。 图 学院 2020 届专科生毕业设计 第 16 页 图 中 .Hex 文件的导入 [5] 在 Proteus 中连接好仿真电路图以后,就要开始向单片机中导入生成的 .Hex 文件。 双击单片机,会出现图 所示图形,点击 Program File 里面 用红线圈住的文件夹样式的按钮,然后从保存的文件夹中导入 .Hex 文件,再点击 OK 键,就可以进行模拟仿真了。 学院 2020 届专科生毕业设计 第 17 页 图 LCD1602 入门程序的实现 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。 要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符, 图 为 1602 显示要用到的地址。 图 例如第二行第一个字符的地址是 40H,那么是否直接写入 40H 就可以将光标定位在第二行第一个字符的位置呢。 这样不行,因为写入显示地址时要求最高位 D7 恒定为高电平 1 所 以 实 际 写 入 的 数 据 应 该 是 01000000B ( 40H ) 学院 2020 届专科生毕业设计 第 18 页 +10000000B(80H)=11000000B(C0H)。 为了 直观的说明这个问题,我用 LCD1602 入门的一个程序来显示一个字符。 还是以 A 字为例,实现在第二行第一个字符的位置显示一个 A 字。 我们已经知道 A字的代码是 41H,所以代码 41H 和 C0H 是本程序的关键。 详细程序如下: RS EQU。 确定具体硬件的连接方式 RW EQU。 确定具体硬件的连接方式 E EQU。 确定具体硬件的连接方式 MOV P1,00000001B ACALL ENABLE。 调用写入命令子程序 MOV P1,00111000B ACALL ENABLE。 调用写入 命令子程序 MOV P1,00001111B ACALL ENABLE。 调用写入命令子程序 MOV P1,00000110B ACALL ENABLE。 调用写入命令子程序 MOV P1,0C0H ACALL ENABLE。 调用写入命令子程序 MOV P1,01000001B SETB RS CLR RW。 准备写入数据 CLR E。 执行显示命令 ACALL DELAY。 判断液晶模块是否忙 ? SETB E。 显示完成 ,程序停车 AJMP $ ENABLE: CLR RS CLR RW CLR E ACALL DELAY SETB E RET DELAY: 学院 2020 届专科生毕业设计 第 19 页 MOV P1,0F0H CLR RS SETB RW CLR E NOP SETB E JB ,DELAY RET END 将本程序输入单片机后,仿真效果如图 : 图 字符型液晶显示模块与单片机的连接 单片机与液晶显示器的连接方法有两种。 一:直接访问方式;二:间接控制方式。 一:直接访问方式模拟接口电路见图 [2]: 学院 2020 届专科生毕业设计 第 20 页 图 直接访问方式的驱动子程序如下 : A15 = E的选通信号 A9 = R/W A8 = RS COM EQU 20H。 指令寄存器 DAT EQU 21H。 数据寄存器 CW_Add EQU 8000H。 指令口写地址 CR_Add EQU 8200H。 指令口读地址 DW_Add EQU 8100H。 数据口写地址 DR_Add EQU 8300H。 数据口读地址 读 BF和 AC值 PR0: PUSH DPH PUSH DPL PUSH ACC MOV DPTR,CR_Add。 设置指令口读 地址 MOVX A,@DPTR。 读 BF和 AC值 MOV COM,A。 存入 COM 单元 POP ACC POP DPL POP DPH RET 写指令代码子程序 PR1: PUSH DPH PUSH DPL 学院 2020 届专科生毕业设计 第 21 页 PUSH ACC MOV DPTR,CR_Add。 设置指令口读地址 PR11: MOVX A,@DPTR JB ,PR11。 判 BF=0? 是继续 MOV A,COM MOV DPTR,CW_Add。 设置指令口写地址 MOVX @DPTR,A。 写指令代码 POP ACC POP DPL POP DPH RET 写显示数据子程序 PR2: PUSH DPH PUSH DPL PUSH ACC MOV DPTR,CR_Add。 设置指令口读地址 PR21: MOVX A,@DPTR JB ,PR21。 判 BF=0? 是继续 MOV A,DAT MOV DPTR,DW_Add。 设置数据口写地址 MOVX @DPTR,A。 写数据 POP ACC POP DPL POP DPH RET 读显示数据子程序 PR3: PUSH DPH PUSH DPL PUSH ACC MOV DPTR,CR_Add。 设置指令口读地址 PR31: MOVX A,@DPTR JB ,PR31。 判 BF=0? 是继续 学院 2020 届专科生毕业设计 第 22 页 MOV DPTR,DR_Add。 设置数据口读地址 MOVX A,@DPTR。 读数据 MOV DAT,A。 存入 DAT 单元 POP ACC POP DPL POP DPH RET 二:间接控制方式 间接控制方式 (4位总线 )是利用 HD44780所具有的 4位数据总线的功能简化电路接口的一种接口方式实用电路如图 : 图 间接控制方式的驱动子程序如下 RS EQU。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。