嵌入式系统开发基础——基于8位单片机的C语言程序设计(第二版) 教学课件 ppt 作者 侯殿有 葛海淼 编著 第十六章

上传人:E**** 文档编号:89409679 上传时间:2019-05-24 格式:PPT 页数:64 大小:787KB
返回 下载 相关 举报
嵌入式系统开发基础——基于8位单片机的C语言程序设计(第二版) 教学课件 ppt 作者 侯殿有 葛海淼 编著 第十六章_第1页
第1页 / 共64页
嵌入式系统开发基础——基于8位单片机的C语言程序设计(第二版) 教学课件 ppt 作者 侯殿有 葛海淼 编著 第十六章_第2页
第2页 / 共64页
嵌入式系统开发基础——基于8位单片机的C语言程序设计(第二版) 教学课件 ppt 作者 侯殿有 葛海淼 编著 第十六章_第3页
第3页 / 共64页
嵌入式系统开发基础——基于8位单片机的C语言程序设计(第二版) 教学课件 ppt 作者 侯殿有 葛海淼 编著 第十六章_第4页
第4页 / 共64页
嵌入式系统开发基础——基于8位单片机的C语言程序设计(第二版) 教学课件 ppt 作者 侯殿有 葛海淼 编著 第十六章_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《嵌入式系统开发基础——基于8位单片机的C语言程序设计(第二版) 教学课件 ppt 作者 侯殿有 葛海淼 编著 第十六章》由会员分享,可在线阅读,更多相关《嵌入式系统开发基础——基于8位单片机的C语言程序设计(第二版) 教学课件 ppt 作者 侯殿有 葛海淼 编著 第十六章(64页珍藏版)》请在金锄头文库上搜索。

1、第十六章KS0108液晶显示器驱动控制,【本章知识架构】,【本章教学目标和要求 了解KS0108LCD显示控制器特点 了解KS0108显示RAM结构的特殊性 熟悉KS0108指令系统 在KS0108LCD显示控制器没有打点指令时,自己编写打点程序 在打点程序的基础上编写汉字和曲线显示程序 学会将正常字模转换为KS0108LCD显示控制器需要的字模,温馨提示: 许多LCD模块使用KS0108做为控制器,因此本章内容对这类模块的驱动有很大的参考价值,它们的驱动程序基本相同。 本章重点是打点程序的编写和字模翻转。 如果你阅读这些程序有困难,可以直接使用随书下载资料中的现成程序,17.1 KS0108

2、液晶显示器概述,17.1.1 KS0108的硬件特点 KS0108液晶显示控制器是一种带有驱动输出的图形液晶显示控制器,可直接与8位微处理器相连,内置KS0108的液晶显示模块有多种型号和规格,本章只对GTG-19264的使用进行介绍。KS0108可与KS0107配合对液晶屏进行、列驱动,由于KS0107的驱动与MPU没有关系,故本章只是有选择的介绍KS0108的应用方法。由于KS0108价格低廉,外型尺寸较小,在嵌入式控制系统中应用较多。,KS0108的特点: 1内藏6464=4096位显示RAM, RAM中每“位”数据对应LCD屏上一个点的亮、暗状态,颜色1BPP,单色; 2KS0108是

3、列驱动器,具有64路列驱动输出; 3KS0108读、写操作时序与MCS-51系列微处理器相符,因此它可直接与MCS-51系列微处理器接口相连; 4KS0108的占空比为1 /48:1 /64。 5KS0108与微处理器的接口信号见表17-1。,6KS0108显示RAM的屏上地址结构见图17-1,显示RAM分为8页(Page0Page7),每页64列(SEG0SEG63),因此设置了页地址和列地址,就唯一确定了显示RAM中的一个字节单元。 图17-1是显示字模在显示屏上的结构,从图中看出,每页中字模数据在屏上是垂直放置的,低位D0在最上,高位D7在最下。当我们将字模从字库中取出显示时,字模是横着

4、存放的,即高位D7在最左、低位D0在最右。所以要正常显示,必需将字模逆针旋转90度,这也是KS0108显示控制器的特点,也是我们显示程序的难点。 本章给出了二套程序,一套是字模已事先旋转好的汉字和曲线显示程序;一套是正常字模,在显示时我们要先将其旋转然后显示。 图中显示85 ASCII字符SAG例子。,17.1.2 KS0108与微处理机的接口,KS0108和单片机的接口有直接方式和间接方式, 直接方式接口如图17-2示, 间接方式如图17-3所示。二种接口形式的显示驱动在17-2节介绍。,17.1.3 KS0108的电源和对比度调整 1双电源供电 双电源是指用户需要给液晶模块提供二路电压,一

