基于单片机的LCD驱动程序设计_第1页
基于单片机的LCD驱动程序设计_第2页
基于单片机的LCD驱动程序设计_第3页
基于单片机的LCD驱动程序设计_第4页
基于单片机的LCD驱动程序设计_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、毕业论文(设计)GRADUATIONTHESIS(DESIGN)论文(设计)题目Title Of Thesis(Design)基于单片机的LCD驱动程序设计 分院(系别)Department 信息与电子工程学院 专业Speciality 电子信息工程 基于单片机的LCD驱动程序设计英文题目2010年 5 月 7 日May 7th, 2010指导教师对毕业论文(设计)的评语Advisors Comments on Graduation Thesis (Design)评语: 指导教师(签章)Signature of Advisor 日期 Date评阅人意见评阅人姓名:职称:选项标准: A很同意 B

2、同意 C基本同意 D不同意分项评价评价项目ABCD选题质量1选题符合专业培养目标,体现综合训练基本要求2题目难易适度3题目工作量适当4有理论意义或实际价值能力水平5查阅文献资料能力强6综合运用知识能力强7研究方案的设计能力强8研究方法和手段的运用能力强9外文应用能力强成果质量10文题相符11写作水平高12写作规范13篇幅适度14成果有理论或实际价值总体评价: 优 良 中 及格 不及格 评阅人评语 评阅人签字: 年 月 日答辩(评审)委员会意见Appraisal of Defence Commission答辩(评审)成绩Mark of Defence鉴定意见Appraisal & Com

3、ments主任(签章)Signature of Dean 日期Date 基于单片机的LCD驱动程序设计摘要 本文用单片机驱动液晶显示器YM12864R实现多种显示功能。首先,进行系统分析,介绍液晶显示器的分类以及系统功能。其次,进行系统总体设计,描述液晶显示器YM12864R的功能和特性。然后,进行系统详细设计,重点讲解实现LCD显示功能的串口通讯和编程算法。最后,借助uVision软件进行编程实践,对软硬件调试过程中遇到的问题提出解决方案。液晶显示器显示内容包含:显示汉字、字符、图形和图像;显示字符移动动画;显示指定位置的点、线、矩形、圆;关键字 点阵液晶显示屏 驱动程序 汉字显示 字符显示

4、 点阵图像显示 图形绘制 A design about the LCD driver programming based on SCMAbstractMany functions of displayhave been made sucsessfully using singlechip to drive the LCD screen of YM12864R in this thesis.Firstly,do system analysis. We introduces the classification of LCD and the fuction of this system.Secon

5、dly,do the overall design.the function and characteristic of YM12864R is introduced.Then ,do the detailed design.We describe the serial data transfer and algorithm of the program for the display of lcd screen particularly.Finally,programs are developed using the software of uVision .We also propose

6、solutions for the problems encountered during commissioning the software and hardware.The contents we want the LCD to display as follows:Display Chinese characters、chars、graphics and the image of the dot matrix;Display the cartoon of chars moving;Display point, line, rectangle, circle at the appoint

7、ed location;KeywordsLiquid Crystal Display screen of dot matri;Lcd driver programming; Chars display; Image of dot matrix display; Graph drawing目录引言1第一章绪论21.1研究背景21.2研究现状和发展趋势21.3本文结构内容安排3第二章系统分析42.1系统概述42.2系统功能42.3系统设计原则5第三章系统总体设计63.1ST89C52RC单片机简介6功能概述6选型优缺点分析63.2液晶显示YM12864R简介7模块概述7模块引脚说明7串行通讯8部分

8、指令集8显示坐标关系93.3单片机驱动显示屏概述9串并连接和复位引脚10数据口和同步时钟10第四章系统详细设计114.1硬件电路设计114.2单片机与显示模块通讯的基本构架11串行数据传输11显示模块初始化124.3显示目标任务流程设计12文本显示12绘图显示13窗口概念14全屏的点映射到数组15绘点、直线、矩形和圆15动态窗口17可视化窗口18可视化窗口显示直线19第五章系统实现215.1uVision编程软件21创建工程和基本的参数设置21硬件仿真215.2STC-ISP程序下载编程烧录软件215.3系统调试22显示屏驱动电压设置22全屏字符移动22可视化窗口235.4系统测试23显示字库

