2037.基于MCS51单片机与LCD液晶显示器的接口技术.doc_第1页
2037.基于MCS51单片机与LCD液晶显示器的接口技术.doc_第2页
2037.基于MCS51单片机与LCD液晶显示器的接口技术.doc_第3页
2037.基于MCS51单片机与LCD液晶显示器的接口技术.doc_第4页
2037.基于MCS51单片机与LCD液晶显示器的接口技术.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

专科毕业设计(论文) 设计题目: 基于基于 mcs51 单单片机与片机与 lcd 液晶液晶显显示器的接口示器的接口 技技术术 系 部: 信息工程系信息工程系 专 业: 电电子信息工程子信息工程 班 级: 电电子信息子信息 姓 名: 学 号: : 指导教师: 职 称 讲师讲师 2009 年 6 月 南京 摘 要 lcd 液晶显示已经是人机界面的关键技术。本文对基于单片机的 lcd 液晶显示器控制 技术进行了研究。 本文阐明用单片机(stc89c52)控制 lcd1602 显示屏的方法。首先本文研究了 lcd1602 液晶屏(hd44780)的点阵显示原理及字库代码获取方法,随后通过在 proteus 仿真软件上构建相关的仿真电路,并连接在 keil 软件上编写、编辑及编译生成的相关的. hex 驱动程序进行电路仿真,成功仿真出对所需内容的循环显示。编程语言主要使用的是 汇编。在成功模拟仿真后本文进一步进行了在单片机开发板上的程序烧录。本文所描述 的设计产品实际制作是基于原理图生成的 pcb 板,最后通过购买元件、元件测试、电路 焊接、产品调试完成了本次设计的全部过程。 关键词 :lcd,单片机,显示屏,驱动,扫描,仿真,设计 abstractabstract lcd liquid crystal display is the key to man-machine interface technology. in this paper, based on single-chip lcd liquid crystal display control technology is studied. this article set out to use single-chip microcomputer (stc89c52) control method lcd1602 display. first of all, this paper lcd1602 lcd (hd44780) and the principle of the dot matrix display font access method code, followed by proteus simulation software circuit simulation to build relevant and connected to the keil software to prepare, edit and compile the relevant generating . hex driver circuit simulation, the success of the simulation cycle required to display the content. the main programming language used was compiled. after the success of simulation in this paper for further development in the single-chip on-board procedures for burning. this paper describes the design of the actual production of products is based on the schematic diagram of the pcb board to generate, and finally through the purchase of components, component testing, circuit welding, product testing was completed the design of the whole process. keywordskeywords: lcd,singlechip,display,drive,scan,simulation,design 目目 录录 摘摘 要要 iiii 1 1 绪论绪论 1 1 1.1 液晶显示器在单片机系统中的应用 .1 1.2 液晶显示器的优点 .1 2 2 lcd1602lcd1602 液晶显示器的显示原理液晶显示器的显示原理3 3 2.1 液晶显示原理简介 .3 2.2 1602 字符型 lcd 简介 4 2.3 lcd1602 的基本参数及引脚功能 .4 2.4 lcd1602 的 ram 地址映射及标准字库表 .6 2.5 lcd1602 的一般初始化(复位)过程 13 3 3 电路软件模拟及仿真电路软件模拟及仿真 1414 3.1 keil及 proteus使用介绍 .14 3.2 lcd1602 入门程序的实现 16 3.3 字符型液晶显示模块与单片机的连接18 3.4 字符型液晶显示模块应用 23 3.5 液晶模块显示的拓展提高26 4 4 硬件电路原理图及程序的烧写硬件电路原理图及程序的烧写 2929 4.1 硬件电路原理图及硬件图29 4.2 程序的烧写方法及演示30 结结 论论 3232 致致 谢谢 3333 参参 考考 文文 献献 3434 学院 2009 届专科生毕业设计 第 1 页 1 1 绪论绪论 当今是一个信息化的时代,信息的重要性是不言而喻的,获取手段显得尤其重 要。人们所接受的信息有 70%来自于人的视觉,无论用何种方式获取的信息最终需要 有某种显示方式来表示。在当代显示技术中,主流的有 led 显示屏及 lcd 液晶显示, 而在这些显示技术中,尤其以液晶显示器 lcd(liquid crystal display)为代表的平 板显示器发展最快、应用最广。lcd 是典型的光电器件,它以材料科学为基础,综合 利用了精密机械、光电及计算机技术,并正在微机械、微光学、纤维光学等前沿领 域研究基础上,向高集成化、智能化方向发展。 1.11.1 液晶显示器在单片机系统中的应用液晶显示器在单片机系统中的应用 在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产 品的通用器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到, 显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方 式有以下几种:发光管、led 数码管、液晶显示器。发光管和 led 数码管比较常用, 软硬件都比较简单,在小型智能化电子产品中,普通的 7 段 led 数码管只能显示数 字,若要显示英文字母或图像汉字,则必须使用液晶显示器,所以本课题重点研究 液晶显示器。 1.21.2 液晶显示器的优点液晶显示器的优点 在单片机系统中应用晶液显示器作为输出器件有以下几个优点: 1.1.1 显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光, 而不像阴极射线管显示器(crt)那样需要不断刷新新亮点。因此,液晶显示器画质 高且不会闪烁。 1.1.2 数字式接口 液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方。 1.1.3 体积小、重量轻 学院 2009 届专科生毕业设计 第 2 页 液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量 上比相同显示面积的传统显示器要轻得多。 1.1.4 功耗低 相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动 ic 上,因而耗电 量比其它显示器要少得多。 学院 2009 届专科生毕业设计 第 3 页 2 2 lcd1602lcd1602 液晶显示器的显示原理液晶显示器的显示原理 2.12.1 液晶显示原理简介液晶显示原理简介 2.1.1 液晶显示原理 液晶显示的原理是利用液晶的物理特性, 通过电压对其显示区域进行控制,有 电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成 电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、 数字摄像机、pda 移动通信工具等众多领域。 2.1.2 液晶显示器的分类 液晶显示的分类方法有很多种,通常可按其显示方式分为段式 lcd、字符式 lcd、点阵式 lcd 等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果 根据驱动方式来分,可以分为静态驱动(static)、单纯矩阵驱动(simple matrix)和主动矩阵驱动(active matrix)三种。 2.1.3 液晶显示器各种图形的显示原理: 线段的显示 点阵图形式液晶由 mn 个显示单元组成,假设 lcd 显示屏有 64 行,每行有 128 列,每 8 列对应 1 字节的 8 位,即每行由 16 字节,共 168=128 个点组成,屏上 6416 个显示单元与显示 ram 区 1024 字节相对应,每一字节的内容和显示屏上相应 位置的亮暗对应。例如屏的第一行的亮暗由 ram 区的 000h00fh 的 16 字节的内 容决定,当(000h)=ffh 时,则屏幕的左上角显示一条短亮线,长度为 8 个点;当 (3ffh)=ffh 时,则屏幕的右下角显示一条短亮线;当(000h)=ffh,(001h) =00h,(002h)=00h,(00eh)=00h,(00fh)=00h 时,则在屏幕的顶部显示 一条由 8 段亮线和 8 条暗线组成的虚线。这就是 lcd 显示的基本原理。 字符的显示 用 lcd 显示一个字符时比较复杂,因为一个字符由 68 或 88 点阵组成,既 要找到和显示屏幕上某几个位置对应的显示 ram 区的 8 字节,还要使每字节的不同 位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某 个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控 制器工作在文本方式,根据在 lcd 上开始显示的行列号及每行的列数找出显示 ram 对应的地址,设立光标,在此送上该字符对应的代码即可。 学院 2009 届专科生毕业设计 第 4 页 汉字的显示 汉字的显示一般采用图形的方式,事先从微机中提取要显示的汉字的点阵码 (一般用字模提取软件),每个汉字占 32b,分左右两半,各占 16b,左边为 1、3、5右边为 2、4、6根据在 lcd 上开始显示的行列号及每行的列数可找 出显示 ram 对应的地址,设立光标,送上要显示的汉字的第一字节,光标位置加 1, 送第二个字节,换行按列对齐,送第三个字节直到 32b 显示完就可以 lcd 上得 到一个完整汉字。 2.22.2 16021602 字符型字符型 lcdlcd 简介简介 字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式 lcd,目前 常用 16*1,16*2,20*2 和 40*2 行等的模块。下面以长沙太阳人电子有限公司的 1602 字符型液晶显示器为例,介绍其用法。一般 1602 字符型液晶显示器实物如图 2.2.1: 图 2.2.1 学院 2009 届专科生毕业设计 第 5 页 2.32.3 lcd16021602 的基本参数及引脚功能的基本参数及引脚功能 市面上 1602 字符液晶显示屏绝大多数是基于 hd44780 液晶芯片的,控制原理是 完全相同的,因此 hd44780 写的控制程序可以很方便地应用于市面上大部分的字符 型液晶。字符型 lcd 通常有 14 条引脚线或 16 条引脚线的 lcd,多出来的 2 条线是背 光电源线 vcc(15 脚)和地线 gnd(16 脚),其控制原理与 14 脚的 lcd 完全一样,外形 尺寸和引脚接口信号说明分别如图 2.3.1 和表 2.3.1 所示1 1: 图 2.3.1 表 2.3.1 1602lcd 主要技术参数: 学院 2009 届专科生毕业设计 第 6 页 表 2.3.2 引脚接口说明: 第 1 脚:vss 为地电源。 第 2 脚:vdd 接 5v 正电源。 第 3 脚:vl 为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比 度最高,对比度过高时会产生“鬼影”,使用时可以通过一个 10k 的电位器调整对 比度。 第 4 脚:rs 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 第 5 脚:r/w 为读写信号线,高电平时进行读操作,低电平时进行写操作。当 rs 和 r/w 共同为低电平时可以写入指令或者显示地址,当 rs 为低电平 r/w 为高电平 时可以读忙信号,当 rs 为高电平 r/w 为低电平时可以写入数据。 第 6 脚:e 端为使能端,当 e 端由高电平跳变成低电平时,液晶模块执行命令。 第 714 脚:d0d7 为 8 位双向数据线。 第 15 脚:背光源正极。 第 16 脚:背光源负极。 2.42.4 lcd16021602 的的 ramram 地址映射及标准字库表地址映射及标准字库表 hd44780 内置了 ddram、cgrom 和 cgram。 ddram 就是显示数据 ram,用来寄存待显示的字符代码。共 80 个字节,其地址 和屏幕的对应关系如表 2.4.1: 表 2.4.1 学院 2009 届专科生毕业设计 第 7 页 也就是说想要在 lcd1602 屏幕的第一行第一列显示一个“a“字,就要向 ddram 的 00h 地址写入“a”字的代码就行了。但具体的写入是要按 lcd 模块的指令格式来进 行的,后面将会提到。我们很容易发现每一行有 40 个地址,在 1602 中我们就用前 16 个就行了。第二行也一样用前 16 个地址。对应如表 2.4.2: ddram 地址与显示位置的对应关系 表 2.4.2 我们知道文本文件中每一个字符都是用一个字节的代码记录的。一个汉字是用 两个字节的代码记录。在 pc 上我们只要打开文本文件就能在屏幕上看到对应的字符 是因为在操作系统里和 bios 里都固化有字符字模。什么是字模?就代表了是在点阵 屏幕上点亮和熄灭的信息数据。例如“a”字的字模: 01110 10001 10001 10001 11111 10001 10001 上图左边的数据就是字模数据,右边就是将左边数据用“”代表 0,用“” 代表 1。看出是个“a”字了吗?在文本文件中“a”字的代码是 41h,pc 收到 41h 的 代码后就去字模文件中将代表 a 字的这一组数据送到显卡去点亮屏幕上相应的点, 你就看到“a”这个字了。 刚才我说了想要在 lcd1602 屏幕的第一行第一列显示一个“a“字,就要向 ddram 的 00h 地址写入“a”字的代码 41h 就行了,可 41h 这一个字节的代码如何才能让 lcd 模块在屏幕的阵点上显示“a”字呢?同样,在 lcd 模块上也固化了字模存储器, 这就是 cgrom 和 cgram。hd44780 内置了 192 个常用字符的字模,存于字符产生器 cgrom(character generator rom)中,另外还有 8 个允许用户自定义的字符产生 学院 2009 届专科生毕业设计 第 8 页 ram,称为 cgram(character generator ram)。图 2.4.1 说明了 cgrom 和 cgram 与字 符的对应关系。 图 2.4.12 2 从上图可以看出,“a”字的对应上面高位代码为 0100,对应左边低位代码为 0001,合起来就是 01000001,也就是 41h。可见它的代码与我们 pc 中的字符代码是 基本一致的。字符代码 0x000x0f 为用户自定义的字符图形 ram(对于 5x8 点阵的字 符,可以存放 8 组,5x10 点阵的字符,存放 4 组),就是 cgram 了。 学院 2009 届专科生毕业设计 第 9 页 0x200x7f 为标准的 ascii 码,0xa00xff 为日文字符和希腊文字符,其余字 符码(0x100x1f 及 0x800x9f)没有定义。 如果要对 ddram 的内容和地址进行具体操作,首先就要了解 hd44780 的指令集 及其设置说明。该指令集及其对 ddram 的内容和地址进行操作的指令如下。 共 11 条指令2 2: 1.清屏指令 表 2.4.3 功能: 清除液晶显示器,即将 ddram 的内容全部填入“空白“的 ascii 码 20h; 光标归位,即将光标撤回液晶显示屏的左上方; 将地址计数器(ac)的值设为 0。 2.光标归位指令 表 2.4.4 功能: 把光标撤回到显示器的左上方; 把地址计数器(ac)的值设置为 0; 保持 ddram 的内容不变。 3.进入模式设置指令 表 2.4.5 学院 2009 届专科生毕业设计 第 10 页 功能:设定每次定入 1 位数据后光标的移位方向,并且设定每次写入的一个字 符是否移动。参数设定的情况如下所示: 位名 设置 i/d 0=写入新数据后光标左移 1=写入新数据后光标右移 s 0=写入新数据后显示屏不移动 1=写入新数据后显示屏整体右移 1 个字符 4.显示开关控制指令 表 2.4.6 功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。 位名 设置 d 0=显示功能关 1=显示功能开 c 0=无光标 1=有光标 b 0=光标闪烁 1=光标不闪烁 5.设定显示屏或光标移动方向指令 表 2.4.7 功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下: s/c r/l 设定情况 0 0 光标左移 1 格,且 ac 值减 1 0 1 光标右移 1 格,且 ac 值加 1 1 0 显示器上字符全部左移一格,但光标不 动 学院 2009 届专科生毕业设计 第 11 页 1 1 显示器上字符全部右移一格,但光标不 动 6.功能设定指令 表 2.4.8 功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下: 位名 设置 dl 0=数据总线为 4 位 1=数据总线为 8 位 n 0=显示 1 行 1=显示 2 行 f 0=57 点阵/每字符 1=510 点阵/每字符 7.设定 cgram 地址指令 表 2.4.9 功能:设定下一个要存入数据的 cgram 的地址。 8.设定 ddram 地址指令 表 2.4.10 功能:设定下一个要存入数据的 cgram 的地址。 9.读取忙信号或 ac 地址指令 学院 2009 届专科生毕业设计 第 12 页 表 2.4.11 功能: 读取忙碌信号 bf 的内容,bf=1 表示液晶显示器忙,暂时无法接收单片机 送来的数据或指令;当 bf=0 时,液晶显示器可以接收单片机送来的数据或指令; 读取地址计数器(ac)的内容。 10.数据写入 ddram 或 cgram 指令一览 表 2.4.12 功能: 将字符码写入 ddram,以使液晶显示屏显示出相对应的字符; 将使用者自己设计的图形存入 cgram。 11.从 cgram 或 ddram 读出数据的指令一览 表 2.4.13 功能:读取 ddram 或 cgram 中的内容。 基本操作时序: 读状态 输入:rs=l,rw=h,e=h 输出:db0db7=状态字 写指令 输入:rs=l,rw=l,e=下降沿脉冲,db0db7=指令码 输出: 学院 2009 届专科生毕业设计 第 13 页 无 读数据 输入:rs=h,rw=h,e=h 输出:db0db7=数据 写数据 输入:rs=h,rw=l,e=下降沿脉冲,db0db7=数据 输出: 无 2.52.5 lcd16021602 的一般初始化(复位)过程的一般初始化(复位)过程 延时 15ms 写指令 38h(不检测忙信号) 延时 5ms 写指令 38h(不检测忙信号) 延时 5ms 写指令 38h(不检测忙信号) 以后每次写指令、读/写数据操作均需要检测忙信号 写指令 38h:显示模式设置 写指令 08h:显示关闭 写指令 01h:显示清屏 写指令 06h:显示光标移动设置 写指令 0ch:显示开及光标设置 学院 2009 届专科生毕业设计 第 14 页 3 3 电路软件模拟及仿真电路软件模拟及仿真 3.13.1 keilkeil 及及 proteusproteus 使用介绍使用介绍 单片机编程及仿真软件有很多种,本课程设计主要使用的是 keil 及 proteus, 下面对两种软件的使用大体介绍下。 3.1.1keilkeil 中驱动程序的实现4 4 为了能使 keil 成功与 proteus 连接,其关键就是在 keil 中编写驱动程序并生 成.hex 文件。图 3.1.1 用红线圈住的部分为生成.hex 文件必做步骤,图 3.1.2 为软 件中一些常用的项或注意点。 图 3.1.1 学院 2009 届专科生毕业设计 第 15 页 图 3.1.2 3.1.2proteusproteus 中.hex.hex 文件的导入5 5 在 proteus 中连接好仿真电路图以后,就要开始向单片机中导入生成的.hex 文 件。双击单片机,会出现图 3.1.3 所示图形,点击 program file 里面用红线圈住的 文件夹样式的按钮,然后从保存的文件夹中导入.hex 文件,再点击 ok 键,就可以进 行模拟仿真了。 学院 2009 届专科生毕业设计 第 16 页 图 3.1.3 3.23.2 lcd1602lcd1602 入门程序的实现入门程序的实现 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的 忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地 址,也就是告诉模块在哪里显示字符,图 3.2.1 为 1602 显示要用到的地址。 图 3.2.1 例如第二行第一个字符的地址是 40h,那么是否直接写入 40h 就可以将光标定位 在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位 d7 恒定 为高电平 1 所以实际写入的数据应该是 01000000b(40h)+10000000b(80h) 学院 2009 届专科生毕业设计 第 17 页 =11000000b(c0h)。 为了直观的说明这个问题,我用 lcd1602 入门的一个程序来显示一个字符。还 是以 a 字为例,实现在第二行第一个字符的位置显示一个 a 字。我们已经知道 a 字 的代码是 41h,所以代码 41h 和 c0h 是本程序的关键。详细程序如下: rs equ p3.7;确定具体硬件的连接方式 rw equ p3.6 ;确定具体硬件的连接方式 e equ p3.5 ;确定具体硬件的连接方式 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: 学院 2009 届专科生毕业设计 第 18 页 mov p1,#0f0h clr rs setb rw clr e nop setb e jb p1.7,delay ret end 将本程序输入单片机后,仿真效果如图 3.2.1: 图 3.2.1 3.33.3 字符型液晶显示模块与单片机的连接 单片机与液晶显示器的连接方法有两种。一:直接访问方式;二:间接控制方 式。一:直接访问方式模拟接口电路见图 3.3.12 2: 学院 2009 届专科生毕业设计 第 19 页 图 3.3.1 直接访问方式的驱动子程序如下: 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 ; 数据口读地址 1、读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 2、写指令代码子程序 pr1: push dph push dpl 学院 2009 届专科生毕业设计 第 20 页 push acc mov dptr,#cr_add ; 设置指令口读地址 pr11: movx a,dptr jb acc.7,pr11 ; 判bf=0? 是继续 mov a,com mov dptr,#cw_add ; 设置指令口写地址 movx dptr,a ; 写指令代码 pop acc pop dpl pop dph ret 3、写显示数据子程序 pr2: push dph push dpl push acc mov dptr,#cr_add ; 设置指令口读地址 pr21: movx a,dptr jb acc.7,pr21 ; 判bf=0? 是继续 mov a,dat mov dptr,#dw_add ; 设置数据口写地址 movx dptr,a ; 写数据 pop acc pop dpl pop dph ret 4、读显示数据子程序 pr3: push dph push dpl push acc mov dptr,#cr_add ; 设置指令口读地址 pr31: movx a,dptr jb acc.7,pr31 ; 判bf=0? 是继续 学院 2009 届专科生毕业设计 第 21 页 mov dptr,#dr_add ; 设置数据口读地址 movx a,dptr ; 读数据 mov dat,a ; 存入dat 单元 pop acc pop dpl pop dph ret 二:间接控制方式 间接控制方式(4位总线)是利用hd44780所具有的4位数据总线的功能简化电路接 口的一种接口方式实用电路如图3.3.2: 图 3.3.2 间接控制方式的驱动子程序如下 rs equ p3.3 ; 寄存器选择信号 r/w equ p3.4 ; 读/写选择信号 e equ p3.5 ; 使能信号 1、读bf和ac值 pr0: push acc mov p1,#0ffh ; p1置位, 准备读 clr rs ; rs=0 setb r/w ; r/w=1 setb e ; e=1 mov com,p1 ; 读bf和ac6-4值 clr e ; e=0 mov p1,#0ffh ; p1置位, 准备读 setb e ; e=1 mov a,p1 ; 读ac3-0值 clr e ; e=0 swap a ; 转换成 8位数据 anl a,#0fh anl com,#0f0h 学院 2009 届专科生毕业设计 第 22 页 orl a,com mov com,a ; 送入com 单元 pop acc ret 2、写指令代码子程序 pr1: push acc clr rs ; rs=0 setb r/w ; r/w=1 pr11: mov p1,#0ffh ; p1置位, 准备 读 setb e ; e=1 mov a,p1 ; 读bf和ac6-4值 clr e ; e=0 mov c,acc.7 ; bf?进位位c setb e ; e=1 clr e ; e=0 (读ac3-0值) jc pr11 ; 判别bf=1? 是转 clr r/w ; r/w=0 mov p1,com ; 写入指令代码高 4位 setb e ; e=1 clr e ; e=0 mov a,com ; 写入指令代码低 4位 swap a mov p1,a setb e ; e=1 clr e ; e=0 pop acc ret 3、写显示数据子程序 pr2: push acc clr rs ; rs=0 setb r/w ; r/w=1 pr21: mov p1,#0ffh ; p1置位, 准备 读 setb e ; e=1 mov a,p1 ; 读bf和ac6-4值 clr e ; e=0 mov c,acc.7 ; bf?进位位c setb e ; e=1 clr e ; e=0 (读ac3-0值) jc pr21 ; 判别bf=1? 是转 setb rs ; rs=1 clr r/w ; r/w=0 mov p1,dat ; 写入数据高 4位 setb e ; e=1 clr e ; e=0 mov a,dat ; 写入数据低 4位 swap a mov p1,a setb e ; e=1 clr e ; e=0 pop acc ret 4、读显示数据子程序 pr3: push acc clr rs ; rs=0 setb r/w ; r/w=1 pr31: mov p1,#0ffh ; p1置位, 准备 读 setb e ; e=1 mov a,p1 ; 读bf和ac6-4值 clr e ; e=0 mov c,acc.7 ; bf?进位位c setb e ; e=1 学院 2009 届专科生毕业设计 第 23 页 clr e ; e=0 (读ac3-0值) jc pr31 ; 判别bf=1? 是转 setb rs ; rs=1 setb r/w ; r/w=1 mov p1,#0ffh ; p1置位, 准备读 setb e ; e=1 mov com,p1 ; 读数据高 4位 clr e ; e=0 mov p1,#0ffh ; p1置位, 准备读 setb e ; e=1 mov a,p1 ; 读数据低 4位 clr e ; e=0 swap a ; 转换成 8位 anl a,#0fh anl dat,#0f0h orl a,dat mov dat,a ; 数据送入dat 单元 pop acc ret 3.4 字符型液晶显示模块应用字符型液晶显示模块应用 在本章前两节,已详细介绍了液晶显示模块与单片机的连接方法及入门程序的 实现,本节进一步深入研究,要求液晶模块在直接访问模式下实现光标左移,使其 两行显示一句话,显示内容为“i love my school jmi is my home!”。 相关内容如下: 这个程序用于实现 lcd1602 的光标右移 显示功能。直接访问方式的驱动子程序 如下: ;a15=e 的选通信号,a9=r/w,a8=rs com equ 30h ;指令寄存器 dat equ 31h ;数据寄存器 cw_add equ 8000h ;指令口写地址 rs,r/w 为 00 cr_add equ 8200h ;指令口读地址 rs,r/w 为 01 dw_add equ 8100h ;数据口写地址 rs,r/w 为 10 dr_add equ 8300h ;数据口读地址 rs,r/w 为 11 main: mov sp,#60h mov p3,#0c7h acall init cycle:acall write acall delay mov com,#01h acall pr1 sjmp cycle;写指令代码子程序 pr1: push dph push dpl push acc mov dptr,#cr_add ;设置指令口读地 址 pr11: movx a,dptr jb acc.7,pr11 ;判 bf=0?是继续 mov a,com mov dptr,#cw_add ;设置指令口写地 址 学院 2009 届专科生毕业设计 第 24 页 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 acc.7,pr21 ;判 bf=0?是继续 mov a,dat ;不忙时写入数据 mov dptr,#dw_add ;置数据口写地址 movx dptr,a ;写数据 pop acc pop dpl pop dph ret ;直接访问方式下的初始化子程序 init: mov a,#38h ;功能设置,单行显 示,8 位数据口,30h 为单行显示 mov dptr,#cw_add ;写指令口地址 设置 mov r2,#03h ;循环量=3 此循 环必要,不可删除 intk: movx dptr,a ;写指令代码 lcall delay ;调延时子程序 djnz r2,intk ;为什么要写这么多次? ? mov com,#01h ;清屏 lcall pr1 ;写入指令 mov com,#06h ;设置输入方式,ac 自动 增 1,画面不动 lcall pr1 ;写入指令 mov com,#0eh ;设置显示方式,光标开, 闪烁关 lcall pr1 ;写入指令 ;mov com,#18h ;设置光标,画面位移 ;lcall pr1 ret ;逐字依次输入方式演示程序段 write:mov com,#80h ;设置 ddram 第一 行显示地址 lcall pr1 ;写入指令 mov dptr,#tab0 ;设置数据首地址 mov r2,#0 wrin0:mov a,r2 movc a,a+dptr ;取待写数据 mov dat,a ;把取到的数据存入数据寄 存器 lcall pr2 ;调用写数据子程序 lcall delay ;延时 inc r2 cjne r2,#16,wrin0 ;25 字符显示完? mov com,#0c0h acall pr1 wrin1:mov a,r2 movc a,a+dptr ;取待写数据 mov dat,a ;把取到的数据存入数据寄 存器lcall pr2 ;调用写数据子程序 学院 2009 届专科生毕业设计 第 25 页 lcall delay ;延时 inc r2 cjne r2,#32,wrin1 ;25 符显示完? ret delay:mov r7,#200 d02: mov r6,#200 d01: nop nop nop djnz r6,d01 djnz r7,d02 ret 学院 2009 届专科生毕业设计第 26 页 tab0:db i,20h,l,o,v,e,20h,m,y,20h,s,c,h,o,o,l db 20h,j,m,i,20h,i,s,20h,m,y,20h,h,o,m,e,! ;i love my school jmi is my home! end 其仿真效果图如图 3.4.1 所示: 图 3.4.1 3.53.5 液晶模块显示的拓展提高液晶模块显示的拓展提高 平时我们利用液晶显示模块显示的字符都是芯片内部自带的,而 hd44780 芯片允许 我们自定义一部分字符。所以本节主要对液晶显示器的接口技术稍微拓展提高,使其能 够显示带有自定义字符的本次论文答辩时间“2009 年 6 月 9 日”等字符。 首先举例说明自定义字符实现的方法。以“月”字为例: 01111 01001 01111 01001 01111 01001 10001 00000 根据上图容易看出“月”字代码为:0fh,09h,0fh,09h,0fh,09h,11h,00h。其他字符 如“年” 、 “日”代码可根据此方法类推。 再次回到本次拓展提高所要的程序代码部分。这个程序用于实现 lcd1602 的光标右 移显示功能。可以循环显示。 直接访问方式的驱动子程序如下: ;a15=e 的选通信号,a9=r/w,a8=rscom equ 30h ;指令寄存器 学院 2009 届专科生毕业设计第 27 页 dat equ 31h ;数据寄存器 cw_add equ 8000h ;指令口写地址 rs,r/w 为 00 cr_add equ 8200h ;指令口读地址 rs,r/w 为 01 dw_add equ 8100h ;数据口写地址 rs,r/w 为 10 dr_add equ 8300h ;数据口读地址 rs,r/w 为 11 main: mov sp,#60h mov p3,#0c7h acall init acall cg_write cycle:acall cgdisp acall delay mov com,#01h acall pr1 sjmp cycle ;写指令代码子程序 pr1: push dph push dpl push acc mov dptr,#cr_add ;设置指令口读地 址 pr11: movx a,dptr jb acc.7,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 acc.7,pr21 ;判 bf=0?是继续 mov a,dat ;不忙时写入数据 mov dptr,#dw_add ;置数据口写地址 movx dptr,a ;写数据 pop acc pop dpl pop dphret ;直接访问方式下的初始化子程序 init: mov a,#30h ;功能设置,单 行显示,8 位数据口,30h 为单行显示 mov dptr,#cw_add ;写指令口地址设 置 mov r2,#03h ;循环量=3 此循 环必要,不可删除 intk: movx dptr,a ;写指令代 码 lcall delay ;调延时子程序 djnz r2,intk ;为什么要写这么多 次? mov com,#01h ;清屏 lcall pr1 ;写入指令 mov com,#06h ;设置输入方式, ac 自动增 1,画面不动 lcall pr1 ;写入指令 mov com,#0ch ;设置显示方式, 光标开,闪烁关 lcall pr1 ;写入指令 ret ;写 cgram 子程序 cg_write: movcom,#40h ;设置 cgram 地址 lcall pr1 mov r2,#64 ;循环量设置 mov r3,#00h mov dptr,#cgtab ;设置字模数据首地 址 cg1: mov a,r3 movc a,a+dptr mov dat,a lcall pr2 inc r3 djnz r2,cg1 ret ;自定义字符显示演示程序段 cgdisp: movdptr,#tabdy1 ;设置 学院 2009 届专科生毕业设计第 28 页 字表首地址 mov r2,#0 ;循环量设置 loop1: mov a,r2 movc a,a+dptr ;取字符代码 mov dat,a lcall pr2 ;写数据 inc r2 cjne r2,#5,loop1 ret delay:mov r7,#200 d02: mov r6,#200 d01: ;nop ;nop nop djnz r6,d01 djnz r7,d02 ret tabdy1: db 2009,00h,6,01h,9,02h ,fenglei cgtab: db 08h,1fh,04h,0fh,0ah,1fh,02h,02h ;“年”代码=00h db 0fh,09h,0fh,09h,0fh,09h,11h,00h ;“月”代码=01h db 1fh,11h,11h,1fh,11h,11h,1fh,00h ;“日”代码=02h db 11h,0ah,04h,1fh,04h,1fh,04h,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论