5、路是逻辑电压VDD,即给液晶模块的逻辑电路供电,一般是+5V(或+3V)。另一路是给液晶屏驱动用的,1/64占空比的液晶屏一般需要815V电压驱动。所以用户需要提供一路负电压VEE,VEE等于-5V-10V,这样VDD和VEE之间有1015V的压降,用做液晶屏驱动电压。具体电源接法如图17-4示。 也有些产品的接口将VEE端省略了,只有V0端,其电源接法如图17-5示。,2单电源供电 单电源产品是指客户需要给液晶模块提供一路逻辑电压VDD,一般为+5V(或+3V),液晶模块内部集成了DC/DC转换电路,而液晶屏的驱动电压由DC/DC转换电路提供。 一般这类产品的接口中,没有VEE端子,而取代之

6、的是VUOT端子,即液晶模块内部DC-DC转换电路生成的负电压的输出端子,一般为-5V或-10V左右。这种产品一般需要用户外接电位器来调节显示深浅。其电路如图17-6示:,17.2 KS0108的指令系统,KS0108的指令系统比较简单,总共只有七种。现分别介绍如下 17.2.1 显示开/关指令 显示开/关指令 DB0=1时,LCD显示RAM中的内容;DB0=0时,关闭显示,即指令=0x3f时显示开,指令=0x3e时显示关。,显示起始行(ROW)设置指令 该指令设置了对应液晶屏最上一行的显示RAM的行号,有规律的改变显示起始行,可以使LCD实现显示滚屏的效果。指令=0xc00xff对应屏幕上第

7、0行到第63行。,17.2.2 行列设置命令 1页(RAGE)设置指令 显示RAM共64行,分8页,每页8行。指令=0xb80xbf对应0页到7页。 列地址(Y Address)设置指令 设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MPU就可以用读、写指令读出该单元中的内容或向该单元写进一个字节数据。指令=0x400x7f对应0列到63列。,17.2.3 数据和状态读写命令 1读状态指令 该指令用来查询KS0108的状态,各参量含义如下: BUSY: BUSY = 1,忙,禁止读写;BUSY = 0,空闲,可以读写 ON/OFF:ON/OFF=1,显示关闭;ON/OFF= 0

8、,显示打开 REST:REST= 1,复位状态;REST= 0,正常状态 在BUSY=1和REST=1状态时,除读状态指令外,其它指令均不对KS0108产生作用。 在对KS0108操作之前要查询BUSY状态,以确定是否可以对KS0108进行操作。BUSY =1忙; BUSY =0 可以对其操作。,2写数据指令 R/W=0写数据。 读数据指令 R/W=1读数据。 读、写数据指令时,每执行完一次读、写操作,列地址就自动增一,必须注意的是进行读操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。,17.3 KS0108的软件驱动程序,内嵌KS0108的显示模块有GTG-12832、

9、GTG-12864、GTG19248、GTG19264等等,它们的显示程序和本节介绍的基本相同,读者可以参照编制。 19264图形点阵模块内嵌三片KS0108,引出二个片选信号CS1和CS2,如CS1CS2 =00 选中左侧KS0108,如CS1CS2 = 01选中中间KS0108,如CS1CS2 = 10选中右边KS0108,采用直接访问方式,该模块逻辑图如17-7示。 KS0108的软件驱动程序有二个难点要注意: 1.它的指令系统没有“位操作”,即没有打点功能。我们只有自己编写一个打点函数,上章的T6963C驱动程序的打点方法才可以借鉴使用。,注意和KS0108一样,大多LCD控制器没有“

10、位操作”功能。因此解决打点功能很有意义。本节给出打点函数,可供参考。,2KS0108的显示RAM中字节排列和正常字模不一样,KS0108的字模要在正常字模的基础上逆时针旋转90,也就是说普通字模在KS0108上不能直接显示,必须先进行逆时针旋转90,才能正常显示。本节显示程序有二套,一套字模是事先旋转好的,可以直接显示。一套是正常字模,先进行旋转然后再显示,具体方法见程序解释和注释。,下面介绍的KS0108 的C语言驱动程序是MGLS-12864和MCS-51相连,采用直接方式(见图17-2),在Keil C上调试通过。 Al l = ,A10 = , A9 = R/W,A8 = D/I,两片