9、内容23非字库汉字显示23点阵图像显示24窗口内绘制线、矩形和圆形24窗口移动显示图像25字符移动动画显示25结论26致谢语28参考文献29引言液晶显示是通过液晶和彩色过滤器过滤光源,在平面面板上产生图像的一种显示技术,液晶显示技术被广泛的应用于便携式电子产品中。为了满足用户的需求,LCD生产厂家研制和生产了各种性能和规格的LCD显示模块,厂家把显示器和显示屏集成在一个模块上,用户只要把模块上的LCD控制器接口和微处理器简单连接,并按不同LCD控制器的指令系统编写驱动程序,即可完成系统显示功能。液晶显示器分为内嵌字库和不带字库的显示器。显示字库中没有的内容,可以满足我们的特定要求,灵活运用驱动

10、程序编制自己的字库,这样可以显示一般字库没有的文字、图形甚至图片,使显示的内容更加丰富而多样化。在很多情况下,我们只需显示简单的汉字、图形,不必选择带字库的屏,这时自制驱动程序就很有意义。点阵图形液晶显示模块的特点是点阵像素连续排列,行和列在排列中没有间隔。因此可以显示连续、完整的图形。由于它也是由点阵像素构成的,所以除显示图形外,还可以显示字符。用软件驱动程序驱动点阵图形液晶显示器可以实现多种功能:清屏、显示西文字符、显示汉字、显示图形、图像;运用取模工具,按照个人意愿显示不同字体的汉字、显示字库中没有的图形,显示点阵图像;并自制绘点程序,基于绘点实现绘直线、矩形框、实心矩形、圆形、实心圆;

11、制作整屏移动西文字符;实现整屏图像动态显示。第一章 绪 论1.1 研究背景1888年澳洲植物学家F. Reinitzer首先发现液态晶体(Liquid crystals)或称结晶液体(Crystalline liquids)(简称液晶)的存在,并开启之后相关的基础研究与发展1。1968年美国RCA公司科学家G. H. Heilmeier根据动态散射(Dynamic scattering)效应,将液晶做成显示器,液晶显示器(Liquid crystal display, LCD)产业开始成形。虽然美国企业是LCD技术的原始推动者,但日本却是最先将此技术商品化的国家。1973年,日本Sharp公司

12、成功开发出以LCD为显示面板的计算器与手表,并带动许多厂商(如Hitachi、NEC、Toshiba等)加入LCD产品开发生产行列。1995年,韩国厂商进入TFT (Thin film transistor) LCD生产,延续其在半导体产业的发展经验,于90年代底迅速达到超越市场占有率30%,并取代日本成为此产业的领先者。而同时在这时候,台湾也掀起一股TFT-LCD投资热潮,短短四、五年间有七家平均投资金额为新台币250亿元之TFT-LCD新厂设立。1993年,在日本掌握TFT-LCD的生产技术后,液晶显示器开始向两个方向发展:一方向是朝着价格低、成本低的STN-LCD显示器方向发展,随后又推

13、出了DSTN-LCD(双层超扭曲阵列);而另一方向却朝高质量的薄膜式电晶体TFT-LCD发展。尽管在当时TFT相对于DSTN具有极大的优势,但是由于技术上的问题,TFT LCD在响应时间、亮度及可视角度上与传统的CRT显示器还有很大的差距,加上极低的成品率导致其高昂的价格,使得桌面型的TFT LCD成为遥不可及的尤物。不过,随着技术的不断发展,良品率不断提高,加上一些新技术的出现,使得TFT LCD在响应时间、对比度、亮度、可视角度方面有了很大的进步,拉近了与传统CRT显示器的差距。日本在1997年开发了一批以550×670mm为代表的大基板尺寸第三代TFT-LCD生产线,并使199

14、8年大尺寸的LCD显示屏的价格比1997年下降了一半。1996年以后,韩国和中国台湾都投巨资建第三代的TFT-LCD生产线,准备在1999年以后与日本竞争。从TFT生产线的规格发展来看,从第一代生产线发展到第三代生产线,经历了约10年左右的时间,从第三代发展到第四代也用了约4年时间,而在业界第四代生产线刚刚稳定批量生产之时,业界就提出并投资建设了第五代生产线,六代甚至七代生产线也已经在面板厂的规划之中了1。目前日本已经完全放弃了三代线的投产,全部转向四代线,夏普等厂商甚至跳过五代线打算直接投产六代线,争取在大屏幕的领域取得先机。1.2 研究现状和发展趋势点阵图形方式LCD以其显示汉字与曲线的优

