资源描述
毕业设计(论文)说明书摘 要LCD液晶显示已经是人机界面的关键技术。本文对基于单片机的LCD液晶显示器控制系统进行了研究。首先在绪论中介绍了本课题的课题背景、研究意义及完成的功能。本系统是以单片机的基本语言C语言来进行软件设计,51的编程语言常用的有二种,一种是汇编语言,一种是C 语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且C 语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用C 语言的开发周期通常要小于汇编语言很多。综合以上C 语言的优点,我在学习时选择了C 语言指令的执行速度快,节省存储空间。为了便于扩展和更改,软件的设计采用模块化结构,使程序设计的逻辑关系更加简洁明了。使硬件在软件的控制下协调运作。正文中首先简单描述系统硬件工作原理,且附以系统硬件设计框图,并介绍了单片机微处理器的发展史,论述了本次毕业设计所应用的各硬件接口技术和各个接口模块的功能及工作过程, 并具体描述了AT89C51 AMPIRE12864接电路接口的软、硬件调试。其次阐述了程序的流程和实现过程。本文撰写的主导思想是软、硬件相结合,以硬件为基础,来进行各功能模块的编写。最后对我所开发的用单片机实现LCD液晶显示器控制原理的设计思想和软、硬件调试作了详细的论述。关键词:单片机,微处理器,LCD,89C51,AMPIRE12864AbstractThe LCD manifestation has been the key technique of the an-machine interface. This text to basic proceeded the research in Micro Controller Unit liquid crystal display control system. Introduced the lesson a background of this lesson and study meaning and finished functions in introduction first. This system edits collected materials the language to proceed with single the basic language of a machine the software designs, the instruction carries out the speed quick, save memory. For the sake of easy to expand with the design adoption mold a logic for turning construction, making procedure designing relation that change, software more shorter and more easier to understand. Make hardware control in software descended to moderate the operation.The text inside describes the system hardware work principle in brief first, and attach with the system hardware design frame diagram, combine development history that introduced the single a machine microprocessor, discuss this graduate design a function for applied each hardware connecting a people the technique connects with each one a mold piece and work processes, combine to describe in a specific way 89C51, and the AMPIRE12864 circumscribes the electric circuit connects oscular and soft, the hardware adjusts to try. Expatiated the process of the procedure the next in order with realizes process. Develop to me finally of use the single a machine realizes the design thought that the liquid crystal display of LCD control principle with soft, the hardware adjusted to try to make the detailed treatise.Keywords:single chip microcomputer,microprocessor,LCD,89C51,AMPIRE12864 目 录1 前 言.12 系统总体设计.2电路硬件原理图32.2 软件设计方案32.3 仿真结果43 ATMEL89C51系列单片机.73.1 AT89C51单片机内部的组成结构图73.2 单片机CPU结构73.3 AT89C51用户系统 83.4 引脚介绍:93.5 89C51内部特殊寄存器介绍143.5 .1 IE;中断允许寄存器143.5 .2 定时器/计数器控制寄存器TCON153.5 .3 中断优先寄存器-IP163.4 .4 中断的响应过程173.5 .5 电源控制寄存器PCON183.5.6 定时器/计数器工作方式194 LCD芯片.2241 LCD接口2242 指令描述2343 接口时序说明265 系统软件设计.285.1 系统流程图285.2 汉字和图形字模提取295.3 汉字图形显示函数315.4 单片机播放音乐并同步显示歌词336 系统仿真PROTEUS和编译KEILC软件.37 Proteus ISIS仿真系统基本知识376.1.1 系统概述376.1.2 进入Proteus ISIS386.1.3 Proteus工作界面及窗口说明38 Proteus绘图流程举例416.2 KEIL Cx51软件的使用426.2.1 创建项目436.2.2 为项目新建文件44 45致 谢.47参考文献.48附录 部分程序代码.49601 前 言当今是一个信息化的时代,信息的重要性是不言而喻的,获取手段显得尤其重要。人们所接受的信息有70%来自于人的视觉,无论用何种方式获取的信息最终需要有某种显示方式来表示。在各种显示技术中,以液晶显示器LCD(Liquid Crystal Display)为代表的平板显示器发展最快、应用最广。LCD是典型的光电器件,它以材料科学为基础,综合利用了精密机械、光电及计算机技术,并正在微机械、微光学、纤维光学等前沿领域研究基础上,向高集成化、智能化方向发展。液晶显示模块(LCM即Liquid Crystal Display Module)是将液晶显示器件(LCD)、连接件、控制、驱动电路和PCB电路板、背光源、结构件装配在一起的组件。由于点阵型液晶显示器的引线众多,用户使用极不方便,所以制造商将点阵型液晶显示器件和驱动器做在一块板子上成套出售,这种产品称为液晶显示模块或模组。液晶显示技术的普及应用和发展,给仪器、设备的小型化及智能化带来了光辉的前景,特别是点阵图形式液晶显示模块,它具有体积小、重量轻、低电压、底功耗之优点,因而在显示内容和显示功能等方面表现出了独特的性能。由于液晶显示器已成为日常工作和生活中各种显示仪器、仪表、和袖珍电子产品的重要组成部分,因此对于点阵图形液晶显示器件(模块)的开发、设计、应用和研究具有重要意义。该设计是基于LCD的广泛应用,用AT89C51为控制中心,以键盘为输入设备,用LCD为显示器,实现了汉字和图片的显示以及播放音乐并同步显示歌词等功能。2 系统总体设计因为点阵图形式液晶显示模块具有体积小、重量轻、低电压、底功耗之优点,所以在显示内容和显示功能等方面表现出了独特的性能。本设计要求实现显示文字、图片、动画、播放音乐等功能。本设计选择AT89C51为核心控制元件,以AMPIRE12864LCD为显示元件,以喇叭为音频输出,用五个按键作为输入元器件,设计制作了一个日常生活中用到的LCD显示系统。当启动单片机时,会出现一个菜单界面,选择菜单后进入菜单选项,按照提示可以选择各个功能模块,各个功能运行完毕后会自动转入主界面,等待用户进一步选择其它功能模块。由于这是对现实生活中应用的一种模拟,要达到实际的需要应用到生产领域,还有很大的距离,所以在系统的设计过程中避免不了遗漏一些问题,这是在所难免的,但是该系统经过实践证明运行稳定,各个功能均得以实现,基本上达到了设计的要求。各个功能模块介绍:(1) 菜单界面。(2) 动感汉字显示、-学校简介。(3) Flash动画显示-熊猫吃竹子。(4) 播放音乐并且能同步显示歌词-挥着翅膀的女孩。主要元器件:AT89C51、AMPIRE12864LCD、喇叭、按键、开关、电容、电阻若干 。用到的主要软件:仿真软件Proteus、编译软件Keil uVision2、字模提取软件图像处理软件2.1 电路硬件原理图 如图2-1所示。图2-1电路硬件原理图2.2 软件设计方案 用仿真软件Proteus按照实现的功能原理画出原理图如上图所示,P1.0P1.7分别接AMPIRE12864的DB0DB7数据端口P2.0接LCD的读写使能端E, P2.1接LCD的读写端口R/W, P2.2接数据命令选择口RS,P2.3接片选信号CS2 P2.4接片选信号CS1,P3.7接扬声器,按键BO、B1、B2、B3、B4分别接P3.6 、P3.4 、P3.0 、P3.1、P3.3 ;XTAL1、XTAL2接震荡电路,RST接复位电路,EA接高电平,LCD上的VO、RST接电源+5V,GND接地。用图像处理软件把用到的图片转换成黑白并且扩展名为bmp格式,再用字模提取软件提取图片及汉字的十六进制点阵,用编译软件Keil uVision2编辑C源程序,经过编译连接生成十六进制文件,把生成的十六进制文件加载在仿真软件Proteus里面就可一进行仿真了。2.3 仿真结果 (1) 主界面:如图2-2所示。图2-2 主界面(2) 菜单选择界面:如图2-3所示。图2-3 菜单选择界面(3 ) 动感汉字显示、-学校简介:如图2-4所示。图2-4 动感字显示(4) Flash动画显示-熊猫吃竹子部分帧:如图2-5、如图2-6所示。图2-5 Flash动画一帧图2-6 Flash动画一帧(5) 图片显示 -小女孩 其中一张:如图2-7所示。图2-7 图片显示(6) 音乐播放并且能同步显示歌词-挥着翅膀的女孩如图2-8所示、如图2-9所示。图2-8 歌名显示图2-9歌词显示3 ATMEL 89C51系列单片机3.1 AT89C51单片机内部的组成结构图 如图3-1所示。图3-1 单片机内部的组成结构图3.2 单片机CPU结构 如图3-2所示。图3-2单片机CPU结构3.3 AT89C51用户系统 CPU为Atmel公司生产的89C51/89C52/89C55等。出厂所配晶振频率为11.0592MH,每个机器周期为1.085us,用户更换晶振以提高速度。 存贮器为64K,前4K/8K20K在CPU内部,其它程序在EPR0M27512中。 数据存贮器为32K(62256),地址为8000FFFFH。 /O扩展8155,片内RAM地址200O-20FFH 8155命令口地址为2100H A口地址21O1H B口地址:2102H C口地址:2103H T低八位2104H T高八位2105H 多路模拟开关的使用 IN0P1=0F8H IN4P1=0FCH IN1P1=0F9H IN5:P1=OFDH IN2P1=0FAH IN5:P1=0FEH IN3P1=0FBH IN7:P1=0FFH 不掉电数据存贮器为500EH-507FH 控制板160x1O9(mm) 供电+5V300mA +12V100mA -12V100mA AT89C51是一种低功耗、高性能的片内含有4KB快闪可编程/擦除只读存储器(FPEROM-Flash Programmable and Eraseable Read Only Memory)的8位CMOS微控制器,使用高密度、非易失存储技术制造,并且与80C51引脚和指令系统完全兼容。主要性能: 与MCS-51 微控制器产品系列兼容。 片内有4KB可在线重复编程的快闪擦写存储器 3.4 引脚介绍:如图3-3所示。图3-3 引脚图1电源引脚Vcc 40 电源端GND 20 接地端工作电压为5V,另有AT89LV51 工作电压则是2.7-6V, 引脚功能一样。2.外接晶振引脚 如图3-4所示。图3-4 外接晶振引脚XTAL1 19XTAL2 18XTAL1 是片内振荡器的反相放大器输入端,XTAL2 则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2 悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF 左右。型号同样为AT89C51 的芯片,在其后面还有频率编号,有12,16,20,24MHz 可选。大家在购买和选用时要注意了。如AT89C51 24PC 就是最高振荡频率为24MHz,40P6 封装的普通商用芯片。3.复位 RST 9在振荡器运行时,有两个机器周期(24 个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51 芯片便循环复位。复位后P0P3 口均置1 引脚表现为高电平,程序计数器和特殊功能寄存器SFR 全部清零。当复位脚由高电平变为低电平时,芯片为ROM 的00H 处开始运行程序。常用的复位电路如图所示。复位操作不会对内部RAM 有所影响。如图3-5所示。图3-5 常用复位电路4输入输出引脚(1) P0 端口P0.0-P0.7 P0 是一个8 位漏极开路型双向I/O 端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8 个TTL。对内部Flash 程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。在访问外部程序和外部数据存储器时,P0 口是分时转换的地址(低8 位)/数据总线,访问期间内部的上拉电阻起作用。如图3-6所示。图3-6 P0口一位结构图(2) P1 端口P1.7 P1 是一个带有内部上拉电阻的8 位双向I/0 端口。输出时可驱动4 个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash 程序存储器编程时,接收低8 位地址信息。如图3-7所示。图3-7 P1口一位 (3) P2 端口P2.7 P2 是一个带有内部上拉电阻的8 位双向I/0 端口。输出时可驱动4 个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash 程序存储器编程时,接收高8 位地址和控制信息。在访问外部程序和16 位外部数据存储器时,P2 口送出高8 位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。 (4) P3 端口P3.7 P2 是一个带有内部上拉电阻的8 位双向I/0 端口。输出时可驱动4 个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。除此之外P3 端口还用于一些专门功能。如图3-8所示。图3-8 P3口一位结构图P13 端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。P3口也可作为AT89C51的一些特殊功能口,如下所示:P3口管脚 备选功能P3.0 RXD(串行输入口)P3.1 TXD(串行输出口)P3.2 /INT0(外部中断0)P3.3 /INT1(外部中断1)P3.4 T0(记时器0外部输入)P3.5 T1(记时器1外部输入)P3.6 /WR(外部数据存储器写选通)P3.7 /RD(外部数据存储器读选通)P3口同时为闪烁编程和编程校验接收一些控制信号。8051单片机的内部高128个字节为专用寄存器区,其中51子系列有21个(52子系列有26个)特殊功能寄存器(SFR),它们离散的分布在这个区中,分别用于CPU并行口、串行口、中断系统、定时/计数器等功能单元及控制和状态寄存器。8051系列单片机将程序存储器(ROM)和数据存储器(RAM)分开,并各有各自的寻址机构和寻址方式。这种就是所谓的哈佛结构单片机。8051系列单片机在物理上有四个存储空间:片内程序存储器空间和片外程序存储器空间,片内数据存储器空间和片外数据存储器空间。8051单片机内部有256字节的数据存储空间RAM和4KB的程序程序存储器ROM。除此外还可以在片外扩展RAM和ROM,并且各自有64KB的寻址空间。64KB的程序存储器ROM中,有4KB地址区对于片内ROM和片外ROM是公用的。这4KB的地址为0000H-FFFH而1000H-FFFFH地址为外部ROM专用。CPU的控制器专门提供一个控制信号,用来区分内部ROM和外部ROM的公用地址区:当接高电平时,单片机从片内的4KB存储区取出指令,当指令地址超过0FFFH后,就自动地转向片外ROM取指令;当接低电平时CPU只从片外ROM取指令。程序存储器的某些单元是保留给系统使用的:0000H-0002H单元是所有执行程序的入口地址,复位后,CPU总是从0000H单元开始执行程序;0003H-002A单元均匀地分为五段,用来做五个中断服务程序的入口。数据存储器RAM也有64KB的寻址空间,在地址上与ROM重叠。8051通过不同的信号来选择ROM或RAM;当从外部ROM取指令时用选通信号;当从外部RAM读写数据时采用读写信号线或来选通。因此不会因地址重叠而出现混乱。对于片内RAM的低128字节(00H-7FH),还可以分为三个区。第一个区从00H-1FH安排了四组工作寄存器,每组占8个RAM字节,记为R0-R7。在某一时刻CPU只能用其中一组寄存器,工作寄存器的选择是有PSW中的两位来决定。第二个区域是可位寻址的区,占用20H-2FH共16个字节(128位),这个区域除了作一般的RAM区还可以进行位操作。第三个区域就是一般的RAM区,地址为30H-7FH共80个字节。3.5 89C51内部特殊寄存器介绍89C51内部控制寄存器只有6个,想要充分发挥8051单片机的功能必须对这些寄存器有所了解。(1) IE、IP寄存器: 用于中断控制(2) TMOD、TCON寄存器: 计时付数器用(3) SCON寄存器: 串行传输控制(4) PCON寄存器: 省电模式操作下边将分别介绍各个寄存器的功能3.5.1 IE;中断允许寄存器 可位寻址,地址:A8H 如图3-9所示。图3-9 中断允许寄存器EA : EA =0时,所有中断停用(禁止中断) EA =1时,各中断的产生由个别的允许位决定B6 : 保留ET2 : 定时器/计数器2(T/C2)溢出中断允许位。 ET2=1 T/C2 开中断 ET2=0 T/C2关中断ES : 串行口中断允许位。 ES=1 串行口开中断ES=0串行口关中断ET1 : 定时器/计数器1(T/C2)溢出中断允许位。 ET1=1 T/C1 开中断 ET1=0 T/C1关中断EX1 : 外部中断1的允许位 EX1=1外部中断1开中断 EX1=0外部中断1关中断ET0 : 定时器/计数器0(T/C0)溢出中断允许位。 ET0=1 T/C0 开中断 ET0=0 T/C0关中断EX0 : 外部中断0的允许位 EX0=1外部中断1开中断 EX0=0外部中断1关中断3.5.2 定时器/计数器控制寄存器TCON 可位寻址,地址88H。如图3-10所示。图3-10 定时器/计数器控制寄存器TF1 : 计时器1溢出标志,当计时溢出时,由硬件设定为1,在执相对应的中断服务程序后则自动清0。TR1 : 计时器1启动控制位,可以由软件来设定或清除。TRl=1时启动计时器工作,TRl=0时关闭。TF0 : 计时器0溢出标志,当计时溢出时,由硬件设定为1,在执行相对的中断服务程序后则自动清0。TR0 : 计时器O启动控制位,可以由软件来设定或清除,TR0=1启动计时器工作,TR0o时关闭。IE1 : 外部中断1工作标志,当外部中断被检查出来时设定此位,在执行中断服务程序后,则清0。ITl : 外部中断1工作形式选择,ITll时,由下降沿产生外部中断,ITl=0时,则为低电位产生中断。IE0 : 外部中断0工作标志,当外部出断被检查出来时,便件自动设定此位,在执行今断服务程序后,则清0。IT0 : 外部中断0工作形式选择,1To1时为下降沿产生外部中断, IT00时则为低电位产生中断。3.5.3 中断优先寄存器-IPIP在特殊功能寄存器中,字节地址为B8H,位地址(由低位到高位)分别是B8H一BFH,IP用来设定各个中断源属于两级中断中的哪一级,IP的基本格式如图3-11所示。图3-11 中断优先寄存器:无效位。PS:串行IO中断优先级控制位。PS1,高优先级;PS0,低优先级。PTl:定时器计数器1中断优先级控制位。PTl1,高优先级;PTl0,低优先级。Pxl:外部中断1中断优先级控制位。Pxl1,高优先级;PXlO,低优先级。T0:定时器计数器o中断优先级控制位。PT01,高优先级;PTO0,低优先级。Px0:外部中断0中断优先级控制位。Px01,高优先级;Px00,伤优先级。在MCS-51单片机系列中,高级中断能够打断低级中断以形成中断嵌套;同级中断之间,或低级对高级中断则不能形成中断嵌套。若几个同级中断同时向CPU请求中断响应,则CPU按如下顺序确定响应的先后顺序:INT0一T0-INT1一T1一RIT1.3.4 .4 中断的响应过程若某个中断源通过编程设置,处于被打开的状态,并满足中断响应的条件,而且当前正在执行的那条指令已被执行完当前末响应同级或高级中断不是在操作IE,IP中断控制寄存器或执行REH指令则单片机响应此中断。在正常的情况下,从中断请求信号有效开始,到中断得到响应,通常需要3个机器周期到8个机器周期。中断得到响应后,自动清除中断请求标志(对串行IO端口的中断标志,要用软件清除),将断点即程序计数器之值(PC)压入堆栈(以备恢复用);然后把相应的中断入口地址装入PC,使程序转入到相应的中断服务程序中去执行。各个中断源在程序存储器中的中断入口地址如下:中断源 入口地址INT0(外部中断0)-0003HTF0(TO中断)-000BHINT1(外部中断1)-0013HTFl(T1中断)-001BHRITI(串行口中断)-0023H3.5 .5 电源控制寄存器PCONPCON的字节地址为87H,无位地址,PCON的格式如图六所示。需指出的是,对80C31单片机而言,PCON还有几位有效控制位。如图3-12所示。图3-12 电源控制寄存器SMOD:波特率加倍位。在计算串行方式1,2,3的波特率时;0-不加倍;1-加倍。串行中断的应用特点: 8031单片机的串行IO端口是一个中断源,有两个中断标志RI和TI,RI用于接收,TI用于发送。串行端口无论在何种工作方式下,发送接收前都必须对TIRI清零。当一帧数据发送接收完后,TI/RI自动置1,如要再发送接收,必须先用软件将其清除。在串行中断被打开的条件下,对方式0和方式1来说,一帧数据发送接收完后,除置位TIRI外,还会引起串行中断请求,并执行串行中侧目务程序。但对方式2和方式3的接收机而言,还要视SM2和RB8的状态,才可确定RI是否被置位以及串行中断的开放:SM2 RB8 接收机中断标志与中断状态0 1 激活RI,引起中断1 0 不激活RI,不引起中断1 1 激活RI,引起中断定时器/计数器简称定时器,8051系列单片机有2个16位的定时器/计数器:定时器0(T0)和定时器1(T1)。8052系列单片机增加了一个定时器T2。它们都有定时器或事件计数的功能,可用于定时控制、延时、对外部事件计数和检测等场合。3.5.6 定时器/计数器工作方式(1) 定时器/计数器工作方式除可选择定时或计数工作方式外,每个定时器/计数器还有4种工作模式。模式0、1和2,T0和T1的工作模式相同,在模式3,两个定时器的模式不同T0由2个特殊功能寄存器TH0和TL0构成,T1则由TH1和TL1构成。作定时器时,定时器计数8031片内振荡器输出经12分频后的脉冲,即每个机器周期使定时器(T0或T1)的寄存器自动加1直至计满溢出。所以定时的分辨率是时钟振荡频率的1/12。作计数器时,通过引脚T0()和T1()对外部脉冲信号计数,当输入脉冲信号从1到0的负跳变时,计数器就自动加1。计数的最高频率一般为振荡频率的1/24。不论是定时或是计数工作方式,定时器T0或T1都不占用CPU时间,除非定时器/计数器溢出,才可能中断CPU的当前操作。由此可见,定时器是单片机中效率高而且工作灵活的部件。(2) 除可选择定时或计数工作方式外,每个定时器/计数器还有4种工作模式。模式0、1和2,T0和T1的工作模式相同,模式3两个定时器的模式不同。由TL1的低5位和TH1的8位构成13位计数器。定时器启动后,定时或计数脉冲加到TL1,从预先设置的初值(时间常数)开始不断增1。TL1计满后向TH1进位,直至13位寄存器计满溢出。溢出时,13位寄存器清0。TF1置位并申请中断。如需进一步定时/计数,需用指令重置时间常数。模式0的结构如图3-13所示。 图3-13 模式0的结构图模式1和模式0几乎完全相同,唯一的差别是:模式1中,定时器寄存器TH1和TL1组成16位计数器参与操作,从而比模式0有更大的定时/计数范围。模式1的结构如图3-14所示。图3-14 模式1的结构图由于定时器T1无操作模式3。若将T0设置为模式3,TL0和TH0被分成为两个互相独立的8位计数器,如图3-15所示。图3-15 模式3的结构图 定时器共有2个控制寄存器TMOD和TCON,由软件写入TMOD和TCON 两个8位寄存器,设置各个定时器的操作模式和控制功能。定时器初始化步骤在使用8051的定时器计数器前,应对它进行初始化编程,主要是对TCON和TMOD编程,计算和装载计数初值(也称做时间常数)。一般完成以下几个步骤:(1) 确定T/C的工作方式编程TMOD寄存器;(2) 计算T/C中的计数初值,并装载到THx和TLx;(3) T/C在中断方式工作时,须开CPU中断和源中断编程IE寄存器;(4) 启动定时器计数器编程TCON中TRl或TR0位。4 LCD芯片41 LCD接口液晶显示器件(LCD)独具的低压、微功耗特性使他在单片机系统中特得到了广泛的应用,常用的液晶显示模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块,其中图形液晶模块在我国应用较为广泛,因为汉字不能象西文字符那样用字符模块即可显示,要想显示汉字必须用图形模块。LCD资料我选择的是AMPIRE12864的汉字图形型液晶显示模块,可显示汉字及图形,图形液晶显示显示器如图4-1所示。图4-1 LCD电路图AMPIRE12864接口说明表表4.1 接口说明表管脚号 管脚 电平 说明 1CS1H/L 片选择信号,低电平时选择前64列2CS2H/L片选择信号,低电平时选择后64列3GND0V 逻辑电源地4VCC 5.0V 逻辑电源正5V0 LCD驱动电压,应用时在VEE与V0之间加一2K可调电阻6RSH/L 数据指令选择:高电平:数据D0-D7将送入显示RAM; 低电平:数据D0-D7将送入指令寄存器执行7R/WH/L 读写选择: 高电平:读数据;低电平:写数据8E H/L 读写使能,高电平有效,下降沿锁定数据9DB0H/L 数据输入输出引脚10DB1H/L 数据输入输出引脚11DB2H/L 数据输入输出引脚12DB3H/L 数据输入输出引脚13DB4 H/L数据输入输出引脚14DB5H/L数据输入输出引脚15DB6H/L数据输入输出引脚16DB7H/L数据输入输出引脚17RSTL复位信号,低电平有效18VOUT-10VLCD驱动电源42 指令描述(1) 显示开/关设置CODE: R/W RS IDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLLLHHHHHH/L功能:设置屏幕显示开/关。 DB0=H,开显示;DB0=L,关显示。不影响显示RAM(DD RAM)中的内容。 (2) 设置显示起始行 CODE:R/W RS IDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLHH行地址(063)功能:执行该命令后,所设置的行将显示在屏幕的第一行。显示起始行是由Z地址计数器控制的,该命令自动将A0-A5位地址送入Z地址计数器,起始地址可以是0-63范围内任意一行。Z地址计数器具有循环计数功能,用于显示行扫描同步,当扫描完一行后自动加一。(3) 设置页地址 CODE:R/W RS IDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 LLHLHHH页地址(07)功能:执行本指令后,下面的读写操作将在指定页内,直到重新设置。页地址就是DD RAM 的行地址,页地址存储在X地址计数器中,A2-A0可表示8页,读写数据对页地址没有影响,除本指令可改变页地址外,复位信号(RST)可把页地址计数器内容清零。 DD RAM地址映像表如表4.2所示。 表4.2 RAM地址映像表Y 地址 0 1 2 61 62 63 DB0 PAGE0 DB7 X=0 DB0 PAGE1 DB7 X=1 DB0 PAGE6 DB7 X=7 DB0 PAGE7 DB7 X=8 (4) 设置列地址 CODE:R/W RS IDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0LLLH列地址(063) 功能: DD RAM 的列地址存储在Y地址计数器中,读写数据对列地址有影响,在对DD RAM进行读写操作后,Y地址自动加一。 (5)状态检测 CODE:R/W RS IDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0HLBFLON/OFF RST LLLL功能:读忙信号标志位(BF)、复位标志位(RST)以及显示状态位(ON/OFF)。BF=H:内部正在执行操作; BF=L:空闲状态。RST=H:正处于复位初始化状态; RST=L:正常状态。ON/OFF=H:表示显示关闭; ON/OFF=L:表示显示开。(6)写显示数据 CODE:R/W RS IDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0L HD7D6D5D4D3D2D1D0功能:写数据到DD RAM,DD RAM是存储图形显示数据的,写指令执行后Y地址计数器自动加1。D7-D0位数据为1表示显示,数据为0表示不显示。写数据到DD RAM前,要先执行“设置页地址”及“设置列地址”命令。(7)读显示数据 CODE: R/W RS IDB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0HHD7D6D5D4D3D2D1D0基本操作时序: 读状态:输入:RS=L,R/W=H,CS1 或CS2=H,E=H 输出:D0D7=状态字 写指令:输入:RS=L,R/W=L,D0D7=指令码,CS1或CS2=H,E=高脉冲输出:无 读数据:输入:RS=H,R/W=H,CS1 或CS2=H,E=H 输出:D0D7=数据 写数据:输入:RS=H,R/W=L,D0D7=数据,CS1 或CS2=H,E=高脉冲 输出:无RAM 地址映射图LCD 显示屏由两片控制器控制,分别用和控制。每个内部带有64X64 位(512字节)的RAM 缓冲区,对应关系如图4-2所示。图4-2 LCD地址映射图43 接口时序说明(1) 读操作时序 如图4-3所示。图4-3 读操作时序(2) 写操作时序 如图4-4所示。图4-4 写操作时序(3) 时序参数 如表4.3所示。表4.3 时序表向LCD写汉字必须先初始化LCD:开显示、清屏 1 设定开始页地址和列地址2 设定读写模式,进行读写操作 5 系统软件设计5.1 系统流程图 如图5-1所示。上电复位延时50 ms初始化LCD清屏显示播放音乐显示歌词主界面菜单选择界面B1=0汉字显示B4=0B2=0Flash显示B3=0YYYNNNY图5-1 主程序流程图52 汉字和图形字模提取液晶显示器件(LCD)独具的低压、微功耗特性使他在单片机系统中特得到了广泛的应用,常用的液晶显示模块分为数显液晶模块、点阵字符液晶模块和点阵图形液晶模块,其中图形液晶模块在我国应用较为广泛,因为汉字不能象西文字符那样用字符模块即可显示,要想显示汉字必须用图形模块。1 液晶模块显示汉字方法使用图形液晶模块以点阵形式来显示汉字和图形,每8个点组成1个字节,每个点用一个二进制位表示,存1的点显示时在屏上显示一个亮点,存0的点则在屏上不显示,最常用的1616的汉字点阵由32个字节组成。以在我国应用较为普及的液晶显示驱动控制器12864为例,在液晶屏上横向8个点为1个字节数据,则“国”字的1616点阵字模如图1所示,通过字模提取软件按照先左后右,先上后下的方式对“国”字进行字模提取,则可获得图1右边的字模对应的32个字节值。将这些字节按一定顺序写入液晶控制器的显示缓冲区,就可在液晶屏上显示1616的“国”字如图5-2所示。图5-2 汉字点阵图英文字母采用的是816点阵,如图5-3所示。图5-3 字符点阵提取字模有四种提取格式包括:横向取模字节正序,横向取模字节倒序,纵向取模字节正序,纵向取模字节倒序。字模应用于单色的点阵液晶,数据是纵向的,一个像素对应一个位。8个像素对应一个字节,字节的位顺序是上低下高。比如从上到下8个点的状态是“*-*-”(*为黑点,-为白点),则转换的字模数据是0x41(B0100_0001)。在对汉字或图像做字模提取时,汉字一般都是1616的点阵,图像可以是12864 6464 3264的点阵。为了使图像更加清晰我采用的是12864采集模 式即全屏显示一幅图片,通过单片机将已提取的汉字图形的字模输入液晶控制 器,即可按设定的液晶模块显示屏上现实需要的汉字。将提取的汉字字模数据作为常量数组存放在程序存储区内,这种方法较为常用,针对程序不大或单片机无外部扩展数据存储区功能的情况。如下面程序所示,将提取的要显示汉字的字模数据定义成常量数组,如要显示“河南”两字。unsigned char code hz37=/字模格式/大小 : 单色点阵液晶字模,纵向取模,字节倒序/64字节/*- 文字: 河 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x10,0x60,0x01,0xC6,0x30,0x02,0xE2,0x22,0x22,0xE2,0x02,0x02,0xFE,0x02,0x02,0x00,0x04,0x04,0xFF,0x00,0x00,0x00,0x07,0x02,0x02,0x07,0x40,0x80,0x7F,0x00,0x00,0x00,/*- 文字: 南 -*/*- 宋体12; 此字体下对应的点阵为:宽x高=16x16 -*/0x04,0x04,0xE4,0x24,0x24,0x64,0xB4,0x2F,0x24,0xA4,0x64,0x24,0x24,0xE6,0x04,0x00,0x00,0x00,0x7F,0x04,0x05,0x05,0x05,0x7F,0x05,0x05,0x05,0x25,0x44,0x3F,0x00,0x00,5.3 汉字图形显示函数用字模提取软件将要显示的汉字和图像转化成十六进制代码,分别用程序调用在LCD上显示出来。程序部分主要包含几个函数:测试LCD忙闲状态函数void CheckState(),向LCD写命令函数SendCommandToLCD(unsigned char command),写显示数据函数void WriteByte(unsigned char dat),读数据函数unsigned char ReadByte(),设定行和列函数,写88汉字函数写1616汉字函数 music_16(unsigned char lin,unsigned char column,unsigned char *p,unsigned int m)写12864图片函数write_image(unsigned char *dat )播放音乐函数Play() 和延迟函数delay(unsigned int).向LCD读写1616汉字时采用的是先左后右先上后下的规则,即先在读写左上角88汉字点阵,纵着读写从左到右上面是低位下边是高位,一次类推读写右上角88汉字点阵左下角、右下角。向LCD读写12864图像时,先把LCD的显示屏的纵列分成两部分,分别是低64位和高64位,用CS1和CS2作片选控制,低点位有效。如下面的函数汉字显示子函数hz_16。其中要调用另外两个子函数hz_88和WriteByte数,lin、column为液晶显示器的页和列,参数w为指针类型,指向数组的首地址。 88点阵汉字函数void hz_88(unsigned char lin,unsigned char column,unsigned char *w, unsigned int address)/ 写入88点阵汉字函数 unsigned char i;if(column16) return;if(column8) SelectScreen(1); /如果列数8(0,1,2,3,4,5,6,7)则写在第一屏上else SelectScreen(2); /否则 (8,9,10,11,12,13,14,15)写在第二屏上column=column & 0x07;/防止越界SetLine(lin);SetColumn(column3);/colum8 0 8 16 24 -120for(i=0;i8;i+) WriteByte(waddress+i);1616汉字控制函数void hz_16(unsigned char lin,unsigned char column,unsigned char *p,unsigned int m)lin=lin1; /lin*2,一个汉字占两页hz_88(lin,column,p,m*32);hz_88(lin,column+1,p,m*32+8);hz_88(lin+1,column,p,m*32+16);hz_88(lin+1,column+1,p,m*32+24); write_image(unsigned char *dat ) unsigned char i,j;SelectScreen(1);/选择低64位即左半平面for(i=0;i8;i+) SetLine(i);/设定开始页地址07 SetColumn(0);/设定第0列为开始列 for(j=0;j64;j+)WriteByte(*(dat+i*128+j);/按纵向上低下高的顺序向LCD写数据 SelectScreen(2); /选择高64位即左半平面for(i=0;i8;i+)SetLine(i); /设定开始页地址07 SetColumn(0); /设定第0列为开始列for(j=64;j128;j+)WriteByte(*(dat+i*128+j); /按纵向上低下高的顺序向LCD写数据5.4 单片机播放音乐并同步显示歌词单片机播放音乐并能同步显示歌词,我的设计思路是把要显示的歌词每32个放在一个数组里,同样把要唱的每32个歌词放在一个数组里面,先显示歌词再唱歌,在每唱完32个歌词以后马上调用汉字显示函数显示下面的32个歌词,依次类推直到把整首歌唱完。曲谱存贮格式 unsigned char code MusicName音高,音长,音高,音长., 0,0;末尾:0,0 表示结束(Important)音高由三位数字组成:个位是表示 17 这七个音符 十位是表示音符所在的音区:1-低音,2-中音,3-高音;百位表示这个音符是否要升半音: 0-不升,1-升半音。音长最多由三位数字组成: 个位表示音符的时值,其对应关系是: |数值(n): |0 |1 |2 |3 | 4 | 5 | 6 |几分音符: |1 |2 |4 |8 |16 |32 |64 音符=2n十位表示音符的演奏效果(0-2): 0-普通,1-连音,2-顿音百位是符点位: 0-无符点,1-有符点调用演奏子程序的格式Play(乐曲名,调号,升降八度,演奏速度);|乐曲名 : 要播放的乐曲指针,结尾以(0,0)结束;|调号(0-11) :是指乐曲升多少个半音演奏;|升降八度(1-3) : 1:降八度, 2:不升不降, 3:升八度;|演奏速度(1-12000):值越大速度越快;void Play(unsigned char *Sound,unsigned char Signature,unsigned Octachord,un
展开阅读全文