11、KS0108B的RST接高电平, 与KS0108的CS1相连, 与KS0108的CS2相连。这样, = 01选通片1, = 10选通片2。 例17-1 KS0108 的C语言驱动程序,下面对注释详细介绍: 注1:常用变量宏定义。 注2:108LCD.H是本程序专用头文件,里面是本程序用的数据。 注3:这些符号地址随所选MPU和接口而定。 注4:打点函数W_DOT(U8 x,U8 y)是把整个屏按图形点阵处理,列(x)的范围是0127;行(y)的范围是063。有了这个函数我们就可以随心所欲的在屏上显示各种图形和曲线了。 m=y/8是计算要打的点在第几页,然后用lcd_ks108SetLocat1

12、(x,m)定位;n=y%8是计算该点在这个字节中的bit位。k=0x01,k=kn是要用k来“或”这个bit位。,下面的程序首先要把该点的信息读出,根据系统说明,要读二次才可靠,每读一次地址自动加1,因此下次读时要重新定位。然后用k去“或”这个字节,主要是写点的同时要保护该字节的其它bit位。 注5:清点函数C_DOT( U8 x, U8 y)程序意义同上述打点函数,利用清点函数我们可以清直线,进而可以清一块区域。我们要在某区域画图,首先要把该区域原内容清除,此时就要用清点函数。同时利用清点程序也可以动态刷新屏幕,就象我们在程序ShowSinWave1()中使用ClearVerticalLin

13、e()一样; 注6:函数ClearVerticalLine()在本项目中主要用来在ShowSinWave1()中动态刷新屏幕。,注7:画斜线函数。 注8:显示一条正弦曲线,数据是由其它程序事先计算得到的DrawHorizontalLine(1,127,30)和DrawVerticalLine(0,0,63)是画坐标;ClearVerticalLine(s+2,0,63)是清垂直线,随s动态变化,这条线也不断移动,起刷新屏幕作用。 注9:显示三条正弦曲线,意义同上。 注10:显示1616汉字一个,字膜是没转换的。由于KS0108 RAM的特点,不能把汉字取出直接显示,需要转90度,而取字膜程序多

14、是不转换的,因此就要有一个转换程序。,以88字符为例,原字膜在RAM中的排列如图17-8,转换后应成为图17-9。从图17-9看出,转换后的0号字节是由没转换字膜的0到7号字节的bit7组成,其中D7是原7号字节的D7;转换后的1号字节是由没转换字膜的0到7号字节的bit6组成,其中D7是原7号字节的D6;转换后的2号字节是由没转换字膜的0到7号字节的bit5组成,其中D7是原7号字节的D5,由此就可以编写字符转换程序。 1616点阵汉字占32个字节,88字符正是它的1/4,因此可分4次按上述方法将其转换为显示字膜。,注11:按注10所述分二次将816字符转换为显示字符,做法见转换程序。 注1

15、2:以下几个程序是用打点的方法处理汉字和字符显示,只要我们处理好打点程序,就可以把上章T6963C的C语言程序直接考来使用,从这里可以看出C语言的优点和打点程序的灵活。但前面的几个显示程序是一次输出一个字节,如果字膜是事先转换好的,速度会快些。 注13:试验某一程序时最好把其它程序屏蔽。主程序中只有部分函数,其它可以添加。,17.4 ASCII 88字符库,为方便编程,本节给出ASCII 88字符库(字膜旋转90),供读者使用。字库是按C语言给出的。 ASCII 88字符库(字膜旋转90):,本 章 小 结,本章讲述了在嵌入式系统中使用较多的LCD显式控制器KS0108的特殊RAM结构和指令系

16、统,特别详细介绍了如何编写打点指令和在打点指令基础上显示汉字、曲线和ASCII码字符的原理,给出了KS0108和MCS-51的连接和软件驱动程序。 对使用正常字模的显示程序给出了字模旋转程序。 对使用KS0108显式控制器的一类显示模块有参考价值。,第十七章习题,1, KS0108显示内存字模排列与T6963C有什么不同? 2,如何编写KS0108的打点函数? 3,如何编写KS0108的清点函数? 4,正常字模点阵汉字在KS0108上如何显示?为什要先旋转? 5,利用旋转好的字模显示88ASCII码字符。 6,如何根据打点函数画垂直线、水平线、斜线。 7,如何根据打点函数显示1212、1616、2424、4848点阵汉字? 8,如何根据打点函数显示88、816ASCII码字符。 9,如何根据打点函数显示周期为4f的正

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号