15、势,摆脱了对控制器设计、加工、制作等一系列工作。高科技含量LCD强调人机界面的直观形象,在菜单方式下进行人机交互。现今更多厂商对LCD外观重视,华硕和明基是国内显示市场的领头羊,华硕MS246H以其独特巧妙设计以及奢华精湛的做工获“2009年中国IF设计大奖”,明基V2400Eco围绕绿色环保和不对称的巧妙外观设计3。2009年的国际显示市场,“响应时间”和“动态对比度”已不再是焦点,而“LED”和“广视角”取而代之,成为消费者在现实性能方面新的关注点。日本已研制特殊膜提高视角范围,采用新的合成技术(多硅薄膜晶体管)满足高速显示要求,将驱动器直接制作在显示平板上以取代外部驱动电路及减少外部连线

16、数研制金属绝缘金属技术,以实现较高的性价比优势。此外,液晶显示器的色彩调校。一直不尽如人意,这是因为LCD的色彩调校要考虑到环境光源和液晶显示器的属性,再加上液晶显示器的可视角度狭窄,要同时调整出一个最佳的观看角度和色彩正确性就非常不容易。目前市面上还没有专为桌面型液晶显示器所设计的色彩调校软件,不过相信未来,将会有更多的厂商重视液晶显示器的色彩调校。1.3 本文结构内容安排本文正文内容安排如下:第二章系统分析,明确要完成的显示任务,详细分析过程主要包括系统概述,系统功能和系统设计原则。第三章系统总体设计,根据系统分析所得出的单片机驱动LCD显示系统,对其进行模块设计,对选择的51单片机ST8

17、9C52RC和液晶显示模块YM12864R的功能简介。进行基本的连线设计。第四章系统详细设计,主要分三个方面来进行总体设计:硬件电路设计;单片机与显示模块通讯的基本构架;汉字字符显示模块、图像模块、点模块,线模块、图形模块、动态模块的算法设计。第五章系统实现。借助程序下载烧录软件和系统编程软件实现软硬件调试,最终实现显示任务。另外还要对点阵取模工具功能和用法做简要说明。并陈述设计过程中遇到的问题和解决办法。第二章 系统分析本章对单片机驱动液晶显示器系统进行分析,明确要完成的显示任务,详细分析过程主要包括系统概述,系统功能和系统设计原则。2.1 系统概述液晶显示器按驱动方式不同分为静态驱动、单纯

18、矩阵驱动以及主动矩阵驱动3种。其中,被动矩阵型又可分为扭转式向列型、超扭转式向列型及其他被动矩阵驱动液晶显示器,主动矩阵型可分为薄膜式晶体管型和二端子二极管型。按控制电路,图形液晶显示模块可分为行、列驱动型,行、列驱动控制型,行列控制型。按显示器件结构,图形液晶显示模块可分为TN、STN、TFT三种;每一种又有常温、宽温、有背光和无背光以及颜色模式之分1。液晶显示模块从结构上分类,可分为字符型和点阵型液晶显示模块两种类型。字符型液晶显示模块是由点阵字符液晶显示器件和专用的行、列驱动器、控制器及必要的连接件,结构件装配而成的,可以显示数字和西文字符。这种点阵字符模块本身具有字符发生器,显示容量大

19、,功能丰富。点阵图形液晶显示模块特点是点阵像素连续排列,行和列在排列中没有间隔。因为可以显示连续、完整的图形。由于它也是由点阵像素构成的,所以除显示图形外,还可以显示字符。设计中显示点阵图形,需要选择点阵图形液晶显示模块。从控制电路角度介绍点阵液晶显示模块的类别和它们的不同。行列驱动型是一种必须外接专用控制器的模块,该模块只装配有通用的行、列驱动器;行列驱动控制型是一种可以直接与计算机接口,依靠计算机直接控制驱动器的模块;行、列控制型是一种内藏控制器型的点阵图形模块,这种模块不仅装行、列驱动器,而且也装配有专用控制器,这种控制器是液晶驱动器与计算机的接口,它以最简单的方式受控于计算机,接受并反

20、馈计算机的各种信息,经过自己独立的信息处理实现对显示缓冲区的管理,并向驱动器提供所需要的各种信号、脉冲,操纵驱动器实现模块的显示功能。2.2 系统功能在单片机设计系统中,对每个用户的需求,都必须有相应的用户程序去完成用户功能要求。就用户程序而言,一般都由用户开发完成。高级语言功能强,且比较近似于人们日常生活用语习惯,因此比较容易用它编写用户程序。选择串口通讯方式,只用简单的几根线就可以实现驱动任务,不只可以用51单片机来驱动,改变很少接口设置,就可以用别的单片机来驱动,程序可移植性很强。本设计要完成的显示内容如下:显示屏是带字库的,编程实现字库中汉字(宋体16X16)、字符(8X16)、和特殊

