资源预览内容
第1页 / 共89页
第2页 / 共89页
第3页 / 共89页
第4页 / 共89页
第5页 / 共89页
第6页 / 共89页
第7页 / 共89页
第8页 / 共89页
第9页 / 共89页
第10页 / 共89页
亲,该文档总共89页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
课题四液晶显示 1602液晶显示12864液晶显示 课题目标本课题的任务是用单片机实现液晶显示 演示效果如图5 1所示 通过编程 学会在单片机上实现液晶显示控制方法 以及不同数据显示的程序编写方法 图5 1液晶显示效果图 任务一1602液晶显示方式 本任务就是将单片机与1602液晶接成图5 2所示电路图 编程实现 用液晶显示出 ILIKEMCU WWW CQWU EDU CN 图5 2液晶显示电路图 一 液晶显示原理 1 液晶显示器及其特点液晶显示器以其微功耗 体积小 显示内容丰富 超薄轻巧的诸多优点 没有电磁辐射 寿命长等优点 在袖珍式仪表和低功耗应用系统中得到越来越广泛的应用 这里介绍的字符型液晶模块是一种用5x7点阵图形来显示字符的液晶显示器 根据显示的容量可以分为1行16个字 2行16个字 2行20个字等等 这里以常用的2行16个字的1602液晶模块来介绍它的编程方法 2 液晶引脚定义 表5 1LCD1602引脚功能 3 字符代码与显示字符关系1602液晶模块内部的字符发生存储器 CGROM 已经存储了160个不同的点阵字符图形 如表5 2所示 这些字符有 阿拉伯数字 英文字母的大小写 常用的符号 和日文假名等 每一个字符都有一个固定的代码 比如大写的英文字母 A 的代码是01000001B 41H 显示时模块把地址41H中的点阵字符图形显示出来 我们就能看到字母 A 表5 2字符发生存储器字符代码与显示字符关系 4 LCD1602指令表 1602液晶模块内部的控制器共有11条控制指令 如表5 3所示 表5 31602指令表 液晶显示模块是一个慢显示器件 所以在执行每条指令之前一定要确认模块的忙标志为低电平 表示不忙 否则此指令失效 要显示字符时要先输入显示字符地址 也就是告诉模块在哪里显示字符 表5 4是DM 1602的内部显示地址 表5 41602地址表 比如第二行第一个字符的地址是40H 那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢 这样不行 因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B 40H 10000000B 80H 11000000B C0H 二 时序图 1 1602基本操作时序2 写操作时序 图5 5操作时序图 3 时序时间表 表5 5时序表 初始化通过初始化设置堆栈栈底为60H 调用LCD初始化子程序完成对LCD的初始化设置 字符显示完成对LCD初始化后 调用LCD字符显示子程序显示第一行字符和第二行字符 主程序设计流程图如图6 5所示 项目实践 3 程序设计 1 主程序设计主程序主要完成硬件初始化 子程序调用等功能 图6 5主程序流程图 2 写入显示数据到LCD子程序模块设计当LCD1602的寄存器选择信号RS为1时 选择数据寄存器 当LCD1602的读写选择线R W为0时 进行写操作 当LCD1602的使能信号E至高电平后再过两个时钟周期至低电平 产生一个下降沿信号 往LCD写入显示数据 写入显示数据到LCD子程序设计流程图如图6 6所示 图6 6写入显示数据到LCD子程序流程图 3 写入指令数据到LCD子程序模块设计当LCD1602的寄存器选择信号RS为0时 选择指令寄存器 当LCD1602的读写选择线R W为0时 进行写操作 当LCD1602的使能信号E至高电平后再过两个时钟周期至低电平 产生一个下降沿信号 往LCD写入指令代码 写入指令数据到LCD子程序设计流程图如图6 7所示 图6 7写入指令数据到LCD子程序流程图 4 字符显示子程序模块设计设置LCD的DDRAM地址 调用写入指令到LCD子程序设置DDRAM地址指针 然后设置显示数据个数R7 设置显示数据索引值R6 将显示数据表地址送入DPTR中 用查表指令查表取得显示数据 调用写入显示数据到LCD子程序 使数据显示在LCD上 显示数据个数R7减1 显示数据索引值R6加1 按照上面的步骤显示下一个数据 直到显示数据个数R7为0 所有字符均显示在LCD上 字符显示子程序设计流程图如图6 8所示 图6 8字符显示子程序流程图 项目实践 5 LCD初始化子程序模块设计1602字符型LCD的初始化过程为 延时15ms 写指令38H 不检测忙信号 延时5ms 写指令38H 不检测忙信号 延时5ms 写指令38H 不检测忙信号 以后每次写指令 读 写数据操作均需要检测忙信号 写指令38H 显示模式设置 写指令08H 显示关闭 写指令01H 显示清屏 写指令06H 显示光标移动设置 写指令0CH 显示开及光标设置 根据它的初始化过程 LCD初始化子程序设计流程图如图6 9所示 项目实践 图6 9LCD初始化子程序流程图 项目实践 6 延时子程序模块设计延时子程序模块设计请参考项目1 4 汇编源程序 项目名称 字符型LCD接口实验 功能 在1602字符型液晶第一行显示 ILIKEMCU 在第二行显示 作者 日期 1602LCD信号接口定义EBITP2 2 LCD使能信号RWBITP2 1 读 写选择信号R W 0为写入数据 1为读出数据RSBITP2 0 数据 命令选择信号R S 0为指令 1为数据 项目实践 LCDPORTEQUP1 液晶的数据线DB7 DB0CMD BYTEEQU30H 写命令入口参数DAT BYTEEQU31H 写显示数据入口参数 主程序ORG0000HAJMPMAINORG0050HMAIN MOVSP 60H 设置堆栈指针LCALLINITLCD 调用LCD初始化子程序LCALLDISPMSG1 调用液晶字符显示程序LCALLDISPMSG2 调用液晶字符显示程序SJMP LCD1602要用到的一些子程序 函数功能 写入指令到LCD1602子程序 入口参数CMD BYTE 出口参数 项目实践 WRITE CMD CLRRS 当RS 0 RW 0时 写指令CLRRWMOVA CMD BYTE 把写命令入口参数CMD BYTE传给AMOVLCDPORT A LCDPORT为液晶数据线DB7 DB0SETBE 打开液晶使能信号ENOPNOPCLRE 关闭液晶使能信号ELCALLDELAY 调用延时子程序RET 函数功能 写入显示数据到LCD1602子程序 入口参数 DAT BYTE 出口参数 WRITE DAT SETBRS 当RS 1 RW 0时 写入数据到LCDCLRRWMOVA DAT BYTE 把写数据入口参数DAT BYTE传给AMOVLCDPORT A LCDPORT为液晶数据线DB7 DB0 项目实践 SETBE 打开液晶使能信号ENOPNOPCLRE 关闭液晶使能信号ELCALLDELAY 调用延时子程序RET 函数功能 写入显示数据到LCD1602子程序 入口参数 DAT BYTE 出口参数 WRITE DAT SETBRS 当RS 1 RW 0时 写入数据到LCDCLRRWMOVA DAT BYTE 把写数据入口参数DAT BYTE传给AMOVLCDPORT A LCDPORT为液晶数据线DB7 DB0SETBE 打开LCD使能信号ENOPNOPCLRE 关闭LCD使能信号ELCALLDELAY 调用延时子程序RET 函数功能 LCD显示初始化子程序 入口参数 出口参数 INITLCD MOVCMD BYTE 30HLCALLWRITE CMD 调用写命令子程序MOVCMD BYTE 30HLCALLWRITE CMD 调用写命令子程序MOVCMD BYTE 30HLCALLWRITE CMD 调用写命令子程序MOVCMD BYTE 38H 设定工作方式LCALLWRITE CMD 调用写命令子程序MOVCMD BYTE 0CH 显示状态设置LCALLWRITE CMD 调用写命令子程序MOVCMD BYTE 01H RS 0 RW 0时 DB7 DB0 01H为清屏LCALLWRITE CMD 调用写命令子程序MOVCMD BYTE 06H 输入方式设置LCALLWRITE CMD 调用写命令子程序RET 项目实践 函数功能 液晶字符显示程序1 在第一行显示表格TB1的内容DISPMSG1 MOVCMD BYTE 80H 设置DDRAM的地址LCALLWRITE CMD 调用写命令子程序MOVR7 10 R7为显示数据个数MOVR6 00H R6表头地址MOVDPTR TAB1DISPMSG1 1 MOVA R6MOVCA A DPTR 查表MOVDAT BYTE A 从A把数据传给写数据入口参数DAT BYTELCALLWRITE DAT 调用写数据子程序INCR6 下一个数据的地址DJNZR7 DISPMSG1 1 判断是否显示完毕RET 项目实践 函数功能 液晶字符显示程序2 在第二行显示表格TB2的内容DISPMSG2 MOVCMD BYTE 0C0H 设置DDRAM的地址LCALLWRITE CMD 调用写命令子程序MOVR7 0fHMOVR6 00HMOVDPTR TAB2DISPMSG2 1 MOVA R6MOVCA A DPTRMOVDAT BYTE ALCALLWRITE DAT 调用写数据子程序INCR6DJNZR7 DISPMSG2 1RET 函数功能 延时子程序 入口参数 出口参数 DELAY MOVR5 0A0HDELAY1 NOPDJNZR5 DELAY1RETORG0200H 要显示的内容TAB1 DB ILIKEMCU TAB2 DB END 三 C语言程序 include defineucharunsignedchar defineuintunsignedintsbitlcden P2 2 sbitlcdrs P2 0 sbitlcdrw P2 1 ucharnum ucharcodetable ILIKEMCU ucharcodetable1 voiddelay uintz uintx y for x z x 0 x for y 110 y 0 y voidwrite com ucharcom lcdrs 0 P1 com delay 5 lcden 1 delay 5 lcden 0 voidinit lcden 0 write com 0 x38 write com 0 x0c write com 0 x0f write com 0 x06 write com 0 x01 write com 0 x80 voidwrite data uchardate lcdrs 1 P1 date delay 5 lcden 1 delay 5 lcden 0 voidmain lcdrw 0 init for num 0 num 11 num write data table num write com 0 x80 0 x40 for num 0 num 15 num write data table1 num delay 20 while 1 思考 1 如何用1602显示日期和时间 C语言程序 include 51头文件 defineucharunsignedchar defineuintunsignedint 变量宏定义ucharcount s1num shi2 0 fen2 0 shi3 10 fen3 10 全局变量ucharshi fen miao shi1 fen1 led 1 led 2 时间变量sbitrs P2 0 数据 命令选择端 H L sbitrw P2 1 读 写选择端 H L sbite P2 2 使能信号 ucharcodetable 2010 10 28DATE ucharcodetable1 00 00 00TIME 数据字符表voiddelay uintz 延时 uintx y for x z x 0 x for y 110 y 0 y voidwrite com ucharcom 写液晶指令 rs 0 e 0 P1 com delay 5 e 1 delay 5 e
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号