基于51单片机实时控制的LCD液晶显示屏循环显示系统.doc
《基于51单片机实时控制的LCD液晶显示屏循环显示系统.doc》由会员分享,可在线阅读,更多相关《基于51单片机实时控制的LCD液晶显示屏循环显示系统.doc(24页珍藏版)》请在沃文网上搜索。
1、摘要本文研制一种基于51单片机实时控制的LCD液晶显示屏循环显示系统。硬件系统由单片机最小系统和液晶显示系统组成。此次课程设计采用AT89C51型单片机和12864点阵型LCD液晶显示器来实现。LCD上要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。要想实现循环移动,只需不断改变图片的字模数据在液晶面板上的显示位置(RAM地址)即可。程序采用C语言编写,使用Keil编译器进行编译。关键词:单片机 AT89C51 12864LCD C语言 字模1目 录摘要I1 概述11.1 液晶显示简介11.1.1 液晶显示原理11.1.2 液晶显示器的分类11.1.3 12864LCD简介12
2、 方案设计52.1 硬件电路设计52.2 流程图设计63程序设计73.1 控制程序设计73.1.1 操作命令定义和编址设计73.1.2 12864LCD的初始化73.1.3 延时子程序83.1.4 忙检测83.1.5 命令/数据写入函数93.1.6 图片显示及循环滚动93.2 字模软件的使用104 仿真电路135 仿真结果146 心得体会15参考文献16附录171 概述在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发
3、光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单。 1.1 液晶显示简介1.1.1 液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。1.1.2 液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱
4、动(Simple Matrix)和主动矩阵驱动(Active Matrix)三种。1.1.3 12864LCD简介本次课程设计使用12864LCD实现。12864LCD是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及12864全点阵液晶显示器组成。可完成图形显示,也可以显示84个(1616点阵)汉字。下面以12864液晶显示器为例,介绍其用法。一般12864液晶显示器实物如图 1-1所示:图1-1 12864液晶显示器实物图(1)12864LCD主要技术参数:电源:VDD 3.3V+5V(内置升压电路,无需负压);显示内容:128列 64行显示颜色:黄绿显示角度:6:00钟直视逻辑工作电
5、压(VDD):4.55.5V电源地(GND):0V工作温度(Ta):060(常温) / -2075(宽温)(2) 引脚功能说明:12864LCD采用标准的20脚(带背光)接口,各引脚接口说明如表1-1所示。表1-1 12864LCD引脚功能说明引脚号引脚名电平输入/输出作用1Vss0V电源地2VDD+5V电源(+5V)3VLCD0-10VLCD驱动负电压,要求VDD-VLCD=13V4RS0/1输入寄存器选择信号5R/W0/1输入读/写操作选择信号6E0/1输入使能信号,高电平有效7DB00/1输入/输出八位三态并行数据总线8DB19DB210DB311DB412DB513DB614DB715
6、CS10/1输入片选信号,当CS1=1时,控制液晶左半屏16CS20/1输入片选信号,当CS1=2时,控制液晶右半屏17/RSET0/1输入复位信号,低电平有效18VEE-10V输入负压输出,单电源供电时输出-10V负电压19BLA+5V输入背光电源阳极20BLK0V输入背光电源阴极(3) 12864液晶显示器的RAM地址映射 12864点阵(LCM)就是由128*64个液晶显示点组成的一个128列*64行的阵列。每个显示点对应一位二进制数,1表示亮,0表示灭。存储这些点阵信息的RAM称为显示数据存储器。要显示某个图形或汉字就是将相应的点阵信息写入到相应的存储单元中。图形或汉字的点阵信息当然由
7、自己设计,问题的关键就是显示点在液晶屏上的位置(行和列)与其在存储器中的地址之间的关系。由于多数的驱动电路是由一片行驱动器和两片列驱动器构成,所以12864液晶屏实际上是由左右两块独立的64*64液晶屏拼接而成,每半屏有一个512*8 bits显示数据RAM。左右半屏驱动电路及存储器分别由片选信号CS1和CS2选择。显示点在64*64上的位置由行号(line,063)与列号(column,063)确定。512*8 bits RAM中某个存储单元的地址由页地址(Xpage,07)和列地址(Yaddress,063)确定。每个存储单元存储8个液晶点的显示信息。为了使液晶点位置信息与存储地址的对应关
8、系更直观关,将64*64液晶屏从上至下8等分为8个显示块,每块包括8行*64列个点阵。每列中的8行点阵信息构成一个8bits二进制数,存储在一个存储单元中。存放一个显示块的RAM区称为存储页。即64*64液晶屏的点阵信息存储在8个存储页中,每页64个字节,每个字节存储一列(8行)点阵信息。因此存储单元地址包括页地址(Xpage,07)和列地址(Yaddress,063)。例如点亮128*64的屏中(20,30)位置上的液晶点,因列地址30小于64,该点在左半屏第29列,所以CS1有效;行地址20除以8取整得2,取余得4,该点在RAM中页地址为2,在字节中的序号为4;所以将二进制数据000100
9、00写入Xpage=2,Yaddress=29的存储单元中即点亮(20,30)上的液晶点。(4) 12864LCD的指令说明该类液晶显示模块的指令系统比较简单,总共只有七种。其指令表如表1-3所示:序号指令名称RSR/WD7D6D5D4D3D2D1D01显示开关设置000011111*2显示起始行设置0011*3页面地址设置0010111*4列地址设置0001*5读取状态字01BUSY0ON/OFFREST00006写显示数据10数据7读显示数据11数据2 方案设计2.1 硬件电路设计DB70接数据总线,RS,R/W,CS接地址总线,E接读写控制总线,采用与非门匹配时序,如果存在地址冲突还需统
10、一编制。图2-1 电路连线图2.2 流程图设计开始适当延时,等待LCD复位LCD初始化 写入图片数据K2=0?K1=0?N NY Y整屏向下循环移动整屏向上循环移动延时延时结束图2-2 程序设计流程图3程序设计3.1 控制程序设计3.1.1 操作命令定义和编址设计#include /51 单片机常用寄存器定义#include /解析XBYTE 宏定义/*常用操作命令和参数定义*/#define DISPON 0x3f /显示开#define DISPOFF 0x3e /显示关,参考指令表显示开关设置#define FIRSTROW 0xc0 /显示起始行设置,参考指令表,在0 到63 行选择#
11、define SETY 0xb8 /Y 方向,8 页64 行,参考指令表,2.0在0 到8 页选择#define SETX 0x40 /X 方向,半屏64 列,参考指令表,在0 到63 列选择/*与硬件相关的编址设计*/*左屏命令和数据读写编址*/*P2+P0口16位有效编址,有效位是P2.3P2.0,无关位用“1”表示*/*P2.0RS*/*P2.1R/W*/*P2.2CS1*/*P2.3CS2*/ CS1 CS1 R/W RS#define LLCD_CMD_WR XBYTE0xf4f0 / 0 1 0 0#define LLCD_DAT_WR XBYTE0xf5f0 / 0 1 0 1#
12、define LLCD_CMD_RD XBYTE0xf6f0 / 0 1 1 0 #define LLCD_DAT_RD XBYTE0xf7f0 / 0 1 1 1/*左屏命令和数据读写编址*/ CS1 CS1 R/W RS#define RLCD_CMD_WR XBYTE0xf8f0 / 1 0 0 0#define RLCD_DAT_WR XBYTE0xf9f0 / 1 0 0 1#define RLCD_CMD_RD XBYTE0xfaf0 / 1 0 1 0#define RLCD_DAT_RD XBYTE0xfbf0 / 1 0 1 13.1.2 12864LCD的初始化初始化函数:
13、void lcd_init(void)lcd_cmd_wr(DISPON,0); /开显示,0 参数表示左屏lcd_cmd_wr(FIRSTROW,0); /设定显示首列lcd_cmd_wr(SETY,0); /设定Y 坐标lcd_cmd_wr(SETX,0); /设定X 坐标lcd_cmd_wr(DISPON,1); /1 参数表示右屏lcd_cmd_wr(FIRSTROW,1);lcd_cmd_wr(SETY,1);lcd_cmd_wr(SETX,1);3.1.3 延时子程序 void delay(unsigned char timer)unsigned char i;while(-tim
14、er)for(i=0;i100;i+);3.1.4 忙检测void check_busy(unsigned char right)unsigned char temp=0xff;doif(right) temp=RLCD_CMD_RD;else temp=LLCD_CMD_RD;while(temp|0x7f)=0xff);/检测D7 是否为1,1 表示LCD 忙,如果忙,继续检测,直到空闲止3.1.5 命令/数据写入函数函数 lcd_cmd_wr 将命令写入 LCM 模块; void lcd_cmd_wr(unsigned char cmdcode, unsigned char right)
15、check_busy(right);if(right) RLCD_CMD_WR = cmdcode;else LLCD_CMD_WR = cmdcode;函数 lcd_data_wr 将数据写入 LCM 模块; void lcd_data_wr(unsigned char dispdata, unsigned char right)check_busy(right);if(right) RLCD_DAT_WR = dispdata;else LLCD_DAT_WR = dispdata;3.1.6 图片显示及循环滚动/*写一帧12864 点的图片显示*/void lcd_bmp_wr(unsi
16、gned char *bmp)unsigned char i,j;for(i=0;i8;i+)/页地址设定lcd_cmd_wr(SETY+i,0);lcd_cmd_wr(SETX,0);lcd_cmd_wr(SETY+i,1);lcd_cmd_wr(SETX,1);for(j=0;j64;j+)lcd_data_wr(bmp128*i+j,0);/左半屏lcd_data_wr(bmp128*i+j+64,1);/右半屏/*整屏向上循环移动*/void lcd_mov_up()unsigned char i;for(i=0;i0;i-)/64 行循环lcd_cmd_wr(FIRSTROW+i,0
17、);lcd_cmd_wr(FIRSTROW+i,1);delay(500);/适当延时3.2 字模软件的使用在对图片进行取模前,首先要设计好12864点(象素)的黑白图片,如图3-1所示。图3-1 进行显示所需要的图片提取字模用到的软件为“字模提取V2.2”,操作界面如图3-2所示。点击“打开图像图标”,打开需要进行字模提取的图像。图3-2 字模提取操作界面点击“参数设置”“其他选项”,在弹出的界面中对取模参数进行设置。参数按图3-3进行设置。图3-3 参数设置界面单击“取模方式”“C51格式”,进行取模。取模后在点阵生成区自动生成字模,如图3-4所示。图3-4 提取字模从点阵生成区取出字模数
18、据,粘贴到程序中去即可。4 仿真电路仿真电路如图4-1所示。图4-1 仿真电路图5 仿真结果将程序(见附录)使用Keil进行编译,生成HEX格式文件。将HEX文件烧写进单片机,点击运行进行仿真。仿真结果如图5-1所示。图5-1 仿真结果图5-1为仿真界面,当K1按下时,字符按照由下到上的方向自动滚动,图片循环显示。当K1断开,K2按下时,字符按照由上到下的方向自动滚动,仍然循环显示。仿真结果与程序设计流程一致,完成程序所要实现的功能。6 心得体会 经过几天的能力拓展训练,我收获了很多的心得体会,有关于单片机方面的,也有关于C语言编程的,更多的是对知识的灵活运用和掌握。此次能力拓展训练主要是侧重
19、于单片机应用,由于刚刚做完单片机的课程设计,而且单片机课程设计做的是C51控制LED发光二极管的显示。所以一开始看到题目仍然是关于利用51单片机控制显示,只不过是控制LCD液晶显示器的显示,就感到有很大的把握能做好。也正是因此我对此次能力拓展训练没有给予足够的重视,认为和以前的单片机课程设计差不多。这也为我后来多走弯路埋下了伏笔。基于单片机的LCD动态显示对于我来说是完全陌生的,之前接触的几乎清一色的是LED显示。所以从选题到定稿,从理论到实践,在课程设计的这些日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识
20、。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说Proteus上的一些元件找不到,对单片机C语言掌握得不好通过这次能力拓展训练,我在一定程度上相当于把以前所学过的知识又重新温习了一遍。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师和周围同学
21、的辛勤指导和下,终于顺利解决。同时,在他们那里也学到了许多的知识也实际操作技巧。参考文献1 李朝清.单片机原理及应用.北京航空航天大学出版社,20012 马忠梅.单片机的C语言应用程序设计.北京航空航天大学出版社,20033 赵亮.单片机C语言编程与实例.人民邮电出版社,20034 吴金戌.8051单片机实践与应用.清华大学出版社,20025 李华.MCS-51系列单片机实用接口技术.北京航空航天大学出版社,20016 范风强.单片机语言C51应用实战集锦.电子工业出版社,2003附录#include #include #define DISPON 0x3f#define DISPOFF 0x
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
20 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 实时 控制 LCD 液晶显示屏 循环 显示 系统