21、符号(如:笑脸、五角星等);显示自造字(火星文、楷体、黑体等)和自造图形(圆环、笑脸、十字、墙壁);显示整屏字符移动动画;用图片取模工具取点阵数据,显示整屏图像;绘制显示屏任意点;绘制直线、矩形框、圆形、填充矩形和填充圆形;创建显示窗口,在窗口内显示规定位置的点、线、矩形、圆;窗口动态实现画面卷动效果;全屏点阵显示直线、矩形、圆及椭圆和圆角矩形。2.3 系统设计原则1.实现用户功能上的需求,用户的需求是系统设计的依据,用户在功能上的需求必须予以实现,系统设计首先要明确的是设计的任务,本文为显示屏要的内容。2.系统的操作性能要好且便于实现,对嵌入式系统来说,与通用型计算机一样,希望人机界面友好、

22、操作方便,从使用者的角度来说,系统的操作使用越简单越好。3低成本、低功耗,使系统具有尽可能高的性价比,这是每一个设计者所追求的目标。4.可靠性高,系统应用于工业企业的现场,一旦出现故障,有可能使整个生产过程混乱,甚至产生更严重的后果,可靠性是系统设计最重要、最突出的基本要求。5.通用性好且便于扩展,当某一个系统设计好投入使用后,若遇到后续的类似系统,则可在前面系统设计的基础上增加和减少某些部件,构成新的系统。第三章 系统总体设计根据系统分析所得出的单片机驱动LCD显示系统,对其进行模块设计,对选择的51单片机ST89C52RC和液晶显示模块YM12864R的功能简介。进行基本的连线设计。3.1

23、 ST89C52RC单片机简介简单介绍ST89C52RC单片机的引脚,主要对用到的P1口介绍,对单片机内存空间做简略说明,为写驱动程序时,程序存储区存放点阵图片数据数组和数据区存放屏幕点映射数组奠定基础。并分析选择51系列单片机的优缺点。3.1.1 功能概述ST89C52RC是与MCS-51单片机产品兼容的芯片,有32个可编程I/O口线。P0 口:P0口是一个8位漏极开路的双向I/O口,用于传输低8位地址,当访问外部程序和数据存储器时, P0口也被作为低8位地址/数据复用;P2 口:P2 口是一个具有内部上拉电阻的 8 位双向 I/O 口,在访问外部程序存储器或用16位地址读取外部数据存储器时

24、,P2 口送出高八位地址;P3 口:P3 口是一个具有内部上拉电阻的 8 位双向 I/O 口,用于双向传输数据,P3口亦作为特殊功能(第二功能)使用;RST: 复位输入,晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位;P1口:P1 口是一个具有内部上拉电阻的 8 位双向 I/O 口,p1 输出缓冲器能驱动 4 个TTL 逻辑电平,对 P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用,作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。ST89C52RC具有以下标准的内存空间:8k字节Flash, 256字节RAM,2k字节的ROM。设计中在

25、数据存储区主要用于存放动态变量和屏幕点映射的数组,用户程序存储区用于存放程序和点阵图像数组。工作电压:5.5V 3.4V(5V 单片机)。5V单片机频率080MHZ,选用晶振频率11.0592MHZ。3.1.2 选型优缺点分析ST89C52RC是一种低功耗、高性能CMOS8位微控制器,使用 Atmel 公司高密度非易失性存储器技术制造,与工业 80C51 产品指令和引脚完全兼容3。在单芯片上,拥有灵巧的 8 位 CPU 和在系统可编程Flash使得ST89C52RC为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。该系列产品种类多,兼容性强(外部引线、内部结构、指令系统),在低端应用中还会

26、应用很长时间。接口复用少,片上集成度比较低,这样控制起来灵活,便于理解。另外大学课程安排的是8051单片机。以上为我选择芯片的优势。在较为复杂的系统中,不宜选用本系列芯片,ST89C52RC运算速度一般,存储容量小,造成对显示屏上所有点做数组映射时出现问题。3.2 液晶显示YM12864R简介对显示模块引脚进行说明,重点描述串口通讯引脚和通讯方式。简单介绍设计中用到的指令系统。深入探讨显示屏地址定义方式,并对这种定义方式如何实现数据传输来达到我们显示效果进行详细阐述,并对地址分配方式优缺点进行分析。3.2.1 模块概述YM12864R点阵液晶显示模块,可显示汉字及图形,内置8192个中文汉字(

27、16X16点阵)、128个字符(8X16点阵)及64X256点阵显示RAM(GDRAM)。主要技术参数和显示特性:电源: VDD 3.3V+5V ( 内置升压电路,无需负压 ) ;显示内容: 128 列 × 64 行;LCD 类型: STN;与 MCU 接口: 8 位或 4 位并行 /3 位串行。3.2.2 模块引脚说明表2.1YM12864R引脚说明一览表引脚号引脚名称方向功能说明1VSS模块的电源地2VDD模块的电源正端3V0LCD驱动电压输入端4RS(CS)H/L并行的指令、数据选择信号;串行的片选信号5R/W(SID)H/L并行的读/写选择信号;串行的数据口6E(CLK)H/

