版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 PAGE 74 摘 要本文围绕设计以单片机作为LCD液晶显示系统控制器为主线,基于单片机8051,采用的液晶显示控制器的芯片是SED1520,主要实现中文显示、滚屏以及左右移动功能。同时也对部分芯片和外围电路进行了介绍和设计,并附以系统结构框图加以说明,着重介绍了本系统应用的各硬件接口技术和各个接口模块的功能及工作过程,并详细阐述了程序的各个模块。本系统是以单片机的汇编语言来进行软件设计,指令的执行速度快,节省存储空间。为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。使硬件在软件的控制下协调运作。其次阐述了部分程序的流程图和实现过程。本文撰写的主导思想是软、硬
2、件相结合,以硬件为基础,来进行各功能模块的编写。最后对我所开发的用单片机实现LCD液晶显示器控制原理的设计思想和软、硬件调试作了详细的论述。关键字:单片机、液晶显示、8051、SED1520、 目 录 TOC o 1-3 h z u HYPERLINK l _Toc292720110 1 绪 论 PAGEREF _Toc292720110 h 2 HYPERLINK l _Toc292720111 1.1 单片机液晶显示系统设计课题背景 PAGEREF _Toc292720111 h 2 HYPERLINK l _Toc292720112 1.2 开发单片机液晶显示系统的意义 PAGEREF
3、_Toc292720112 h 2 HYPERLINK l _Toc292720115 1.3 课题完成的功能 PAGEREF _Toc292720115 h 3 HYPERLINK l _Toc292720116 2 单片机与C8051F020单片机实验系统 PAGEREF _Toc292720116 h 4 HYPERLINK l _Toc292720117 2.1 单片机技术的发展特点 PAGEREF _Toc292720117 h 4 HYPERLINK l _Toc292720118 2.2 C8051F020单片机实验系统 PAGEREF _Toc292720118 h 5 HYP
4、ERLINK l _Toc292720119 2.3 CIP-51CPU PAGEREF _Toc292720119 h 7 HYPERLINK l _Toc292720127 3 液晶显示控制器KS0108 PAGEREF _Toc292720127 h 10 HYPERLINK l _Toc292720128 3.1 KS0108的特点 PAGEREF _Toc292720128 h 10 HYPERLINK l _Toc292720129 3.2 KS0108管脚 PAGEREF _Toc292720129 h 10 HYPERLINK l _Toc292720130 3.3 KS010
5、8受控引脚 PAGEREF _Toc292720130 h 11 HYPERLINK l _Toc292720131 3.4 KS0108的时序4 PAGEREF _Toc292720131 h 11 HYPERLINK l _Toc292720132 3.4.1 KS0108与68系列微处理器直接接口的时序 PAGEREF _Toc292720132 h 11 HYPERLINK l _Toc292720133 3.4.2 复位时序 PAGEREF _Toc292720133 h 12 HYPERLINK l _Toc292720134 3.5 KS0108显示RAM地址结构 PAGEREF
6、 _Toc292720134 h 13 HYPERLINK l _Toc292720135 3.6 KS0108指令系统4 PAGEREF _Toc292720135 h 13 HYPERLINK l _Toc292720136 4 图形动态显示 PAGEREF _Toc292720136 h 15 HYPERLINK l _Toc292720137 4.1 图形点阵式液晶显示控制原理 PAGEREF _Toc292720137 h 15 HYPERLINK l _Toc292720138 4.2 液晶显示模块外部接口 PAGEREF _Toc292720138 h 15 HYPERLINK
7、l _Toc292720139 4.3 图形点阵液晶显示编码规则 PAGEREF _Toc292720139 h 17 HYPERLINK l _Toc292720140 4.3.1汉字编码规则 PAGEREF _Toc292720140 h 17 HYPERLINK l _Toc292720141 4.3.2 图形编码规则 PAGEREF _Toc292720141 h 19 HYPERLINK l _Toc292720142 4.4 程序流程 PAGEREF _Toc292720142 h 19 HYPERLINK l _Toc292720143 4.5 功能实现 PAGEREF _Toc
8、292720143 h 20 HYPERLINK l _Toc292720144 5 系统实验仿真 PAGEREF _Toc292720144 h 23 HYPERLINK l _Toc292720145 5.1 平台及操作 PAGEREF _Toc292720145 h 23 HYPERLINK l _Toc292720146 5.2 仿真及结果 PAGEREF _Toc292720146 h 23 HYPERLINK l _Toc292720147 参考文献 PAGEREF _Toc292720147 h 25 HYPERLINK l _Toc292720148 致 谢 PAGEREF _
9、Toc292720148 h 261 绪 论1.1 单片机液晶显示系统设计课题背景单片机液晶显示系统主要是指单片机以及由单片机驱动的点阵式液晶显示屏所组成的一个显示系统。液晶显示器与CRT(cathode-ray tube,阴极射线管)、LED (light-emitting diode,发光二级管)或等离子显示器相比是一种低功耗的平面显示器件。它在车内广告、在型智能广告、可视电话、仪表盘、空调、洗衣机和其它低功耗电子产品中得到广泛应用。老式七段LCD(Liquid Crystal Display 液晶显示屏)显示的字符数量有限,只能用于简单显示,而对于比较复杂的字符、图形无法表达。然而在现代
10、工业控制和一些智能化仪器仪表中,越来越多的场所需要用点阵图形显示器显示汉字。由于物探仪器的多功能化、智能化、并且普遍采用人机对话的交互方式,需要能够显示更丰富信息和通用性较强的显示器,便于开发和应用,并要求其体积小、重量轻、功耗小。图形点阵式LCD不仅可以显示字符、数字,还可以显示各种图形、曲线及汉字,并且可以实现屏幕画面滚动、分区开窗口、反转、闪烁、位操作等功能,可以显示用户自定义的任意符号以及曲线、图形等,是信息处理、信息输出的重要手段之一,具有广泛的应用前景。1.2 开发单片机液晶显示系统的意义社会意义:液晶显示器(LCD)具有功耗低、体积小、重量轻、超薄等许多其它显示器无法相比的优点。
11、近几年来被广泛用于单片机控制的智能仪器、仪表和低功耗电子产品中。液晶显示器分为字符型LCD显示模块和点阵型LCD显示模块。字符型LCD是一种用57点阵图形来显示字符的液晶显示器。点阵型液晶可显示用户自定义的任意符号和图形,并可卷动显示,它作为便携式单片机系统人机交互界面的重要组成部分被广泛应用于实时检测和显示的仪器仪表中。支持汉字显示的点阵型液晶在现代单片机应用系统中是一种十分常用的显示设备,汉字BP机、手机上的显示屏就是点阵型LCD。点阵型LCD是现代单片机应用系统中最常用的人机交互界面之一。现实意义:我选择的单片机液晶显示系统的开发,是基于KS0108液晶显示控制器,在C8051F020单
12、片机实验系统上实现。KS0108是点阵型液晶显示控制器,C8051F020单片机是美国Silabs公司推出的完全集成的混合信号系统芯片(SOC)。利用单片机控制液晶显示系统的原理,完成单片机液晶显示系统的设计,我希望能够触类旁通,灵活应用其他型号的液晶显示控制器。将来如果有机会从事这方面的工作,要运用的液晶显示控制器不一定是KS0108,但这次毕业设计中学到的东西为此打下了良好的基础,相信自己能做好这方面的工作。1.3 课题完成的功能所选的单片机液晶显示系统设计,是在C8051F020系统实验设备上实现的。C8051F020中有内藏KS0108控制器的液晶模块CGM12864B。KS0108,
13、12864个点阵,与行控制器KS0107配合使用,组成液晶显示驱动控制系统。我最主要是用KS0108来设计图形动态显示。在显示屏上的显示点是以字节数和位数为显示单元的,单元内为“1”的位在屏幕上反应是亮点,为“0”的位不亮。在字节中能够显示的位数可编程设置,范围是116。如果小于等于8位,则用一个字节,每个字节的低位不起显示作用。例如,设置显示单元为6,每个字节显示6位,那么屏幕上的显示单元为16点;如果大于8位则用两个字节,低字节的低位不起显示作用。屏幕上同一行的显示单元从左到右地排列,对应着显示内存中的地址是从高到低,同一列中的显示单元从上到下,对应显示内存中的地址相差一定的值,称作行地址
14、间隔,可用程序设置。显示内存(RAM,Random Access Memory随机存储器)中的地址与屏幕上的显示位置一一对应。在液晶显示屏上显示图形实际上是将对应的图形显示数据写入显示RAM的相应位置。显示图形首先需要将图形转换为图形字模,然后根据该图形的显示位置将图形字模写入对应的显示RAM区地址。在图形显示过程中,按列扫描,显示完一页后,要送一个页面地址加1指令,让单片机将数据传送到显示RAM的下一页。除了实现图形简单的整屏显示外,根据单片机编程控制灵活的特点,还可以实现图形的左右或上下滚动。实现图形左右滚屏的基本思想是让后一列的数据写住前一列的显示RAM,直至整屏都往右移一列;实现上下滚
15、屏的基本思想是每显示完整屏数据后,显示起始行地址加1,再显示原整屏数据,这样就实现了上下滚屏的效果。2 单片机与C8051F020单片机实验系统2.1 单片机技术的发展特点注释:李秉操.单片机接口技术及其在工业控制中的应用M.陕西:陕西电子编辑部,1991.3:314-336.自单片机出现至今,单片机技术已走过了近20年的发展路程。纵观20年来单片机发展里程可以看出,单片机技术的发展以微处理器(MPU,Microprocessor Unit)技术及超大规模集成电路技术的发展为先导,以广泛的应用领域拉动,表现出比微处理器更具个性的发展趋势。 = 1 * GB2 单片机寿命长 一般说来,单片机开发
16、的产品可以稳定可靠地工作10年、20年;另外,与微处理器相比,单片机的长寿命表现在它不会像386、486、586等MPU一样,随着半导体技术的飞速发展,更新换代的速度越来越快,很短的时间内就被淘汰出局。传统的单片机如68HC05、8051等年龄已有十几年的历史,但产量仍是上升的,这是因为它们在其对相应应用领域的适应性强,并且与之兼容的I/O功能模块的扩展接口技术也层出不穷。 = 2 * GB2 8位、16位与32位单片机共同发展 这是单片机技术发展的另一个动向。长期以来,单片机技术的发展是以8位机为主的。随着移动通信、网络技术、多媒体技术等高科技产品进入家庭,32位单片机应用得到了长足的发展,
17、而16位单片机的发展无论从品种和产量方面,近年来也有较大幅度的增长。 = 3 * GB2 单片机的速度越来越快 MPU发展中表现出来的速度越来越快是以时钟频率越来越高为标志的。而单片机则有所不同,为提高单片机抗干扰能力,降低噪声,降低时钟频率而不牺牲运算速度是单片机技术发展之追求。一些8051单片机兼容厂商改善了单片机的内部时序,在不提高时钟频率的条件下,使运算速度提高了许多。 = 4 * GB2 低电压与低功耗 自80年代中期以来,NMOS工艺单片机逐渐被CMOS(互补金属氧化物半导体)工艺所代替,功耗得以大幅度下降,随着超大规模集成电路技术由3m工艺发展1.5、1.2、0.8、0.5、0.
18、35进而实现了0.2m工艺,全静态设计使时钟频率从直流电到数十MHz任选,都使功耗不断下降。几乎所有的单片机都有Wait、Stop等省电运行方式。允许使用的电源电压范围也越来越宽。一般单片机都能在36V范围内工作,对电池供电的单片机不再需要对电源采取稳压措施。低电压供电的单片机电源下限已由2.7V降至2.2V、1.8V、0.9V供电的单片机已经问世。 = 5 * GB2 低噪声与高可靠性技术 为提高单片机系统的抗电磁干扰能力,使产品能适应恶劣的工作环境,满足电磁兼容性方面更高标准的要求,各单片机商家在单片机内部电路中采取了一些新的技术措施。 = 6 * GB2 OTP与掩膜 OTP是一次性写入
19、的单片机。过去认为一个单片机产品的成熟是以投产掩膜型单片机为标志的。由于掩膜需要一定的生产周期,而OTP型单片机价格不断下降,使得近年来直接使用OTP完成最终产品制造更为流行。它较之掩膜具有生产周期短、风险小的特点。近年来,OTP型单片机需量大幅度上扬,为适应这种需求许多单片机都采用了在片编程技术(In system Programming)。未编程的OTP芯片可采用裸片Bonding技术或表面贴装技术,先焊在印刷板上,然后通过单片机上的编程线、串行数据、时钟线等对单片机编程,解决了批量写OTP芯片时容易出现的芯片与写入器接触不好的问题,使OTP的裸片得以广泛应用,降低了产品的成本。编程线与I
20、/O线共用,不增加单片机的额外引脚。而一些生产厂商推出的单片机不再有掩膜型,全部为有ISP功能的OTP。 = 7 * GB2 MTP向OTP挑战 MTP是可多次编程的意思。一些单片机厂商以MTP的性能、OTP的价位推出他们的单片机,如ATMEL AVR单片机,片内采用FLASH,可多次编程。华帮公司生产的8051兼容的单片机也采用了MTP性能,OTP的价位。这些单片机都使用了ISP技术,等安装到印刷板线路板上以后再下载程序。2.2 C8051F020单片机实验系统潘琢金, 施国君编著. C8051F高速Soc单片机原理及应用M.北京:北京航空航天大学出版社,2005.C8051F020器件是完
21、全集成的混合信号系统级MCU(微程序控制器)芯片,具有64个数字I/O引脚。下面列出了一些主要特性:高速、流水线结构的8051兼容的CIP-51内核(可达25MIPS(Million Instructions Per Second, 每秒百万条指令))全速、非侵入式的在系统调试接口(片内)真正12位、100ksps的8通道ADC,带PGA和模拟多路开关两个12位DAC,可编程更新时序64K字节可在系统编程的FLASH存储器4352(4096+256)字节的片内RAM可寻址64K字节地址空间的外部数据存储器接口硬件实现的SPI、SMBus/I2C和两个UART串行接口5个通用的16位定时器具有5
22、个捕捉/比较模块的可编程计数器/定时器阵列片内看门狗定时器、VDD监视器和温度传感器具有片内VDD监视器、看门狗定时器和时钟振荡器的C8051F020是真正能独立工作的片上系统。所有模拟和数字外设均可由用户固件配置为使能或禁止。FLASH存储器还具有在系统重新编程能力,可用于非易失性数据存储,并允许现场更新8051固件。片内FTAG调试电路允许使用安装在最终应用系统上的产品MCU进行非侵入式(不占用片内资源)、全速、在系统调试.该调试系统支持观察和修改存储器和寄存器,支持断点、观察点、单步及运行和停机命令。在使用JTAG调试时,所有的模拟和数字外设都可全功能运行。每个MCU都可在工业温度范围(
23、-45+85)内用2.7V3.6V的电压工作。端口I/O、/RST、和JTAG引脚都容许5V的输入信号电压。C8051020为100脚TQFP封装(见图2.1)。图2.1 C8051F020原理框架2.3 CIP-51CPU与8051完全兼容C8051F020系列器件使用Cygnal的专利CIP-51微控制器内核。CIP-51与MCS-51指令集完全兼容,可以使用标准803x/805x的汇编器和编译器进行软件开发。CIP-51内核具有标准8052的所有外设部件,包括5个16位的计数器/定时器、两个全双工UART、256字节内部RAM、128字节特殊功能寄存器(SFR)地址空间及8/4个字节宽的
24、I/O端口。速度提高CIP-51采用流水线结构,与标准的8051结构相比指令执行速度有很大的提高。在一个标准的8051中,除MUL和DIV以外所有指令都需要12或24个系统时钟周期,最大系统时钟频率为1224MHz。而对于CIP-51内核,70的指令的执行时间为1或2个系统时钟周期,只有4条指令的执行时间大于4个系统时钟周期。增加的功能C8051F202系列MCU在CIP-51内核和外设有几项关键性的改进,提高了整体性能,更易于在最终应用中使用。扩展的中断系统向CIP-51提供22个中断源(标准8051只有7个中断源),允许大量的模拟和数字外设中断微控制器,一个中断驱动的系统需要较小的MCU干
25、预,因而有更高的执行效率。在设计一个多任务实时系统时,这些增加的中断源是非常有用的。MCU可有多达7个复位源:一个片内CDD监视器、一个看门狗定时器、一个时钟丢失检测器、一个由比较器0提供的电压检测器、一个软件强制复位、CNVSTR引脚及/RST引脚。MCU内部有一个独立运行的时钟发生器,在复位后被默认为系统时钟。如果需要,时钟源可以在运行时切换到外部振荡器,外部振荡器可以使用晶体、陶瓷谐振器、电容、RC或外部时钟源产生系统时钟。 片内存储器新华龙有限公司.C8051F020单片机实验系统使用说明书.CIP-51有标准的8051程序和数据地址配置。它包括256字节的数据RAM,其中高128字节
26、为双映射。用间接寻址访问通用RAM的高128字节,用直接寻址访问128字节的SFR地址空间。数据RAM的低128字节可用直接或间接寻址方式访问。前32个字节为4个通用寄存器区,接下来的16个字节既可以按字节寻址也可以按位寻址。MCU的程序存储器包含64K字节的FLASH。该存储器以512字节为一个扇区,可以在系统编程,且不需要特别的编程电压。从0 xFE00到0 xFFFF的512字节被保留,由工厂使用。还有一个位于地址0 x100000 x1007F的128字节的扇区,该扇子区可作为一个小的软件常数表使用。图2.2给出了MCU系统的存储器结构。图2.2 片内存储器组织JTAG调试和边界扫描C
27、8051F020系列具有片内JTAG边界扫描和调试电路,通过4脚JTAG接口并使用安装在最终应用系统中的产品器件就可以进行非侵入式、全速的在系统调试。该JTAG接口完全符合IEEE1149.1规范,为生产和测试提供完全的边界扫描功能。Cygnal的调试系统支持观察和修改存储器和寄存器,支持断点、观察点、堆栈指示器和单步执行。不需要额外的目标RAM、程序存储器、定时器或通信通道。在调试时所有的模拟和数字外设都正常运行,以保持同步。图2.3给出了调试环境示意图。图2.3 调试环境示意图可编程数字I/O和交叉开关该系列MCU具有标准8051的端口(0、1、2和3)。在C8051F020中有4个附加的
28、端口(4、5、6和7),因此共有64个通用端口I/O。这些端口I/O的工作情况与标准8051相似,但有一些改进。可能最独特的改进是引入了数字交叉开关。这是一个大的数字开关网络,允许将内部数字系统资源映射到P0、P1、P2和P3的端口I/O引脚(见图2.4)。具有标准复用数字I/O的微控制器不同,这种结构可支持所有的功能组合。图2.4 数字交叉开关原理框图可编程计数器阵列除了5个16位的通用计数器/定时器之外,C8051F020 MCU系列还有一个片内可编程计数器/定时器阵列(PCA)。PCA包括一个专用的16位计数器/定时器时间基准和5个可编程的捕捉/比较模块。时间基准的时钟可以是下面的6个时
29、钟源之一:系统时钟/12、系统时钟/4、定时器0溢出、外部时钟输入(ECI)、系统时钟和外部振荡器源频率/8。C8051F020还有更多的优势,需要详细了解的请参考文献9。本节主要讲了单片机的特点和C8051F020单片机实验系统的特性。C8051F020与8051完全兼容,指令采用流水线结构提高了系统速度,有可编程数字I/O和交叉开关,增加了一些功能器件,提高了C8051F020整体性能。3 液晶显示控制器KS0108KS0108是一种带有驱动输出的点阵型液晶显示控制器,它可直接与8位微处理器相连,它可与KS0107配合对液晶显示控制器进行行、列驱动,组成液晶显示驱动控制系统。3.1 KS0
30、108的特点(1).内藏6464=4096位显示RAM,RAM中每位数据对应LCD屏上一个点的亮、暗状态;(2).KS0108是列驱动器,具有64路列驱动输出;(3).KS0108读、写操作时序与68系列微处理器相符,因此它可直接与68系列微处理器接口相连;(4).KS0108的占空比为1/481/64;(5).具有专用指令集,可完成文本显示或图形显示的功能设置,以及实现画面滚动、光标、闪烁和位操作等功能;(6).KS0108可管理64KB显示RAM。其中,图形方式为64KB;字符方式为4KB。3.2 KS0108管脚 冀诚电子有限公司.KS0108液晶显示控制驱动器的应用.KS0108的管脚
31、见图3.1所示:图3.1 KS0108管脚图3.3 KS0108受控引脚KS0108的引脚功能见表1表1 引脚功能引脚符号状态引脚名称功能CS1,CS2,CS3输入芯片片选端CS1和CS2低电平选通,CS3高电平选通E输入读写使能信号在E下降沿,数据被锁存(写)入KS0108;在E高电平时,数据被读出R/W输入读写选择信号R/W=1,为读选通;R/W=0为写选通RS(也习惯叫做D/I)输入数据、指令选择信号RS=1为数据操作RS=0为写指令或读状态DB0-DB7三态数据总线RST输入复位信号低电平有效,复位信号有效时,关闭液晶显示,使显示起始终不渝行为0,RST可跟MPU相连,由MPU控制;也
32、右直接接VDD,使之不起作用。3.4 KS0108的时序43.4.1 KS0108与68系列微处理器直接接口的时序各种信号波形对照见表2:表2 信号波形MPU读时序见图3.2:图3.2 读时序MPU写时序见图3.3:图3.3 写时序3.4.2 复位时序复位后,KA0108显示关闭,显存地址归零。复位条件见表3和图3.4:表3 复位条件项目符号最小值典型值最大值单位复位时间Trs1.0微秒上升时间Tr200纳秒图3.4 复位条件3.5 KS0108显示RAM地址结构 KS0108中的显示RAM共有64行,64列,其结构见图3.5图3.5 显示RAM地址结构3.6 KS0108指令系统4KS010
33、8的指令系统比较简单,总共只有七种。现分别介绍如下:显示开/关指令见表4表4 显示开/关指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 00 0 1 1 1 1 1 1/0当DBO=1时,LCD显示RAM中的内容;DBO=0时,关闭显示。3.6.2 显示起始行(ROW)设置指令见表5表5 显示起始行指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 01 1 显示起始行(0-63)该指令设置了对应液晶屏最一行的显示RAM的行号,有规律的改变显示起始行,可以使LCD实现显示滚屏的效果。3.6.3 页(RAGE)设置指令见表6表6 页
34、设置指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 01 0 1 1 1 页号(0-7)显示RAM共64行,分8页,每页8行。列地址(Y Address)设置指令见表7表7 列地址设置指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 00 1 显示列地址(0-63)设置了页地址和列地址,就唯一确定了显示RAM中的一个单元,这样MPU就可以用读、写指令读出该单元中的内容或向该单元写进一个字节数据。读状态指令见表8表8 读状态指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB01 0BUSY 0 ON/OF
35、F REST 0 0 0 0该指令用来查询KS0108的状态,各参量含义如下:BUSY:1-内部在工作 0-正常状态ON/OFF:1-显示关闭 0-显示打开REST: 1-复位状态 0-正常状态在BUSY和REST状态时,除读状态指令外,其它指令均不对KS0108产生作用。在对KS0108操作之前要查询BUSY状态,以确定是否可以对KS0108进行操作。写数据指令见表9表9 写数据指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB00 1 写 数 据读数据指令见表10表10 读数据指令R/W RSDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB01 1 读
36、 显 示 数 据读、写数据指令每执行完一次读、写操作,列地址就自动增一,必须注意的是,进行读、写操作之前,必须有一次空读操作,紧接着再读才会读出所要读的单元中的数据。本节主要是介绍液晶显示控制器KS0108的特点、外部部分引脚功能、时序、显示RAM地址结构及指令集,为单片机液晶显示系统设计打下基础。4 图形动态显示4.1 图形点阵式液晶显示控制原理C8051F020实验板中使用的是内置液晶显示模块CGM12864B的液晶屏。CGM12864B内部没有振荡器电路,它必须由外部提供一个时序发生器作为振荡源方可工作,它由两片带有64列驱动控制器KS0108和一片带有64行驱动控制器KS0107组合而
37、成。另外还可以附加负压发生电路。显示是以一12864 个点的液晶屏显示。图形液晶显示模块KS0108将显示区分为左右半屏,整个屏从上到下64 行分为8 页,每页8 行,页地址范围为:B8HBFH。列地址范围为:40H7FH。数据为纵向读写,即每页的第一行对应D0 第八行对应D7。左、右半屏由CS1、CS2选择。控制器KS0108 的指令相对简单,总共七条指令:显示开关设定(3EH/ 3FH),显示起始行设定(C0H /FFH),页地址设定(B8H/ BFH),列地址设定(40H/ 7FH)状态读取,写数据,读数据。12864点阵式液晶模块的逻辑图见图4.14图4.1 液晶模块逻辑图4.2 液晶
38、显示模块外部接口外部接口信号见表11表11 外部接口信号管脚号管脚名称LEVER管脚功能描述1Vss0电源地2Vdd+0.5V电源电压3V0液晶显示器驱动电压4D/IH/LD/I=“H”,表示DB7DB0为显示数据D/I=“L”,表示DB7DB0为显示指令数据5R/WH/LR/W=“H”,E=“H”数据被读到DB0DB7R/W=“H”,E=“HL”数据被写到IR或DR6EH/LR/W=“L”,E信号下降沿锁存DB7DB0R/W=“H”,E=“H”DDRAM数据读到DB7DB07DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L
39、数据线13DB6H/L数据线14DB7H/L数据线15CS1H/LH:选择芯片(右半屏)信号16CS2H/LH:选择芯片(左半屏)信号17RSTH/L复位信号,低电平复位18Vee-10VLCD驱动负电压19LED-LED背光板电源20LED+-LED背光板电源12864A接口定义及其与C8051F020的接口电路图见图4.2图4.2 接口电路KS0108采用8位数据传送,间接控制方式。所谓间接控制方式就是通过单片机的并行接口与液晶显示模块直接连接,单片机通过对这些接口的操作,实现对液晶显示模块的控制,完成相应的显示,可以显示数字、字母、图形符号及自定义符号。使用LCD做数据显示,一旦数据写入
40、LCD,数据就会一直显示在液晶屏上,不必像数码管显示那样要定时扫描才能将数据显示,其显示效果远远超过数码管显示。4.3 图形点阵液晶显示编码规则4.3.1汉字编码规则一般地,常用点阵液晶显示模块的汉字字模是直接从中文系统汉字字库中提取的,然后经过格式上的调整和转换,可以得到欲显示的汉字字模。在毕业设计中,我用的汉字不是从字库中提取字模,而是采用了一个字模软件来取模(将图形点阵转换为计算机内部显示缓冲单元的数据)。字模软件的界面见图4.3。图4.3 字模软件界面图这个字模软件使用起来相当简单和方便。LCD显示模块显示中文字符串中,显示汉字(1616点阵)必须使用图形方式。在使用KS0108图形方
41、式时,显示缓冲区单元与显示屏的对应关系见图4.4所示。图4.4 显示缓冲区单元与显示屏的关系马忠梅,籍顺心等编著.单片机的C语言应用程序设计(第3版)M.北京:北京航空航天大学出版社,2003.11.图4.4所示的显示格式与我们的习惯正好相反,如想在显示屏上显示10010110,则须向RAM中写入01101001。这适应人们的习惯,在字模软件取模时设置“字节倒序”,字模软件在取模的参数设置见图4.5所示。1616汉字共有32个字节。这32字节存放方式见表11所示:表11 32字节存放方式1172181632图4.5 取模参数设置在取模时,须设置取模参数如图4.5所示:纵向取模、字节倒序。在对字
42、符取模时,可以根据个人需要设置不同字体和字号。不同字体和字号,取模之后得到的对应字阵的宽和高不同,但建议最好用1616字阵,这是为了在显示过程中便于控制写数据。例如:取模得到“湖”字的编码为:/*- 文字: 湖 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0 x10,0 x21,0 x86,0 x60,0 x90,0 x90,0 xFF,0 x90,0 x90,0 x00,0 xFE,0 x92,0 x92,0 xFE,0 x00,0 x00,0 x04,0 xFC,0 x03,0 x00,0 x1F,0 x10,0 x10,0 x90,0 x5F,0 x30,0
43、x0F,0 x40,0 x80,0 x7F,0 x00,0 x00在一个字符显示过程中,扫描方式是按列扫描。4.3.2 图形编码规则图形与字符的编码规则一样。但在图形取模时,要求是位图(文件的扩展名为BMP),其它类型图形无法取模。位图的大小为128*64,不能超出这个范围。例如下图(图4.6)取模后所得编码在附录:程序代码里KS0108.C部分char code sreen3中已列出。图4.6 位图图形转换为机内字模之后,跟字符显示原理一样。在图形的上下滚动上,是将显示起始行地址在显示完本屏之后增加1;在图形的左右移动上,相对而言要复杂得多:起始行地址不变,但由于液晶屏的列是由两块KS010
44、8分左、右屏控制的,必须注意左、右屏的分开控制:当在起始列在左半屏时,先从左半屏的起始列写数据,写到左半屏的第64列,然后从左半屏的第一列开始写数据直到左半屏的第64列;当起始列在右半屏时,左半屏不需要驱动,直接从起始列中减去64而得到对应右半屏的第多少列,然后从右半屏的第多少列驱动。4.4 程序流程程序流程见图4.7和图4.8初始化时钟初始化定时器0初始化IO口初始化SPIO使能比较器1使能片内参考电压使能DAC0开中断调用显示子程序开始结束 图4.7 主程序流程图 实现位图左右移动静态显示文字实现位图上下滚动静态显示位图字符从右向左移动字符从上到下移动开始 图4.8 LCD测试流程图4.5
45、 功能实现LCD初始化:void InitLCD(void)/初始化LCDchar i,j;LCD_RST=0;Delay1ms(1);LCD_RST=1;LCD_WriteCommand1(0 xc0);LCD_WriteCommand2(0 xc0);LCD_WriteCommand1(0 x3f); /开显示LCD_WriteCommand2(0 x3f);for (j=0;j8;j+) /清屏LCD_WriteCommand1(0 xB8+j); /清左半屏LCD_WriteCommand1(0 x40);for (i=0;i64;i+)LCD_WriteData1(0 x00);LC
46、D_WriteCommand2(0 xB8+j); /清右半屏LCD_WriteCommand2(0 x40);for (i=0;i64;i+)LCD_WriteData2(0 x00); 单个汉字显示:void LCD_Write_A_HZ(char x,char y,char *Dot) /显示16*16点阵汉字 char i;for (i=0;i32;i+) if (x+i%16)64)LCD_WriteCommand1(0 xB8+y+i/16);LCD_WriteCommand1(0 x40+x+i%16);LCD_WriteData1(Doti);else LCD_WriteCom
47、mand2(0 xB8+y+i/16);LCD_WriteCommand2(0 x40+x-64+i%16);LCD_WriteData2(Doti);静态显示一幅位图:void DispBmp(char *buf) /显示一幅位图 int i,j;for (j=0;j8;j+) /显示位图 LCD_WriteCommand1(0 xB8+j); LCD_WriteCommand1(0 x40);for (i=0;i64;i+)LCD_WriteData1(buf(j*2)*64+i); LCD_WriteCommand2(0 xB8+j);LCD_WriteCommand2(0 x40);f
48、or (i=0;i64;i+)LCD_WriteData2(buf(j*2+1)*64+i);位图上下滚动实现:Void DispBmp_Roll(char *buf)char *Buffer; int i; Buffer=buf; DispBmp(Buffer);for (i=0;i64;i+)Delay1ms(50); LCD_WriteCommand1(0 xc0+i%64);/设置起始行,实现向上滚动 LCD_WriteCommand2(0 xc0+i%64); 位图从左到右移动实现:void DispBmp_Move(char *buf) /左右移动一幅位图 int line,lin
49、e0,row,eight; /显示位图 for (row=0;row128;row+) Delay1ms(50); for (eight=0;eight8;eight+) if (row64) LCD_WriteCommand1(0 xB8+eight); LCD_WriteCommand1(0 x40+row); for (line=0;line+row64;line+) LCD_WriteData1(buf(eight*2)*64+line); LCD_WriteCommand2(0 xB8+eight); LCD_WriteCommand2(0 x40); for (line0=0;li
50、ne0+row64;line0+) LCD_WriteData2(buf(eight*2)*64+line+line0); else LCD_WriteCommand2(0 xB8+eight); LCD_WriteCommand2(0 x40+row-64); for (line0=0;line0+row-64 1. 在.h/.cpp的开头应有一段格式统一的说明,内容包括: a. 文件名 (FileName); b. 创建人 (Creater); c. 文件创建时间 (Date); d. 简短说明文件功能、用途 (Comment)。好习惯 2. 除非极其简单,否则对函数应有注释说明。内容包括
51、:功能、入口/出口参数,必要 时还可有备注或补充说明。还是好习惯 3. 每列代码的长度推荐为 80列,最长不得超过120列;折行以对齐为准。太宽了,我的限制是60列,因为文本方式下屏幕一共80列,如果你用BC这一类的编辑器,窗口边框等又要占据一定空间,所以80列太宽 4. 循环、分支代码,判断条件与执行代码不得在同一行上。很对 5. 指针的定义,* 号既可以紧接类型,也可以在变量名之前。 例:可写做:int*pnsize; 也可写做:int*pnsize; 但不得写做:int*pnsize;建议采用第二种,除非附加另外一条规定:一次只声明一个变量,否则就会让人混淆,比如:int* a, b;看
52、起来b好像也是个指针,其实不是。 6. 在类的成员函数内调用非成员函数时,在非成员函数名前必须加上:。这一条我倒觉得并不是必需的,我的看法是决不要让你的类成员函数和全局函数的名称相同(或类似) 7. 函数入口参数有缺省值时,应注释说明。 例:BOOL CWpsDib:PaintDIB(CDC* pDC, CRect& rc,int nBrightness, file:/*=0*/BOOL bGrayScale file:/*=FALSE*/ )每个变量写一行,必要时加上/*in, out*/注释 8. elseif 必须写在一行。应该尽量避免else if这样的结构 9. 与、有关的各项规定:
53、9.1、应独占一行。在该行内可有注释。 9.2 必须另起一行, 之后的代码必须缩进一个Tab。与必须在同 一列上。 9.3 在循环、分支之后若只有一行代码,虽然可省略、,但不推荐这么 做。若省略后可能引起歧义,则必须加上、。持保留意见,因为GNU的代码规范是这样的:if ( NULL = ptr )/ do something here或者if ( NULL = ptr ) / do something here争论哪个更好并没有意义,关键是统一,如果用VC当然你的办法最方便,可是如果你用emacs或者vi,就不是这样了。 10. 与空格有关的各项规定。 10.1 在所有两目、三目运算符的两边
54、都必须有空格。在单目运算符两端不必空格。但 在、:、.、等运算符前后,及&(取地址)、* (取值)等运算符之后不得有空格。 10.2for、while、if 等关键词之后应有1个空格,再接(,之后无空格;在结尾 的)前不得有空格。我认为在括号两端加空格并不是什么错误,尤其是在一个条件十分复杂的if语句里 10.3 调用函数、宏时,(、)前后不得有空格。 10.4类型强制转换时,()前后不得有空格同上 11. 与缩进有关的各项规定 11.1 缩进以 Tab 为单位。1 个 Tab 为 4 个空格我认为这个值应该更大,我自己使用8个空格,如果你的代码因为缩进幅度太大而导致折行,那么几乎可以肯定你的
55、程序设计方案有问题。 11.2 下列情况,代码缩进一个 Tab: 1. 函数体相对函数名及、。 2. if、else、for、while、do 等之后的代码。 3. 一行之内写不下,折行之后的代码,应在合理的位置进行折行。若有 + - * / 等运 算符,则运算符应在上一行末尾,而不应在下一行的行首。这一条我反对,运算符应该放在下一行行首,以使人能清楚的知道这一行是续上一行的,比如if ( something& somethingelse& otherthings )如果写做if ( something &somethingelse &otherthings )反而看不清楚 11.3 下列情况
56、,不必缩进:switch 之后的 case、default。编程规范与范例目 录1 排版 62 注释 113 标识符命名 184 可读性 205 变量、结构 226 函数、过程 287 可测性 368 程序效率 409 质量保证 4410 代码编辑、编译、审查 5011 代码测试、维护 5212 宏 53 1 排版1-1:程序块要采用缩进风格编写,缩进的空格数为4个。说明:对于由开发工具自动生成的代码可以有不一致。1-2:相对独立的程序块之间、变量说明之后必须加空行。示例:如下例子不符合规范。if (!valid_ni(ni) . / program coderepssn_ind = ssn_
57、dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;应如下书写if (!valid_ni(ni) . / program coderepssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;1-3:较长的语句(80字符)要分成多行书写,长表达式要在低优先级操作符处划分新行,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。示例:perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN + STAT
58、_SIZE_PER_FRAM * sizeof( _UL );act_task_tableframe_id * STAT_TASK_CHECK_NUMBER + index.occupied = stat_poiindex.occupied;act_task_tabletaskno.duration_true_or_false = SYS_get_sccp_statistic_state( stat_item );report_or_not_flag = (taskno MAX_ACT_TASK_NUMBER) & (n7stat_stat_item_valid (stat_item) & (
59、act_task_tabletaskno.result_data != 0); 1-4:循环、判断等语句中若有较长的表达式或语句,则要进行适应的划分,长表达式要在低优先级操作符处划分新行,操作符放在新行之首。示例:if (taskno max_act_task_number) & (n7stat_stat_item_valid (stat_item) . / program codefor (i = 0, j = 0; (i BufferKeywordword_index.word_length) & (j NewKeyword.word_length); i+, j+) . / progra
60、m codefor (i = 0, j = 0; (i first_word_length) & (j ),后不应加空格。说明:采用这种松散方式编写代码的目的是使代码更加清晰。由于留空格所产生的清晰性是相对的,所以,在已经非常清晰的语句中没有必要再留空格,如果语句已足够清晰则括号内侧(即左括号后面和右括号前面)不需要加空格,多重括号间不必加空格,因为在C/C+语言中括号已经是最清晰的标志了。在长语句中,如果需要加的空格非常多,那么应该保持整体清晰,而在局部不加空格。给操作符留空格时不要连续留两个以上空格。示例:(1) 逗号、分号只在后面加空格。int a, b, c; (2)比较操作符, 赋值
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆财经学院《数字资产管理》2022-2023学年第一学期期末试卷
- 重庆财经学院《面向对象数据库网页实践》2022-2023学年期末试卷
- 茶农茶叶销售问题研究报告
- 苍耳精油提取工艺研究报告
- 重庆财经学院《电子商务运营》2022-2023学年第一学期期末试卷
- 重庆财经学院《大数据平台核心技术》2022-2023学年期末试卷
- 仲恺农业工程学院《运动控制系统》2023-2024学年期末试卷
- 璧山预制水泥涵管施工方案
- 玻璃幕墙店招施工方案
- 炒股工作室管理方案
- 公安笔录模板之询问嫌疑人(书面传唤治安案件)
- 小学作文假如我是(课堂PPT)
- 混凝土配合比检测报告
- 高等学校英语应用能力考试B级真题作文及参考范文
- 鄂尔多斯盆地地层划分表
- 重要医疗器械经营质量管理制度及目录、工作程序
- CT报告单模板精编版
- 全国重点文物保护单位保护项目安防消防防雷计划书
- 学校食堂家长陪餐制度
- 《梯形的面积》(课堂PPT)
- 肾内科疾病诊疗常规
评论
0/150
提交评论