《能力拓展训练》课程设计说明书-基于AT89C52单片机的液晶显示器设计.doc_第1页
《能力拓展训练》课程设计说明书-基于AT89C52单片机的液晶显示器设计.doc_第2页
《能力拓展训练》课程设计说明书-基于AT89C52单片机的液晶显示器设计.doc_第3页
《能力拓展训练》课程设计说明书-基于AT89C52单片机的液晶显示器设计.doc_第4页
《能力拓展训练》课程设计说明书-基于AT89C52单片机的液晶显示器设计.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

武汉理工大学能力拓展训练说明书1、摘要本次课程设计基于AT89C52为核心控制器,FYD12864液晶为显示器设计的液晶显示电路。该电路可通过调用FYD12864液晶内部自带的字库(包含8192个标准中文汉字)显示1616点的中文汉字、168的数字及英文字符,该过程只需要像DDRAM中写入要显示的字符的ASCII码,当事先指定显示数据的位置,即可将所需显示的字符显示在液晶的指定位置。使用KNY12864液晶的绘图功能,将所需显示图片或字符的字模数据写入到CGRAM中,开图片显示,即可将该图片或字符同时显示在液晶上。本次设计的扩展功能为用红外遥控控制图像移动,红外遥控的1、2、3、4、5、6、7、8八个按键分别控制图像的上移、下移、左移、右移、静止、继续、初始界面、重新设置等八项功能。为实现图像的移动,可通过数据指针改变写入CGRAM的数据,使得输出的图像数据相对于原来在行或者列上按着一定的规律在变化即可,移动速度的快慢可由刷新的频率或者每次移动的行或者列数来决定。至于在液晶上显示动画,为了有更好的动画效果,需要每秒刷新10幅图像,而在该12864液晶上,每幅图像需要1K的ROM空间,而52的ROM空间有限,所以在实现动画上有点困难,故本设计中不实现该功能。2、软件简介2.1 Proteus简介Proteus软件是英国Labcenter electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年即将增加Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。Proteus功能模块:(1)智能原理图设计(ISIS)丰富的器件库:超过27000种元器件,可方便地创建新元件; 智能的器件搜索:通过模糊搜索可以快速定位所需要的器件; 智能化的连线功能:自动连线功能使连接导线简单快捷,大大缩短绘图时间; 支持总线结构:使用总线器件和总线布线使电路设计简明清晰; 可输出高质量图纸:通过个性化设置,可以生成印刷质量的BMP图纸,可以方便地供WORD、POWERPOINT等多种文档使用。 (2)完善的电路仿真功能(Prospice) ProSPICE混合仿真:基于工业标准SPICE3F5,实现数字/模拟电路的混合仿真; 超过27000个仿真器件:可以通过内部原型或使用厂家的SPICE文件自行设计仿真器件,Labcenter也在不断地发布新的仿真器件,还可导入第三方发布的仿真器件; 多样的激励源:包括直流、正弦、脉冲、分段线性脉冲、音频(使用wav文件)、指数信号、单频FM、数字时钟和码流,还支持文件形式的信号输入; 丰富的虚拟仪器:13种虚拟仪器,面板操作逼真,如示波器、逻辑分析仪、信号发生器、直流电压/电流表、交流电压/电流表、数字图案发生器、频率计/计数器、逻辑探头、虚拟终端、SPI调试器、I2C调试器等; 生动的仿真显示:用色点显示引脚的数字电平,导线以不同颜色表示其对地电压大小,结合动态器件(如电机、显示器件、按钮)的使用可以使仿真更加直观、生动; 高级图形仿真功能(ASF):基于图标的分析可以精确分析电路的多项指标,包括工作点、瞬态特性、频率特性、传输特性、噪声、失真、傅立叶频谱分析等,还可以进行一致性分析; (3)独特的单片机协同仿真功能(VSM)支持主流的CPU类型:如ARM7、8051/52、AVR、PIC10/12、PIC16、PIC18、PIC24、dsPIC33、HC11、BasicStamp、8086、MSP430等,CPU类型随着版本升级还在继续增加,如即将支持CORTEX、DSP处理器; 支持通用外设模型:如字符LCD模块、图形LCD模块、LED点阵、LED七段显示模块、键盘/按键、直流/步进/伺服电机、RS232虚拟终端、电子温度计等等,其COMPIM(COM口物理接口模型)还可以使仿真电路通过PC机串口和外部电路实现双向异步串行通信; 实时仿真:支持UART/USART/EUSARTs仿真、中断仿真、SPI/I2C仿真、MSSP仿真、PSP仿真、RTC仿真、ADC仿真、CCP/ECCP仿真; 编译及调试:支持单片机汇编语言的编辑/编译/源码级仿真,内带8051、AVR、PIC的汇编编译器,也可以与第三方集成编译环境(如IAR、Keil和Hitech)结合,进行高级语言的源码级仿真和调试; (4)实用的PCB设计平台原理图到PCB的快速通道: 原理图设计完成后,一键便可进入ARES的PCB设计环境,实现从概念到产品的完整设计; 先进的自动布局/布线功能:支持器件的自动/人工布局;支持无网格自动布线或人工布线;支持引脚交换/门交换功能使PCB设计更为合理; 完整的PCB设计功能:最多可设计16个铜箔层,2个丝印层,4个机械层(含板边),灵活的布线策略供用户设置,自动设计规则检查,3D 可视化预览; 多种输出格式的支持:可以输出多种格式文件,包括Gerber文件的导入或导出,便利与其它PCB设计工具的互转(如protel)和PCB板的设计和加工。 Proteus资源丰富:(1)Proteus可提供的仿真元器件资源:仿真数字和模拟、交流和直流等数千种元器件,有30多个元件库。 (2)Proteus可提供的仿真仪表资源 :示波器、逻辑分析仪、虚拟终端、SPI调试器、I2C调试器、信号发生器、模式发生器、交直流电压表、交直流电流表。理论上同一种仪器可以在一个电路中随意的调用。 (3)除了现实存在的仪器外,Proteus还提供了一个图形显示功能,可以将线路上变化的信号,以图形的方式实时地显示出来,其作用与示波器相似,但功能更多。这些虚拟仪器仪表具有理想的参数指标,例如极高的输入阻抗、极低的输出阻抗。这些都尽可能减少了仪器对测量结果的影响。 (4)Proteus可提供的调试手段 Proteus提供了比较丰富的测试信号用于电路的测试。这些测试信号包括模拟信号和数字信号。2.2 Keil简介Keil C51是美国Keil Software公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部分组合在一起。运行Keil软件需要WIN98、NT、WIN2000、WINXP等操作系统。如果你使用C语言编程,那么Keil几乎就是你的不二之选,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会令你事半功倍。Keil C51开发系统基本知识Keil C51开发系统基本知识 (1)系统概述 Keil C51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。下面详细介绍Keil C51开发系统各部分功能和使用。 (2)Keil C51单片机软件开发系统的整体结构 C51工具包的整体结构,uVision与Ishell分别是C51 for Windows和for Dos的集成开发环境(IDE),可以完成编辑、编译、连接、调试、仿真等整个开发流程。开发人员可用IDE本身或其它编辑器编辑C或汇编源文件。然后分别由C51及C51编译器编译生成目标文件(.OBJ)。目标文件可由LIB51创建生成库文件,也可以与库文件一起经L51连接定位生成绝对目标文件(.ABS)。ABS文件由OH51转换成标准的Hex文件,以供调试器dScope51或tScope51使用进行源代码级调试,也可由仿真器使用直接对目标板进行调试,也可以直接写入程序存贮器如EPROM中。 Keil C51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。3、设计原理及方案3.1 AT89C52单片机介绍AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,AT89C52单片机在电子行业中有着广泛的应用。其主要功能特性有以下几点:(1)兼容MCS51指令系统 (2)8k可反复擦写(大于1000次)Flash ROM; (3)32个双向I/O口; (4)256x8bit内部RAM; (5)3个16位可编程定时/计数器中断; (6)时钟频率0-24MHz; (7)2个串行中断,可编程UART串行通道; (8)2个外部中断源,共8个中断源; (9)2个读写中断口线,3级加密位; (10)低功耗空闲和掉电模式,软件设置睡眠和唤醒功能; (11)有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。 AT89C52为8 位通用微处理器,采用工业标准的C51内核,在内部功能及管脚排布上与通用的8xc52 相同,其主要用于会聚调整时的功能控制。功能包括对会聚主IC 内部寄存器、数据RAM及外部接口等功能部件的初始化,会聚调整控制,会聚测试图控制,红外遥控信号IR的接收解码及与主板CPU通信等。其引脚图如图3.1.1所示。图3.1.1 AT89C52引脚图P0口:P0口是一组8 位漏极开路型双向I/O 口,也即地址/数据总线复用口。作为输出口用时,每位能吸收电流的 方式驱动8 个TTL逻辑门电路,对端口P0 写“1”时,可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8 位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash 编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1口:P1是一个带内部上拉电阻的8 位双向I/O 口,P1的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。与AT89C51 不同之处是,P1.0 和P1.1 还可分别作为定时/计数器2 的外部计数输入(P1.0/T2)和输入(P1.1/T2EX),参见表1。Flash 编程和程序校验期间,P1接收低8 位地址。表3.1.1 .P1.0和P1.1的第二功能引脚号功能特性P1.0T2,时钟输出P1.1T2EX(定时/计数器2)P2口:P2 是一个带有内部上拉电阻的8 位双向I/O 口,P2 的输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻辑门电路。对端口P2 写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16 位地址的外部数据存储器(例如执行MOVX DPTR 指令)时,P2 口送出高8 位地址数据。在访问8 位地址的外部数据存储器(如执行MOVX RI 指令)时,P2 口输出P2 锁存器的内容。Flash 编程或校验时,P2亦接收高位地址和一些控制信号。 P3口:P3 口是一组带有内部上拉电阻的8 位双向I/O 口。P3口输出缓冲级可驱动(吸收或输出电流)4 个TTL 逻 辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。此时,被外部拉低的P3口将用上拉电阻输出电流(IIL)。P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能P3口还接收一些用于Flash 闪速存储器编程和程序校验的控制信号。 RST:复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8 位字节。一般情况下,ALE 仍以时钟振荡频率的1/6 输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE 脉冲。对Flash 存储器编程期间,该引脚还用于输入编程脉冲(PROG)。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH 单元的D0 位置位,可禁止ALE 操作。该位置位后,只有一条 MOVX 和MOVC指令才能将ALE 激活。此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE 禁止位无效。 PSEN:程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52 由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP:外部访问允许。欲使CPU 仅访问外部程序存储器(地址为0000HFFFFH),EA 端必须保持低电平(接地)。需注意的是:如果加密位LB1 被编程,复位时内部会锁存EA端状态。 如EA端为高电平(接Vcc端),CPU 则执行内部程序存储器中的指令。Flash 存储器编程时,该引脚加上+12V 的编程允许电源Vpp,当然这必须是该器件是使用12V 编程电压Vpp。 XTAL1:振荡器反相放大器的及内部时钟发生器的输入端。 XTAL2:振荡器反相放大器的输出端。3.2 FYD12864液晶芯片介绍12864C-1是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、 二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864,内置8192个16*16 点汉字,和128个16*8点ASCII字符集.利用该模块灵活的接口方式和简单、方便的操作指 令,可构成全中文人机交互图形界面。可以显示84行1616点阵的汉字.也可完成图形 显示.低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵 液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块。 (1)基本特性: 低电源电压(VDD:+3.0-+5.5V) 显示分辨率:12864点 内置汉字字库,提供8192个1616点阵汉字(简繁体可选) 内置128个168点阵字符 2MHZ时钟频率 显示方式:STN、半透、正显 驱动方式:1/32DUTY,1/5BIAS 视角方向:6点 背光方式:侧部高亮白色LED,功耗仅为普通LED的1/51/10 通讯方式:串行、并口可选 内置DC-DC转换电路,无需外加负压 无需片选信号,简化软件设计 工作温度:0-+55,存储温度:-20-+60(2)内部结构FYD12864液晶的内部结构控制如图3.2.1所示。图 3.2.1 液晶内部结构图(3)模块接口说明表 3.1.1 12864管脚说明管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC3.0+5V电源正3V0-对比度(亮度)调整4RS(CS)H/LRS=“H”,表示DB7DB0为显示数据RS=“L”,表示DB7DB0为显示指令数据5R/W(SID)H/LR/W=“H”,E=“H”,数据被读到DB7DB0R/W=“L”,E=“HL”,DB7DB0的数据被写到IR或DR6E(SCLK)H/L使能信号714DB0DB7H/L三态数据线15PSBH/LH:8位或4位并口方式,L:串口方式16NC-空脚17/RESETH/L复位端,低电平有效18VOUT-LCD驱动电压输出端19AVDD背光源正端(+5V)20KVSS背光源负端(4)模块主要硬件结构说明表 3.2.2 RS,R/W的配合选择决定控制界面的4种模式RSR/W功能说明LLMPU写指令到指令暂存器LH读出忙标志(BF)及地址计数器(AC)的状态HLMPU写入数据到数据暂存器HHMPU从数据暂存器(DR)中读出数据表 3.2.3 E信号E状态执行动作结果高低I/O缓冲DR配合/W进行写数据或指令高DRI/O缓冲配合R惊醒读数据或指令低/低高无动作a. 忙标志:BF BF标志提供内部工作情况.BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据.BF=0时,模块为准备状态,随时可接受外部指令和数据. 利用STATUS RD 指令,可以将BF读到DB7总线,从而检验模块之工作状态.b. 字型产生ROM (CGROM) 字型产生ROM(CGROM)提供8192个此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示(DISPLAY ON),DDRAM 的内容就显示在屏幕上,DFF=0为关显示(DISPLAY OFF)。 DFF 的状态是指令DISPLAY ON/OFF和RST信号控制的。c. 显示数据RAM (DDRAM)模块内部显示数据RAM提供642个位元组的空间,最多可控制4行16字(64个字)的中文字型显示,当写入显示数据RAM时,可分别显示CGROM与CGRAM的字型;此模块可显示三种字型,分别是半角英数字型(16*8)、CGRAM字型及CGROM的中文字型,三种字型的选择,由在DDRAM中写入的编码选择,在0000H0006H的编码中(其代码分别是0000、0002、0004、0006共4个)将选择CGRAM的自定义字型,02H7FH的编码中将选择半角英数字的字型,至于A1以上的编码将自动的结合下一个位元组,组成两个位元组的编码形成中文字型的编码BIG5(A140D75F),GB(A1A0-F7FFH)。d. 字型产生RAM (CGRAM) 字型产生RAM提供图象定义(造字)功能, 可以提供四组1616点的自定义图象空间,使用者可以将内部字型没有提供的图象字型自行定义到CGRAM中,便可和CGROM中的定义一样地通过DDRAM显示在屏幕中。e. 地址计数器AC地址计数器是用来贮存DDRAM/CGRAM之一的地址,它可由设定指令暂存器来改变,之后只要读取或是写入DDRAM/CGRAM的值时,地址计数器的值就会自动加一,当RS为“0”时而R/W为“1”时,地址计数器的值会被读取到DB6DB0中。f. 光标/闪烁控制电路 此模块提供硬体光标及闪烁控制电路,由地址计数器的值来指必RAM中的光标或闪烁位置。(5)主要指令说明表3.3.3 基本指令说明表指 指 令 码功 能令RSR/WD7D6D5D4D3D2D1D0清除显示0000000001将DDRAM填满20H,并且设定DDRAM的地址计数器(AC)到00H地址归位000000001X设定DDRAM的地址计数器(AC)到00H,并且将游标移到开头原点位置;这个指令不改变DDRAM 的内容显示状态开/关0000001DCBD=1: 整体显示 ONC=1: 游标ON B=1:游标位置反白允许进入点设定00000001I/DS指定在数据的读取与写入时,设定游标的移动方向及指定显示的移位游标或显示移位控制000001S/CR/LXX设定游标的移动与显示的移位控制位;这个指令不改变DDRAM 的内容 功能 设定00001DLXREXXDL=0/1:4/8位数据RE=1: 扩充指令操作RE=0: 基本指令操作 设定CGRAM 地址0001AC5AC4AC3AC2AC1AC0设定CGRAM 地址 设定DDRAM 地址0010AC5AC4AC3AC2AC1AC0设定DDRAM 地址(显示位址)第一行:80H87H第二行:90H97H读取忙标志和地址01BFAC6AC5AC4AC3AC2AC1AC0读取忙标志(BF)可以确认内部动作是否完成,同时可以读出地址计数器(AC)的值写数据到RAM10数据将数据D7D0写入到内部的RAM (DDRAM/CGRAM/IRAM/GRAM)读出RAM的值11数据从内部RAM读取数据D7D0(DDRAM/CGRAM/IRAM/GRAM)表3.3.4 扩展指令说明表指 指 令 码功 能令RSR/WD7D6D5D4D3D2D1D0 待命模式0000000001进入待命模式,执行其他指令都棵终止待命模式卷动地址开关开启000000001SRSR=1:允许输入垂直卷动地址SR=0:允许输入IRAM和CGRAM地址 反白 选择00000001R1R0选择2行中的任一行作反白显示,并可决定反白与否。初始值R1R000,第一次设定为反白显示,再次设定变回正常 睡眠 模式0000001SLXXSL=0:进入睡眠模式SL=1:脱离睡眠模式 扩充 功能 设定00001CLXREG0CL=0/1:4/8位数据RE=1: 扩充指令操作RE=0: 基本指令操作G=1/0:绘图开关 设定绘图RAM 地址0010AC60AC50AC4AC3AC3AC2AC2AC1AC1AC0AC0设定绘图RAM先设定垂直(列)地址AC6AC5AC0再设定水平(行)地址AC3AC2AC1AC0将以上16位地址连续写入即可(6)读写时序图图3.2.2 写数据时序图图3.2.3 读数据时序图3.3 设计方案本次课程设计基于AT89C52为核心控制器,FYD12864液晶为显示器设计的液晶显示电路。该电路可通过调用FYD12864液晶内部自带的字库(包含8192个标准中文汉字)显示1616点的中文汉字、168的数字及英文字符,该过程只需要像DDRAM中写入要显示的字符的ASCII码,当事先指定显示数据的位置,即可将所需显示的字符显示在液晶的指定位置。使用KNY12864液晶的绘图功能,将所需显示图片或字符的字模数据写入到CGRAM中,开图片显示,即可将该图片或字符同时显示在液晶上。扩展中实现图像的上、下、左、右移动,实现该功能主要基于数据指针读取的字模数据的位置发生改变来实现的。字模数据是固化在52ROM里面的,通过数据指针将这些字模数据读到CGRAM中,然后开显示,即可将图像或字符显示在12864液晶上。根据FYD12864液晶读取数据的顺序特性,在读取字模数据时,按照一定的规律跳过固定的数据个数,后面补上另一幅图像固定的数据个数,事实上就是将两幅图像拼凑到液晶上,最后通过刷新显示的图像,给人的感觉就是图像在液晶上移动。可能移动效果会比较差,但大体实现移动的功能。要控制图像移动的方向,需要外部键盘输入,MPU判断键值来改变移动方向。由于图像的移动需要MPU不断的像CGRAM中写入图像数据,然后刷新液晶显示来实现,这样子MPU必须忙于数据的写入,无法去检测键盘的输入。即使可以,检测的实时性会很低。但是52中有一项功能可不受当前指令执行影响,那就是中断,只要有中断产生,即可暂停当前指令的执行,进入中断服务程序进行处理。设计中,我采用红外遥控的方法,将红外接收器SM0038接收到的信号输入到外部中断0的输入口,通过在中断服务程序中对红外进行解码,改变标志位flag的值来实现移动方向的改变,当然前提是开外部中断0。4、程序设计4.1 程序流程图主程序和中断服务程序流程图如下所示: 图 4.1.1主程序流程图 图 4.1.2 外部中断处理流程图4.2 程序代码4.2.1 主函数文件main.c#include #include 12864.h #include#define uchar unsigned char#define uint unsigned int/红外接收接P3.2 红外遥控每个按键的定义可以看Code_Chang();/有关的位声明/sbit IRIN=P32;uchar Reive4=0,yaokong,Last,Last1;void Init_R()Reive0=0;Reive1=0;Reive2=0;Reive3=0;void delay0(uchar x) /x*0.14MS uchar i; while(x-) for (i = 0; i13; i+) unsigned char Code_Chang(unsigned char yaokong)switch (yaokong)case 0x10:flag=1;break;case 0x03:flag=2;break;case 0x01:flag=3;break;case 0x06:flag=4;break;case 0x09:flag=0;break;case 0x1d:flag=6;break;default:flag=0;break;return flag;void IR_IN() interrupt 0 using 0 unsigned char j,i,N=0;unsigned char k=0;Init_R();EX0 = 0; delay0(15);if (IRIN=1) EX0 =1; return; /确认IR信号出现while (!IRIN) /等IR变为高电平,跳过9ms的前导低电平信号。delay0(1);for (j=0;j4;j+) /收集四组数据 for (i=0;i=30) EX0=1;return; /0.14ms计数过长自动离开。 /高电平计数完毕 Reivej=Reivej 1; /数据最高位补“0” if (N=8) Reivej = Reivej | 0x80; /数据最高位补“1”N=0;/end for i/end for jif (Reive2!=Reive3) EX0=1;return; yaokong=Reive2;flag=Code_Chang(yaokong);if(flag0&flag5)Last=flag;EX0=1;/* 主函数 */void main()uchar line=8;/Last=flag;IE = 0x81; TCON = 0x01; IRIN=1; delay1(100); /上电,等待稳定init_display();while(1)switch (flag)case 0:break;case 1:picture_move_Up(Photo1,8);break;case 2:picture_move_Down(Photo1,Photo3,8);break;case 3:picture_mov_Left(Photo1,Photo2); picture_mov_Left(Photo2,Photo1);break;case 4:picture_mov_Right(Photo2,Photo1); picture_mov_Right(Photo1,Photo2);break;case 6:flag=Last;break;default:flag=0;break;4.2.2 液晶显示函数文件12864.h#include #include #define uchar unsigned char#define uint unsigned intuint time=2000,flag=0;/闪烁间隔时间-显示方式标志位flag/* 12864LCD引脚定义 */#define LCD_data P0 /数据口sbit LCD_RS = P20; /寄存器选择输入 sbit LCD_RW = P21; /液晶读/写控制sbit LCD_EN = P22; /液晶使能控制sbit LCD_PSB = P23; /串/并方式控制sbit LCD_RST = P25; /液晶复位端口#define delayNOP(); _nop_();_nop_();_nop_();_nop_();/*/uchar code DIS1 = 武汉理工大学 ;uchar code DIS2 = ;uchar code DIS3 = 能力扩展训练 ;uchar code DIS4 = 电信0805 23号 ;/*/*图像字模省略 */*/uchar code Photo1 =;uchar code Photo2=;uchar code Photo31=0;/该数组为调用前面的数据用/*/* 延时函数 */void delay1(int ms) while(ms-) uchar y; for(y=0;y100;y+) ; /*/*检查LCD忙状态 */bit lcd_busy() bit result; LCD_RS = 0; LCD_RW = 1; LCD_EN = 1; delayNOP(); result = (bit)(P0&0x80); LCD_EN = 0; return(result); /*/*写指令数据到LCD */void lcd_wcmd(uchar cmd) while(lcd_busy(); LCD_RS = 0; LCD_RW = 0; LCD_EN = 0; _nop_(); _nop_(); P0 = cmd; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/*写显示数据到LCD */void lcd_wdat(uchar dat) while(lcd_busy(); LCD_RS = 1; LCD_RW = 0; LCD_EN = 0; P0 = dat; delayNOP(); LCD_EN = 1; delayNOP(); LCD_EN = 0; /*/* LCD初始化设定 */void lcd_init() LCD_PSB = 1; /并口方式 LCD_RST = 0; /液晶复位 delay1(3); LCD_RST = 1; delay1(3); lcd_wcmd(0x34); /扩充指令操作 delay1(5); lcd_wcmd(0x30); /基本指令操作 delay1(5); lcd_wcmd(0x0C); /显示开,关光标 delay1(5); lcd_wcmd(0x01); /清除LCD的显示内容 delay1(5);/*/* 设定显示位置 */void lcd_pos(uchar X,uchar Y) uchar pos; if (X=1) X=0x80; else if (X=2) X=0x90; else if (X=3) X=0x88; else if (X=4) X=0x98; pos = X+Y ; lcd_wcmd(pos); /显示地址/* 闪烁函数 */void lcdflag(uint z) lcd_wcmd(0x08); delay1(z); lcd_wcmd(0x0c); delay1(z); lcd_wcmd(0x08); delay1(z); lcd_wcmd(0x0c); delay1(z); lcd_wcmd(0x08); delay1(200); lcd_wcmd(0x0c); delay1(5); lcd_wcmd(0x01); delay1(5);/* 图形显示 */void photodisplay(uchar *bmp) uchar i,j; lcd_wcmd(0x34); /写数据时,关闭图形显示 for(i=0;i32;i+) lcd_wcmd(0x80+i); /先写入水平坐标值 lcd_wcmd(0x80); /写入垂直坐标值 for(j=0;j16;j+) /再写入两个8位元的数据 lcd_wdat(*bmp+); delay1(1);

温馨提示

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

评论

0/150

提交评论