28、L并行的片选信号;串行同步时钟信号714DB0DB7H/L并行数据口15PSBH/L并串口接口选择:H并行,L串行16NC空脚17/RETH/L复位 低电平有效18NC空脚19LED_A背光源正极20LED_K背光源负极3.2.3 串行通讯图2.1串行通讯时序3.2.4 部分指令集指令是实现驱动的基础,显示模块的用户指令集包括基本指令集和扩展指令集2,本节简单介绍设计过程中用到的指令。1、 清楚显示(01H)CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLLLLLLH功能:清楚显示屏幕,把DDRAM位地址计数器调整为“00H”2、 显示状态开/关CODE: RWRS

29、DB7DB6DB5DB4DB3DB2DB1DB0LLLLLLHDCB功能: D=1:整体显示ONC=1:游标ONB=1:游标位置ON3、 功能设定CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLHDLX0 REXX功能:DL=1(必须设为1)RE=1:扩展指令集动作RE=0:基本指令集动作4、 设定CGRAM位址CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLHAC5AC4AC3AC2AC1AC0功能:设定CGRAM位址到位址计数器(AC)5、 设定DDRAM位址CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLHAC

30、6AC5AC4AC3AC2AC1AC0功能:设定DDRAM位址到位址计数器(AC)6、 读取忙碌状态(BF)和位址CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LHBFAC6AC5AC4AC3AC2AC1AC0功能:读取忙碌状态(BF)可确认内部动作是否完成,可以读出位址计数器AC值7、 扩充功能设定CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLLHHX1 REGL功能:G=1:绘图显示ONG=0:绘图显示OFF8、 设定绘图RAM位址CODE: RWRSDB7DB6DB5DB4DB3DB2DB1DB0LLLHAC5AC4AC3AC2AC1AC

31、0功能:设定GDRAM位址到位址计数器(AC)3.2.5 显示坐标关系图形图像显示坐标:水平方向X以字节为单位;垂直方向Y以位为单位。汉字显示坐标:表2.2汉字坐标关系一览表X坐标Line180H81H82H83H84H85H86H87HLine290H91H92H93H94H95H96H97HLine388H89H8AH8BH8CH8DH8EH8FHLine498H99H9AH9BH9CH9DH9EH9FH3.3 单片机驱动显示屏概述设计采用串口通讯方式,通过显示模块数据口SID和同步时钟CLK实现数据传输,单片机芯片可以用普通的I/O口。控制芯片外接一个模块时,可以把片选信号CS接高电平,

32、但设计中为了对外接显示屏进行忙检测,忙时不向显示模块传输数据,因此把片选接到P1.0来编程实现。3.3.1 串并连接和复位引脚选择串行通讯方式,需要使PSB口始终维持高电平,这里采用P1.3,通过I/O口控制电平的方式。此接口写入一次数据(低电平或高电平),直到下一次再次写入数据是才才有可能改变,不受复位的控制,把它接通用I/O口比较合理。串口用线少,采用连线方式时,受线路影响较小,显示较稳定,但并行通讯可以一次传八位数据,通讯快,编程方便,需要传大量数据或对显示刷新频率要求很高的情况下,并行通讯很占优势。不直接接高电平或接低电平,可以在必要的时候实现串并转换驱动显示模块工作。复位引脚低电平有

33、效,把RST接I/O口,用于实现显示屏软件复位,设计中在显示屏初始化时采用软件复位,区别于对控制芯片复位,显示屏复位,并不改变单片机内部寄存器的值。3.3.2 数据口和同步时钟接线方式和程序设计主要依据串口通讯时序,数据口和同步时钟分别接P1.1口和P1.2口,单片机通过SID向显示屏传送指令和数据,显示屏通过SID向单片机传判忙信号。同步信号是频率很高的方波信号,时钟信号一个周期可以传输一位串口信号,时钟周期的长短直接影响到数据传输的效率。设计中将CLK接P1.2口。第四章 系统详细设计本章明确单片机驱动显示模块显示目标任务的过程。主要分三个方面来进行总体设计:硬件电路设计;单片机与显示模块

