基于CPU的LCD显示存储示波器设计_第1页
基于CPU的LCD显示存储示波器设计_第2页
基于CPU的LCD显示存储示波器设计_第3页
基于CPU的LCD显示存储示波器设计_第4页
基于CPU的LCD显示存储示波器设计_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、实验报告(2010/2011学年 第 一 学期)题 目:基于cpu的显示存储示波器设计专 业 通信工程 学 生 姓 名 班 级 学 号 授 课 教 师 授 课 单 位 日 期 2011年11月 目录第一部分 实验目的及要求:31实验目的32. 实验要求3第二部分 实验工具及实验器件31.proteus7.4以及keil 2软件的使用33.模数转换芯片adc0804。64.数模转换芯片dac0832。105.sram芯片6264。126.6264的操作方式137.可编程并行i/o接口芯片8255 a148.74ls373 锁存器15第三部分 实验原理及程序代码17第四部分 实验测试结果19第五部

2、分 实验小结和体会19(51单片机)课程设计要求第一部分 实验目的及要求:1实验目的本课程设计在理论课程的基础上,重点培养学生的动手能力,通过理论计算、实际编程、调试、测试、分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作,为下一步结合实际的硬件系统设计准备条件2. 实验要求 基本要求:1 用ad转换器采集输入信号,存入sram(例6264)芯片中,2 进行da转换后回放sram中的数据,通过模拟示波器显示。3 利用键盘控制单步和连续慢放信号波形。4 波形参数可以用数值或图形在数码管或lcd上显示,或者可以结合示波器进行图形回放显示。 发挥部分:1 对采样数据平滑滤波处理, 2

3、对波形回放(图形)的时间缩放调节。 3 对回放波形(图形)的幅度缩放调节。动态显示格式:自定各类设计必须按照实验提供的单片机原理图(dpj.pdf文件),结合自己所选择的题目进行元器件的连接。每组学生只能选择一个与别组不同的设计题目,按照先到先选择的规则进行选题。在仿真设计完成的基础上,有能力的同学可以申请硬件实验板的下载并完成软、硬件结合的课程设计。第二部分 实验工具及实验器件1. proteus7.4以及keil 2软件的使用 proteus软件是英国labcenter electronics公司出版的eda工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它eda工具软

4、件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。proteus是世界上著名的eda工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到pcb设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、pcb设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、hc11、pic10/12/16/18/24/30/dspic33、avr、arm、8086和msp430等,2010年即将增加cortex和d

5、sp系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持iar、keil和mplab等多种编译器。在proteus绘制好原理图后,调入已编译好的目标代码文件:*.hex,可以在proteus的原理图中看到模拟的实物运行状态和过程。而*.hex文件则由keil软件编译后生成。keil uvision2是美国keil software公司出品的51系列兼容单片机c语言软件开发系统,使用接近于传统c语言的语法来开发,与汇编相比,c语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用,而且大大的提高了工作效率和项目开发周期,他还能嵌入汇编,您可以在关键的位置嵌入,使程序达到接近

6、于汇编的工作效率。keilc51标准c编译器为8051微控制器的软件开发提供了c语言环境,同时保留了汇编代码高效,快速的特点。c51编译器的功能不断增强, 使你可以更加贴近cpu本身,及其它的衍生产品。c51已被完全集成到uvision2的集成开发环境中,这个集成开发环境包含:编译器,汇编器,实时操作系统,项目管理器,调试器。uvision2 ide可为它们提供单一而灵活的开发环境。keil c51软件提供丰富的库函数和功能强大的集成开发调试工具,全windows界面,使您能在很短的时间内就能学会使用keil c51来开发您的单片机应用程序 。另外重要的一点,只要看一下编译后生成的汇编代码,就

7、能体会到keil c51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。 有了proteus和keil 我们就需要在这两个软件中建立我们所需要的工程进行实验,具体步骤如下: 第一步:在keil2中建立一个新的工程,并命名, 第二步:选择使用的单片机芯片,我们选择80c31, 第三步:将新创建的.c文件添加到target中。 这样我们就可以在keil2的环境下对单片机的程序进行编译和运行了。2. 51单片机at89c5151单片机是对目前所有兼容intel 8031指令系统的单片机的统称。该系列单片机的始祖是intel的8031单片机,