34、通讯的基本构架;汉字字符显示模块、图像模块、点模块,线模块、图形模块、动态模块的算法设计。3.4 硬件电路设计单片机驱动显示模块采用串行通讯,连线较少,硬件连接简单,串口通讯在2.3节中进行了比较详细的分析,硬件连接如下图:图4.1单片机驱动LCD连线3.5 单片机与显示模块通讯的基本构架实现控制芯片对显示模块的驱动,首先要解决的问题就是数据传输,本设计采用串行通讯方式,相应的数据传输就要符合串行通讯时序;在单片机外接模块时,要对被控对象进行初始化才能保障数据正确的传输,完成每一种显示功能的主程序过程如图4.1所示:图4.1 实现显示功能的主程序图延时初始化显示功能模块main()3.5.1

35、串行数据传输串行数据传送共分三个字节完成:第一字节:串口控制格式 11111ABC,A为数据传送方向控制:H表示数据从LCD到MCU ,L则表示数据从MCU到LCD;B为数据类型选择:H 表示数据是显示数据,L表示数据是控制指令;C固定为0;第二字节:( 并行 )8 位数据的高4位,格式为DDDD0000;第三字节:( 并行 )8 位数据的低4位,格式为0000DDDD;单片机写数据和指令到显示模块:单片机向LCD发送数据和指令,通过串口控制格式来确定。写数据到LCD时,要先传串口控制格式0x8a,接着发送两个字节,分别为数据的高四位和低四位;写指令到LCD时,要先传串口控制格式0x80,接着

36、发送两字节,分别为指令高四位和低四位。单片机读显示模块数据:单片机接收数据,主要用于忙检测,读LCD数据时,要先发送串口控制格式0xfc,接收数据跟发送数据一样,接收两个字节,分别为要接收数据的高四位和低四位,需要将接收到的高四位和第四位数据整合。3.5.2 显示模块初始化YM12864R的指令集分为基本指令集和扩充指令集,在进行汉字、字符显示时需要用到基本指令集,在做绘图时要用到扩充指令集,因此初始化要根据要完成的显示内容设计两种初始化程序,在编程时适时恰当的加入相应初始化程序,才能灵活的控制显示汉字还是绘图,来实现丰富多样的显示任务。初始化可能会用到的指令包括:清屏显示、地址归为、进入点设

37、定、显示状态、游标或显示移位控制、功能设定、反白选择、待命模式、睡眠模式2。初始化至少要包括清屏显示、进入点设定、显示状态和功能设定。3.6 显示目标任务流程设计本节重点介绍实现显示功能的算法设计,绘制各种显示模块的流程图,分为汉字和字符显示、图形显示、点显示和窗口显示、窗口移动显示和窗口移动显示整屏图片。3.6.1 文本显示文本显示 RAM(DDRAM)文本显示 RAM 提供 8 个×4行的汉字空间,当写入文本显示 RAM时,可以显示三种字型 ,分别是半宽的 HCGROM 字型、 CGRAM 字型及中文CGROM字型。三种字型的选择,由在 DDRAM 中写入的编码选择,各种字型详细

38、编码如下:显示半宽字型 :将一位字节写入DDRAM中,范围为 02H-7FH 的编码。显示 CGRAM字型:将两字节编码写入DDRAM中,总共有0000H,0002H,0004H,0006H四种编码。显示中文字型:将两字节编码写入DDRAMK,直接写汉字,实际是汉字的区位码。汉字、半宽字符显示流程如图4.2所示(假定要显示的内容编码共需要字节数n);自造字和图形流程如图4.3所示。ziku字节数i=0写入一个字节编码设定汉字和字符显示地址指定数据位置图4.2 显示字库字型返回i<n?Y自编字型函数N3.2自编字型函数lcd_cgram指定CGRAM起始地址指定每个字型之间字间距写入CGR

39、AM载入字型4个字?返回N3.2自编字型函数Y自编字型函数图4.3 自编字型函数3.6.2 绘图显示绘图显示RAM 提供128×8个字节的记忆空间,在更改绘图RAM时,先连续写入水平与垂直的坐标值,再写入两个字节的数据到绘图RAM,而地址计数器(AC)会自动加一,整个写入绘图RAM 的步骤:先将垂直坐标写入绘图 RAM 地址;再将水平坐标写入绘图 RAM 地址;将 D15D8 写入到RAM 中;将D7D0 写入到 RAM 中;显示点阵图像和点阵图形类似,流程设计如图4.4所示。3.6.3 窗口概念跟全屏绘图类似,全屏显示点阵图像要传送16*64B的数据,窗口内显示只需要传送窗口大小的

40、数据即可,设计中窗口大小设为4*32B,只向窗口所在位置传数据,窗口内可见,窗口外不可见。DisplayGraphic设定上半屏垂直和水平地址载入图像数组16字节数据i<32设定下半屏垂直和水平地址载入图像数组16字节数据i=0i=0i<32返回N3.2自编字型函数N3.2自编字型函数Y自编字型函数Y自编字型函数图4.4 点阵图像函数图4.5 中间窗口函数Display设定窗口上半屏垂直和水平地址载入窗口数组4字节数据i<16设定窗口下半屏垂直和水平地址载入窗口数组4字节数据i=0i=0i<16返回N3.2自编字型函数N3.2自编字型函数Y自编字型函数Y自编字型函数将窗

41、口内的点映射到4*32B的数组中,把数组定义在控制芯片的数据存储区,这样数组元素值就可以根据需要重新赋值,要显示的数组数据传到窗口DDRAM,引入窗口用于节省控制芯片数据存储区数据。窗口建立的流程设计根据窗口位置各不相同,但原理是一致的,第四章将在不同小节介绍不同位置的窗口显示。以屏幕中央位置的窗口为例,流程如图4.5所示;3.6.4 全屏的点映射到数组设计绘点显示部分,最先设计思想没有采用数组,而是采用每传一个字来表示一个点,每表示一个点都要传两个字节的数据,这种方法全屏任一点均能够正确显示8;用该点函数绘制图形时会出现问题,竖直线及斜率绝对值大于等于1的斜线可以正确显示,斜率绝对值小于1的

42、直线不能正确显示,尤其是水平线,只能显示断续的几个点。每次显示一个点,因每个点要用一个字的数据来表示,在同一个字中要显示的点,总是后面的把前面的给覆盖掉,在同一行要显示连续的点时就会出现错误。解决的方法就是在传入新的点之前要对它进行多个点(最多是十六个点)的或运算,这样处理起来还是很麻烦,基本上不一样情况的直线就要有不一样的处理方案。绘点造成的绘制直线、矩形和圆形的一系列后遗症,迫使我寻找新的解决办法:把全屏的每个点映射到数组,要显示的所有点就转化成对数组数据进行一系列或运算的问题,需要在数据区定义一个数组(16*64B)来映射全屏的点(128*64),例如最左上角的点(0,0),就转化成数组

43、中第一个元素0x80,要同时显示(0,0)和(1,0),就成了第一个点0x80和第二个点0x40或运算得到第一个元素0xB0,把要显示的点的信息一次性传到显示屏,既节省时间,又解决了前面的覆盖问题。3.6.5 绘点、直线、矩形和圆创建窗口,把窗口内的点映射到数组,可以实现基于点的直线、矩形和圆显示。在窗口内显示点,假定窗口起始位置为(sx,sy),“n=(x-sx)/8”计算x所属字节数,“n=(x-sx)%8”计算x在所属字节中的bit位,光标定位“k=4*(y-16)+n”,绘点流程设计如图4.6所示。Set_pot图4.6 绘点函数窗口内点?点与窗口映射数组或运算dot=dot>&

44、gt;m返回Y自编字型函数N3.2自编字型函数dot=0x80光标定位点所在字节位置绘制直线采用生成直线的DDA算法7,设起点(xs,ys)和终点(xe,ye),算法描述如下:计算需要描出的点的个数k=max(|xe-xs|,|ye-ys|);从起点开始描点,水平增量dx=xe-xs/k,竖直增量dy=ye-ys/k;对新的点加0.5后取整,来获得据这个点最近的点。具体如图4.7和图4.8所示。图4.8 斜率大于0直线图4.7 斜率小于等于0直线绘制矩形框:分别绘上、下边水平线和左、右边垂直线即可。绘制矩形面:从最上面一条水平线扫描到最下面一条水平线。绘制圆形采用生成圆的正负法7,设圆的圆心(

45、ox,oy),半径为r,圆的曲线方程为f=(x-ox)2+(y-oy)2-r2,四分之一圆弧(坐标系中第一象限)算法描述如下:以(xo,yo+r)为绘制起点,设本次绘制的点为(xi,yi);x每次加1,y在其右或右下方,即下一点为(xi+1,yi)或(xi+1,yi-1);若(xi,yi)在圆上或圆内,下一点为(xi+1,yi),否则为(xi+1,yi-1);依次画出圆弧上,用同样的方法绘制其它区域圆弧,如图4.9图4.12所示。图4.9 右下方圆弧图4.10 右上方圆弧图4.11 左下方圆弧图4.12 左上方圆弧3.6.6 动态窗口通过对窗口起始位置的改变,来实现窗口的移动,为了看到效果,设