8、后来随着flash rom技术的发展,8031单片机取得了长足的进展,成为目前应用最广泛的8位单片机之一,其代表型号是atmel公司的at89系列,它广泛应用于工业测控系统之中。目前很多公司都有51系列的兼容机型推出,在目前乃至今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是52系列的单片机一般不具备自编程能力。当前常用的51系列单片机主要产品有:*intel的:80c31、80c51、87c51,80c32、80c52、87c52等;*atmel的:89c51、89c52、89c2051等;*philips、华邦、dallas、siem

9、ens(infineon)等公司的许多产品80c31单片机,它是8位高性能单片机。属于标准的mcs-51的hcmos产品。它结合了hmos的高速和高密度技术及chmos的低功耗特征,标准mcs-51单片机的体系结构和指令系统。 80c31内置中央处理单元、128字节内部数据存储器ram、32个双向输入/输出(i/o)口、2个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。但80c31片内并无程序存储器,需外接rom。 此外,80c31还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结cpu而ram定时器、串行口和中断系统维持其功能。掉电模式下

10、,保存ram数据,时钟振荡停止,同时停止芯片内其它功能。80c31有pdip(40pin)和plcc(44pin)两种封装形式。管脚说明:8031芯片具有40根引脚,其引脚图如图所示:80c31管脚图40根引脚按其功能可分为四类:1. 电源线2根vcc:编程和正常操作时的电源电压,接+5v。vss:地电平。2. 晶振:2根xtal1:振荡器的反相放大器输入。使用外部震荡器是必须接地。xtal2:振荡器的反相放大器输出和内部时钟发生器的输入。当使用外部振荡器时用于输入外部振荡信号。3. i/o口共有p0、p1、p2、p3四个8位口,32根i/o线,其功能如下:1) p0.0p0.7 (ad0ad

11、7)是i/o端口o的引脚,端口o是一个8位漏极开路的双向i/o端口。在存取外部存储器时,该端口分时地用作低8位的地址线和8位双向的数据端口。(在此时内部上拉电阻有效)2) p1.0p1.7端口1的引脚,是一个带内部上拉电阻的8位双向i/o通道,专供用户使用。3) p2.0p2.7 (a8a15)端口2的引脚。端口2是一个带内部上拉电阻的8位双向i/o口,在访问外部存储器时,它输出高8位地址a8a154) p3.0p3.7端口3的引脚。端口3是一个带内部上拉电阻的8位双向i/o端口,该口的每一位均可独立地定义第一i/o口功能或第二i/o口功能。作为第一功能使用时,口的结构与操作与p1口完全相同,

12、第二功能如下示:口引脚 第二功能p3.0rxd(串行输入口)p3.1txd(串行输出口)p3.2 (外部中断)p3.3 (外部中断)p3.4t0(定时器0外部输入)p3.5t1(定时器1外部输入)p3.6 (外部数据存储器写选通)p3.7 (外部数据存储器读选通)3. 模数转换芯片adc0804。adc0804的管脚图如下所示它的主要电气特性如下:l 工作电压:5v,即vcc5v。l 模拟输入电压范围:05v,即0vin5v。l 分辨率:8位,即分辨率为1/28=1/256,转换值介于0255之间。l 转换时间:100us(fck640khz时)。l 转换误差:1lsb。l 参考电压:2.5v

13、,即vref2.5v。1.adc0804的转换原理adc0804是属于连续渐进式(successive approximation method)的a/d转换器,这类型的a/d转换器除了转换速度快(几十至几百us)、分辨率高外,还有价钱便宜的优点,普遍被应用于微电脑的接口设计上。以输出8位的adc0804动作来说明“连续渐进式a/d转换器”的转换原理,动作步骤如下表示(原则上先从左侧最高位寻找起)。第一次寻找结果:10000000 (若假设值输入值,则寻找位假设位1)第二次寻找结果:11000000 (若假设值输入值,则寻找位假设位1)第三次寻找结果:11000000 (若假设值输入值,则寻找

14、位该假设位0)第四次寻找结果:11010000 (若假设值输入值,则寻找位假设位1)第五次寻找结果:11010000 (若假设值输入值,则寻找位该假设位0)第六次寻找结果:11010100 (若假设值输入值,则寻找位假设位1)第七次寻找结果:11010110 (若假设值输入值,则寻找位假设位1)第八次寻找结果:11010110 (若假设值输入值,则寻找位该假设位0)这样使用二分法的寻找方式,8位的a/d转换器只要8次寻找,12位的a/d转换器只要12次寻找,就能完成转换的动作,其中的输入值代表图1的模拟输入电压vin2.分辨率与内部转换频率的计算对8位adc0804而言,它的输出准位共有282

15、56种,即它的分辨率是1/256,假设输入信号vin为05v电压范围,则它最小输出电压是5v/2560.01953v,这代表adc0804所能转换的最小电压值。表1列出的是812位a/d转换器的分辨率和最小电压转换值。表1 a/d转换器的分辨率和最小电压值位数目分辨率最小电压转换值81/2560.01953v101/10240.00488v121/40960.00122v至于内部的转换频率fck,是由图2的clkr(19脚)、clk in(4脚)所连接的r()、c(150pf)来决定。图2 adc0804与cpld&fpga、8051单片机等典型连接图频率计算方式是:fck1/(1.1rc)若

16、以图2的r10k、c150pf为例,则内部的转换频率是fck1/(1.110 k150pf)606khz更换不同的r、c值,会有不同的转换频率,而且频率愈高代表速度愈快。但是需要注意r、c的组合,务必使频率范围是在100khz1460khz之间。 - blogid=42694387010007oe&url=要求adc0804进行模拟/数字的转换,其实可以直接由下面的时序图及图2信号的流向来配合了解。图3 adc0804控制信号时序图以图2、图3信号流向而言,控制adc0804动作的信号应该只有cs、wr、rd。其中intr由高电位转为低电位后,代表adc0804完成这次的模拟/数字转换,而db

17、0db7代表是转换后的数字资料。图3的动作大概可分成4个步骤区间s0、s1、s2、s3,每个步骤区间的动作方式如下:l 步骤s0:cs0、wr0、rd1(由cpld发出信号要求adc0804开始进行模拟/数字信号的转换)。l 步骤s1:cs1、wr1、rd1(adc0804进行转换动作,转换完毕后intr将高电位降至低电位,而转换时间100us)。l 步骤s2:cs0、wr1、rd0(由cpld发出信号以读取adc0804的转换资料)。l 步骤s3:cs1、wr1、rd1(由cpld读取db0db7上的数字转换资料)。由上述步骤说明,可以归纳出所要设计的cpld动作功能有:l 负责在每个步骤送

18、出所需的cs、wr、rd控制信号。l 在步骤s1时,监控intr信号是否由低电位变高电位,如此以便了解adc0804的转换动作结束与否。l 在步骤s3,读取转换的数字资料db0db74. 数模转换芯片dac0832。dac0832是8分辨率的d/a转换集成芯片。与微处理器完全兼容。这个da芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。d/a转换器由8位输入锁存器、8位dac寄存器、8位d/a转换电路及转换控制电路构成。dac0832的主要特性参数如下:* 分辨率为8位;* 电流稳定时间1us;* 可单缓冲、双缓冲或直接数字输入;* 只需在满量程下调整其线性度

19、;* 单一电源供电(+5v+15v);* 低功耗,20mw。dac0832结构:* d0d7:8位数据输入线,ttl电平,有效时间应大于90ns(否则锁存器的数据会出错);* ile:数据锁存允许控制信号输入线,高电平有效;* cs:片选信号输入线(选通数据锁存器),低电平有效;* wr1:数据锁存器写选通输入线,负脉冲(脉宽应大于500ns)有效。由ile、cs、wr1的逻辑组合产生le1,当le1为高电平时,数据锁存器状态随输入数据线变换,le1的负跳变时将输入数据锁存;* xfer:数据传输控制信号输入线,低电平有效,负脉冲(脉宽应大于500ns)有效;* wr2:dac寄存器选通输入线

20、,负脉冲(脉宽应大于500ns)有效。由wr2、xfer的逻辑组合产生le2,当le2为高电平时,dac寄存器的输出随寄存器的输入而变化,le2的负跳变时将数据锁存器的内容打入dac寄存器并开始d/a转换。* iout1:电流输出端1,其值随dac寄存器的内容线性变化;* iout2:电流输出端2,其值与iout1值之和为一常数;* rfb:反馈信号输入线,改变rfb端外接电阻值可调整转换满量程精度;* vcc:电源输入端,vcc的范围为+5v+15v;* vref:基准电压输入线,vref的范围为-10v+10v;* agnd:模拟信号地* dgnd:数字信号地dac0832芯片:dac08