46、计中有些部分把窗口加了边框。根据显示屏的显示坐标定义特点,采用垂直方向动态移动,窗口由原点位置向下移动,碰到边框再上移,再次碰到上边框时右移,接下来继续以上的循环,直到到达屏幕最右下角。动态窗口流程设计如图4.13所示。开始Display;y+y=0;x=x+16y<32Display;y-y>0Y自编字型函数Y自编字型函数N自编字型函数N自编字型函数x<=96x=0N自编字型函数Y自编字型函数扩充指令初始化图4.13 窗口移动主程序3.6.7 可视化窗口窗口显示图像和几何图形都是基于动态窗口实现的,在窗口每次移动(可以是1位、16位、32位)之前,先把要在对应位置显示的图片

47、的数据传到映射数组,再把数据显示在对应窗口(DDRAM),窗口走过的地方在没有清屏(DDRAM清零)情况下仍然保留图像内容。设计中为了便于观察效果,并没有采用清屏的方式,而是采用全屏置1,反白显示背景。移动过程中加入置1与否可以实现两种显示效果:既可以借助窗口显示全屏图像,也可以只在窗口内显示对应位置上的图像。两种显示流程设计分别如图4.14和图4.15所示。图4.14 动态窗口显示整屏图像开始Display;y+y=0;x=x+16y<32Y自编字型函数N自编字型函数x<=96x=0N自编字型函数Y自编字型函数扩充指令初始化图片数据映射到窗口qutu()全屏置1图4.15 窗口内

48、显示图像开始扩充指令初始化Display;y+Y<32N自编字型函数Y自编字型函数图片数据映射到窗口qutu()全屏置1y=0;x=x+16x<=96x=0N自编字型函数Y自编字型函数3.6.8 可视化窗口显示直线移动窗口可以显示整屏的图像,同样可以显示一个整屏的图形。比如绘制(0,0)到(127,63)的直线,全屏八个窗口对直线分割,在有线段的窗口显示对应数据,用每次跨过32位的窗口依次扫描全屏,显示全屏直线。显示整屏直线算法如图4.16所示,窗口分布及窗口分割给定直线示意图如图4.17所示。开始扩充指令初始化i=0有线段?n=i;i+line_ADD()显示窗口nN自编字型函数

49、Y自编字型函数i<8?图4.16 窗口内显示整屏直线Y自编字型函数N自编字型函数图4.17 窗口分割直线第五章 系统实现本设计借助uVision编程软件、STC-ISP程序下载编程烧录软件实现软件和硬件调试,最终实现显示任务。本章陈述设计过程中遇到的问题和解决办法,并对测试结果进行描述。2.4 uVision编程软件keil uVision2集成开发环境的功能相当强大,本节只简单介绍设计中用到的部分:创建工程,参数设置,编译、连接和调试,硬件仿真5。2.4.1 创建工程和基本的参数设置点击Project>New Project 选项创建一个新的工程后,选择工程存储的路径,保存好后,

50、选择CPU型号5。点击File>New 选项,保存此文件为*.c,把此文件添加到工程5。要特别注意对当前工程参数的设置,点击Project>Option for TargetTarget1,必须设置工作频率与开发板的工作频率一致(Target选项),还要设置生成HEX文件(Output选项),ISP下载程序烧录软件会找到HEX文件并下载到单片机实现硬件仿真。在新建的C文件中写入要测试的程序,然后就可以进行编译、连接和调试。2.4.2 硬件仿真通常情况下,进行硬件仿真需要对uVision仿真参数进行相应的设置,本设计选用的是STC89C52系列单片机,用专用的STC下载编程烧录软件下载到单片机即可。2.5 STC-ISP程序下载编程烧录软件STC下载编程烧录软件是支持STC89C52系列单片机的专用下载软件。首先将STC安装软件安装到电脑,或者使用非安装软件直接打开。用USB转串口线连接开发板的串口(DB9)至电脑,这里需要安装USB转串口驱动程序。连接后在设备管理器中会增加相应的COM口,打开电源会发

温馨提示

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

评论

0/150

提交评论