21、32dac0832是8分辨率的d/a转换集成芯片。与微处理器完全兼容。这个da芯片以其价格低廉、接口简单、转换控制容易等优点,在单片机应用系统中得到广泛的应用。d/a转换器由8位输入锁存器、8位dac寄存器、8位d/a转换电路及转换控制电路构成。1.dac0832的结构dac0832中有两级锁存器,第一级锁存器称为输入寄存器,它的锁存信号为ile;第二级锁存器称为dac寄存器,它的锁存信号为传输控制信号 。因为有两级锁存器,dac0832可以工作在双缓冲器方式,即在输出模拟信号的同时采集下一个数字量,这样能有效地提高转换速度。此外,两级锁存器还可以在多个d/a转换器同时工作时,利用第二级锁存信

22、号来实现多个转换器同步输出。le为高电平、 和 为低电平时, 为高电平,输入寄存器的输出跟随输入而变化;此后,当 由低变高时, 为低电平,资料被锁存到输入寄存器中,这时的输入寄存器的输出端不再跟随输入资料的变化而变化。对第二级锁存器来说, 和 同时为低电平时, 为高电平,dac寄存器的输出跟随其输入而变化;此后,当 由低变高时, 变为低电平,将输入寄存器的资料锁存到dac寄存器中。2. dac0832的引脚特性dac0832是20引脚的双列直插式芯片。各引脚的特性如下:cs片选信号,和允许锁存信号ile组合来决定 是否起作用,低有效。ile允许锁存信号,高有效。wr1写信号1,作为第一级锁存信

23、号,将输入资料锁存到输入寄存器(此时, 必须和 、ile同时有效),低有效。wr2写信号2,将锁存在输入寄存器中的资料送到dac寄存器中进行锁存(此时,传输控制信号 必须有效)低有效。xfer传输控制信号,低有效。di7di08位数据输入端。iout1模拟电流输出端1。当dac寄存器中全为1时,输出电流最大,当dac寄存器中全为0时,输出电流为0。iout2模拟电流输出端2。iout1+iout2=常数。rfb反馈电阻引出端。dac0832内部已经有反馈电阻,所以,rfb端可以直接接到外部运算放大器的输出端。相当于将反馈电阻接在运算放大器的输入端和输出端之间。vref参考电压输入端。可接电压范

24、围为10v。外部标准电压通过vref与t型电阻网络相连。vcc芯片供电电压端。范围为+5v+15v,最佳工作状态是+15v。agnd模拟地,即模拟电路接地端。dgnd数字地,即数字电路接地端。3.dac0832的工作方式dac0832进行d/a转换,可以采用两种方法对数据进行锁存。第一种方法是使输入寄存器工作在锁存状态,而dac寄存器工作在直通状态。具体地说,就是使 和 都为低电平,dac寄存器的锁存选通端得不到有效电平而直通;此外,使输入寄存器的控制信号ile处于高电平、 处于低电平,这样,当 端来一个负脉冲时,就可以完成1次转换。第二种方法是使输入寄存器工作在直通状态,而dac寄存器工作在

25、锁存状态。就是使 和 为低电平,ile为高电平,这样,输入寄存器的锁存选通信号处于无效状态而直通;当 和 端输入1个负脉冲时,使得dac寄存器工作在锁存状态,提供锁存数据进行转换。根据上述对dac0832的输入寄存器和dac寄存器不同的控制方法,dac0832有如下3种工作方式:单缓冲方式。单缓冲方式是控制输入寄存器和dac寄存器同时接收资料,或者只用输入寄存器而把dac寄存器接成直通方式。此方式适用只有一路模拟量输出或几路模拟量异步输出的情形。双缓冲方式。双缓冲方式是先使输入寄存器接收资料,再控制输入寄存器的输出资料到dac寄存器,即分两次锁存输入资料。此方式适用于多个d/a转换同步输出的情

26、节。直通方式。直通方式是资料不经两级锁存器锁存,即 cs*,xfer* ,wr1* ,wr2* 均接地,ile接高电平。此方式适用于连续反馈控制线路和不带微机的控制系统,不过在使用时,必须通过另加i/o接口与cpu连接,以匹配cpu与d/a转换。5. sram芯片6264。6264的容量为8kb,是28引脚双列直插式芯片,采用cmos工艺制造a12a0(address inputs):地址线,可寻址8kb的存储空间。d7d0(data bus):数据线,双向,三态。oe(output enable):读出允许信号,输入,低电平有效。we(write enable):写允许信号,输入,低电平有效

27、。ce1(chip enable):片选信号1,输入,在读/写方式时为低电平。ce2(chip enable):片选信号2,输入,在读/写方式时为高电平。vcc:+5v工作电压。gnd:信号地。6. 6264的操作方式6264的操作方式由, ce1 , ce2的共同作用决定 写入:当和为低电平,且和ce2为高电平时,数据输入缓冲器打开,数据由数据线d7d0写入被选中的存储单元。 读出:当和为低电平,且和ce2为高电平时,数据输出缓冲器选通,被选中单元的数据送到数据线d7d0上。 保持:当为高电平,ce2为任意时,芯片未被选中,处于保持状态,数据线呈现高阻状态。微处理器通过数据总线、地址总线及控

28、制总线与存储器连接,如下图所示:控制总线地址总线存储器cpu数据总线地址总线为地址信号,用来指明选中的存储单元地址。数据总线为数据信号,它是微处理器送往存储器的信息或存储器送往微处理器的信息。它包括指令和数据。控制总线发出存储器读写信号,以便从rom、ram中读出指令或数据,或者向ram写入数据。在微机系统中,常用的静态ram有6116、6264、62256等。在本实验中使用的是6264。6264为8k8位的静态ram,其逻辑图如下: 6264a012 vcci/o07wroecs2 gndcs1其中a012为13根地址线,i/o07为8根数据线,cs1 、cs2为两个片选端,oe为数据输出选

29、通端,wr为写信号端。其工作方式见下表:控制信号cs1cs2oewr数据线读lhlh输出写lhl输入非选h高阻态7. 可编程并行i/o接口芯片8255 a8255是intel公司生产的可编程并行i/o接口芯片,有3个8位并行i/o口。具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。 其各口功能可由软件选择,使用灵活,通用性强。8255可作为单片机与多种外设连接时的中间接口电路。 8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控 制线接口。同时必须具有与外设连接的接口a、b、c口。由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构

30、分为3个部分:与cpu连接 部分、与外设连接部分、控制部分。引脚功能:reset:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有i/o口均被置成输入方式。 cs:芯片选择信号线,当这个输入引脚为低电平时,即/cs=0时,表示芯片被选中,允许8255与cpu进行通讯;/cs=1时,8255无法与cpu做数据传输. rd:读信号线,当这个输入引脚为低电平时,即/rd=0且/cs=0时,允许8255通过数据总线向cpu发送数据或状态信息,即cpu从8255读取信息或数据。 wr:写入信号,当这个输入引脚为低电平时,即/wr=0且/cs=0时,允许cpu将数据或控制

31、字写入8255。 d0d7:三态双向数据总线,8255与cpu数据传送的通道,当cpu 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。 8255具有3个相互独立的输入/输出通道端口,用+5v单电源供电,能在一下三种方式下工作。 方式0基本输入输出方式;方式1选通输入/出方式;方式三双向选通输入/输出方式; pa0pa7:端口a输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。 工作于三种方式中的任何一种; pb0pb7:端口b输入输出线,一个8位的i/o锁存器, 一个8位的输入输出缓冲器。 不能工作于方式二; pc0pc7:端口

32、c输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口c可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口a和端口b配合使用,可作为控制信号输出或状态信号输入端口。不能工作于方式一或二。 a1,a0:地址选择线,用来选择8255的pa口,pb口,pc口和控制寄存器. 当a1=0,a0=0时,pa口被选择; 当a1=0,a0=1时,pb口被选择; 当a1=1,a0=0时,pc口被选择; 当a1=1.a0=1时,控制寄存器被选择.8. 74ls373 锁存器当三态允许控制端 oe 为低电平时,o0o7 为正常逻辑状态,可用来驱动负载

33、或总线。当 oe 为高电平时,o0o7 呈高阻态,即不驱动总线,也不为总线的负载,但锁存器内部的逻辑操作不受影响。 当锁存允许端 le 为高电平时,o 随数据 d 而变。当 le 为低电平时,o 被锁存在已建立的数据电平。当 le 端施密特触发器的输入滞后作用,使交流和直流噪声抗扰度被改善 400mv。 引出端符号: d0d7 数据输入端 oe 三态允许控制端(低电平有效) le 锁存允许端 o0o7 输出端 真值表: dnleoeonhhlhlhllxllq0xxh高阻态9. lcd液晶显示器件lm016l第三部分 实验原理及程序代码:1. 硬件部分电路设计电路图如图:2. 软件部分设计#d

34、efine uchar unsigned char#define uint unsigned intvoid delay(unsigned char t); void delay1(); void int1602(); void lcd_w_dat(unsigned char dat); void lcd_w_cmd(unsigned char com); unsigned char lcd_r_start();void setseat (uchar a,uchar b);void display(uchar x ,uchar y,uchar *ptr) ; #include /库函数头文件,

35、代码中引用了_nop_()函数 #include #include sbit rs=p30; sbit rw=p31;sbit e=p32; #define uchar unsigned char#define uint unsigned int/*函数名称:delay功 能:延时0.5ms左右参 数:t-t个0.5ms返回值 :无*/void delay(unsigned char t) unsigned char j,i; for(i=0;it;i+) for(j=0;j50;j+); /*函数名称:delay1功 能:液晶用精确延时参 数:无返回值 :无*/void delay1() _

36、nop_(); _nop_(); _nop_();/*函数名称:lcd_w_dat功 能:写入一个字节要显示的数据参 数:dat-要显示的数据返回值 :无*/void lcd_w_dat(unsigned char dat) unsigned char i; do / 查忙操作 i=lcd_r_start();/ 调用读状态字函数 i=i&0x80; / 与操作屏蔽掉低7位 delay(2); while(i!=0); / lcd忙,继续查询,否则退出循环 rw=0; delay1(); rs=1;/ rw=0,rs=1,写数据 delay1(); e=1;/ e端时序 delay1(); p

37、1=dat;/ 将dat中的显示数据写入lcd数据口 delay1(); e=0; delay1(); rw=1; delay(255);/*函数名称:lcd_w_cmd功 能:写入一个字节命令参 数:com-要设置的命令返回值 :无*/void lcd_w_cmd(unsigned char com) unsigned char i; do / 查lcd忙操作 i=lcd_r_start(); / 调用读状态字函数 i=i&0x80; / 与操作屏蔽掉低7位 delay(2); while(i!=0); / lcd忙,继续查询,否则退出循环 rw=0; delay1(); rs=0; / r

38、w=0,rs=0,写lcd命令字 delay1(); e=1; /e端时序 delay1(); p1=com; /将com中的命令字写入lcd数据口 delay1(); e=0; delay1(); rw=1; delay(255);/*函数名称:lcd_r_start()功 能:读取lcd状态参 数:s-lcd状态字返回值 :无*/unsigned char lcd_r_start() unsigned char s; rw=1;/rw=1,rs=0,读lcd状态 delay1(); rs=0; delay1(); e=1; /e端时序 delay1(); s=p1;/从lcd的数据口读状态

39、 delay1(); e=0; delay1(); rw=0; delay1(); return(s);/返回读取的lcd状态字/*函数名称:int1602功 能:lcd初始化参 数:无返回值 :无*/void int1602() lcd_w_cmd(0x3c);/ 设置工作方式 lcd_w_cmd(0x0c);/ 设置光标 lcd_w_cmd(0x01);/ 清屏 lcd_w_cmd(0x06);/ 设置输入方式 lcd_w_cmd(0x80);/ 设置初始显示位置/*函数名称:display功 能:让液晶从某个位置起连续显示一个字符串参 数:x-位置的列坐标 y-位置的行坐标 ptr-指向

40、字符串存放位置的指针返回值 :无*/void display(uchar x ,uchar y,uchar *ptr) uchar *temp; uchar i,n = 0; temp = ptr; while(*ptr+ != 0) n+; /计算字符串有效字符的个数 setseat (x,y) ; for (i=0;in;i+,temp+) lcd_w_dat(*temp); /*函数名称:setseat功 能:设定起始位置参 数:a-行 b-列返回值 :无*/void setseat (uchar a,uchar b) if(a=1) lcd_w_cmd(0x80+b);/ 第1行 第 b位 if(a=2) lcd_w_cmd(0x80+0x40+b);/ 第2行 第 b

温馨提示

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

评论

0/150

提交评论