多功能信号发生器的设计与实现_第1页
多功能信号发生器的设计与实现_第2页
多功能信号发生器的设计与实现_第3页
多功能信号发生器的设计与实现_第4页
多功能信号发生器的设计与实现_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

题目多功能信号发生器的设计与实现学生姓名王振华学号1213014069所在学院专业班级电子信息工程指导教师梁芳完成地点物理与电信工程学院实验室2023年6月2日多功能信号发生器的设计与实现王振华〔陕西理工学院物理与电信工程学院电子信息工程专业,2023级3班,陕西汉中723000〕指导教师:梁芳[摘要]本文介绍的是利用STC12C5A60S2单片机和数模转换器件DAC0832产生所需不同信号的低频信号源,其信号幅度和频率都是可以按要求控制的。文中简要介绍了DAC0832数模转换器的结构原理和使用方法,STC12C5A60S2的根底理论,以及与设计电路有关的各种芯片。着重介绍了如何利用单片机控制D/A转换器产生上述信号的硬件电路和软件编程。信号频率幅度也按要求可调。本设计核心任务是:以STC12C5A60S2为核心,结合D/A转换器和DAC0832等器件,用仿真软件设计硬件电路,用C语言编写驱动程序,以实现程序控制产生正弦波、三角波、方波、三种常用低频信号。可以通过键盘选择波形和输入任意频率值。[关键词]单片机;LCD1602;信号发生器;DAC0832DesignandimplementationofmultifunctionsignalgeneratorAuthor:ZhenhuaWang(Grade12,Class03,MajorinElectronics&Informationengineering,Physics&TelecommunicationsengineeringDept.,ShaanxiUniversityofTechnology,Hanzhong723000,Shaanxi)Tutor:FangLiangAbstract:ThisarticledescribestheSTC12C5A60S2microcontrolleranddigitaltoanalogconverterDAC0832toproducethedesiredsignalofthelowfrequencysignalsource,thesignalamplitudeandfrequencycanbecontrolledasrequired.ThearticlebrieflydescribesthestructureofprinciplesanduseoftheDAC0832digital-to-analogconverter,theSTC12C5A60S2basictheoryanddesignofcircuitsavarietyofchips.ThepaperfocusesonhowtousemicrocontrollertocontroltheD/Aconvertertoproducethehardwareandsoftwareprogrammingoftheabovesignals.Thesignalfrequencyrangeisalsoadjustableasrequired.Thecoreofthedesigntasksare:STC12C5A60S2astheD/AconverterandDAC0832devices,circuitsimulationsoftware,designhardwaredriverswritteninC,inordertoachieveprocesscontroltoproducesinewave,trianglewave,squarewave,threecommonlyusedlow-frequencysignals.Waveformsandenteranyfrequencyvaluecanbeselectedviathekeyboard.KeyWords:onSTC12C5A60S2functionwaveformgeneratorDAC0832squarewave,trianglewave,sinewave,sawtoothwave目录240981引言1287541.1目的和意义194941.2研究概况及开展趋势146691.3本系统主要功能2352.总体方案论证与设计32030631133931388832981041065342843044948577805216273.1.1STC12C5A60S2单片机主要特性5121783.1.2STC12C5A60S2单片机的中断系统7237233.1.3单片机最小系统设计8140653.2LCD液晶显示器简介8279953.2.1液晶原理介绍831901928873916928101880510293343.4.1直接数字合成技术介绍11261793.4.2DAC0832芯片介绍12309123.4.3DAC0832波形发生电路设计1322231348323.6负压转换电路设计14219581531321152041316957418137018233941828045结论1928045致谢 2028045参考文献 2122647附录A 2225524附录B 234821附录C244821附录D 404821附录E 454821附录F 481引言1.1目的和意义信号发生器亦称波形发生器,主要作为实验用信号源,是现今各种电子电路实验设计应用中必不可少的仪器设备之一。目前,市场上常见的波形发生器多为纯硬件的搭接而成,波形种类多为锯齿、正弦、方波、三角等波形。用分立元件组成的信号发生器,通常是单信号发生器且频率不高,其工作不很稳定,不易调试;用集成芯片的信号发生器,可到达较高的频率和产生多种波形信号,但电路较为复杂且不易调试。利用DA转换器配合单片机可以实现波形产生的功能,而且可以根据需要进行调整,设计灵活。随着电子测量及其他部门对各类信号发生器的广泛需求及电子技术的迅速开展促使信号发生器种类增多性能提高尤其随着70年代微处理器的出现更促使信号发生器向着自动化智能化方向开展现在许多信号发生器带有微处理器因而具备了自校自检自动故障诊断和自动波形形成和修正等功能可以和控制计算机及其他测量仪器一起方便的构成自动测试系统当前信号发生器总的趋势是向着宽频率覆盖低功耗高频率精度多功能自动化和智能化方向开展[1]。在科学研究工程教育及生产实践中如工业过程控制教学实验机械振动试验动态分析材料试验生物医学等领域常常需要用到低频信号发生器而在我们日常生活中以及一些科学研究中锯齿波和正弦波矩形波信号是常用的根本测试信号譬如在示波器电视机等设备中为了使电子按照一定规律运动以利用荧光屏显示图像常用到锯齿波产生器作为时基电路信号发生器作为一种通用的电子仪器在生产科研测控通讯等领域都得到了广泛的应用但市面上能看到的仪器在频率精度带宽波形种类及程控方面都已不能满足许多方面实际应用的需求加之各类功能的半导体集成芯片的快速生产都使我们研制一种低功耗宽频带能产生多种波形并具有程控等低频的信号发生器成为可能[2]。信号发生器作为一种常见的电子仪器设备,既能够构成独立的信号源,也可以是高新能的网络分析仪,频谱仪以及自动测试装备的组成局部,函数信号发生器的关键技术是多种高性能仪器的根本组成局部,函数信号发生器的关键技术是多种高性能仪器的支撑技术,因为它是能够提高质量的精密信号源及扫描源,可使相应系统的检测过程大大简化,降低检测费用并且提高检测精度。1.2研究概况及开展趋势信号发送器是指产生所需参数的电测试信号的仪器。因其应用广泛,种类繁多,特性各异,分类也不尽一致。按信号波形可分为正弦信号、函数信号、脉冲信号和随机信号发生器等四大类。信号波形发生器具有连续的相位变换、和频率稳定性等优点,不仅可以模拟各种复杂信号,还可对频率、幅值、相移、波形进行动态、及时的控制,并能够与其它仪器进行通讯,组成自动测试系统,因此被广泛用于自动控制系统、震动鼓励、通讯和仪器仪表领域。在70年代前,信号发生器主要有两类:正弦波和脉冲波,而信号发生器介于两类之间,能够提供正弦波、余弦波、方波、三角波、上弦波等几种常用标准波形,产生其它波形时,需要采用较复杂的电路和机电结合的方法。这个时期的波形发生器多采用模拟电子技术,而且模拟器件构成的电路存在着尺寸大、价格贵、功耗大等缺点,并且要产生较为复杂的信号波形,那么电路结构非常复杂。同时,主要表现为两个突出问题,一是通过电位器的调节来实现输出频率的调节,因此很难将频率调到某一固定值;二是脉冲的占空比不可调节。在70年代后,微处理器的出现,可以利用处理器、A/D/和D/A,硬件和软件使波形发生器的功能扩大,产生更加复杂的波形。这时期的波形发生器多以软件为主,实质是采用微处理器对DAC的程序控制,就可以得到各种简单的波形。90年代末,出现几种真正高性能、高价格的信号发生器、但是HP公司推出了型号为HP770S的信号模拟装置系统,它由HP8770A任意波形数字化和HP1776A波形发生软件组成。HP8770A实际上也只能产生8中波形,而且价格昂贵。不久以后,Analogic公司推出了型号为Data-2023的多波形合成器,Lecroy公司生产的型号为9100的任意波形发生器等。到了二十一世纪,随着集成电路技术的高速开展,出现了多种工作频率可过GHz的DDS芯片,同时也推动了信号波形发生器的开展,2003年,Agilent的产品33220A能够产生17种波形,最高频率可到达20M,2005年的产品N6030A能够产生高达500MHz的频率,采样的频率可达1.25GHz。由上面的产品可以看出,信号波形发生器开展很快近几年来,国际上波形发生器技术开展主要表达在以下几个方面:〔1〕过去由于频率很低应用的范围比拟狭小,输出波形频率的提高,使得波形发生器能应用于越来越广的领域。波形发生器软件的开发正使波形数据的输入变得更加方便和容易。波形发生器通常允许用一系列的点、直线和固定的信号段把波形数据存入存储器。同时可以利用一种强有力的数学方程输入方式,复杂的波形可以由几个比拟简单的公式复合成v=f(t)形式的波形方程的数学表达式产生。从而促进了信号波形发生器向任意波形发生器的开展,各种计算机语言的飞速开展也对任意波形发生器软件技术起到了推动作用。目前可以利用可视化编程语言(如VisualBasic,VisualC等等)编写任意波形发生器的软面板,这样允许从计算机显示屏上输入任意波形,来实现波形的输入。〔2〕与VXI资源结合。目前,波形发生器由独立的台式仪器和适用于个人计算机的插卡以及新近开发的VXI模块。由于VXI总线的逐渐成熟和对测量仪器的高要求,在很多领域需要使用VXI系统测量产生复杂的波形,VXI的系统资源提供了明显的优越性,但由于开发VXI模块的周期长,而且需要专门的VXI机箱的配套使用,使得波形发生器VXI模块仅限于航空、军事及国防等大型领域。在民用方面,VXI模块远远不如台式仪器更为方便。〔3〕随着信息技术蓬勃开展,台式仪器在走了一段下坡路之后,又重新繁荣起来。不过现在新的台式仪器的形态,和几年前的己有很大的不同。这些新一代台式仪器具有多种特性,可以执行多种功能。而且外形尺寸与价格,都比过去的类似产品减少了一半。1.3本系统主要功能本系统设计制作一个基于DAC0832的信号发生器。能实现以下几种功能:〔1〕用户可以通过按键设定频率、波形、幅度这些参数。。〔3〕本系统输出方波、三角波、正弦波和锯齿波。最小步进值为1HZ。〔4〕系统所有的设置的参数都能在LCD1602上显示。〔5〕正弦波:1Hz~10KHz;三角波:1Hz~5KHz;方波:1Hz~10KHz;锯齿波:1Hz~5KHz。2.总体方案论证与设计 根据所要实现的功能划分,系统一共需要以下几个模块:主控模块、显示模块、信号产生模块、程控增益模块和负压产生模块,以下就针对这几个模块的选型和论证进行讨论。方案一: 采用MSP430系列单片机,该单片机是TI公司1996年开始推向市场的一种16位超低功耗的混合信号处理器。其内部集成了很多模拟电路、数字电路和微处理器,提供强大的功能。不过该芯片昂贵不适合一般的设计开发。方案二 采用51系列的单片机,该单片机是一个高可靠性,超低价,无法解密,高性能的8位单片机,32个IO口,且STC系列的单片机可以在线编程、调试,方便地实现程序的下载与整机的调试。因此选用方案二中的51系列单片机作为主控芯片。方案一: 采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比拟适宜,如采用在显示数字显得太浪费,且价格也相对较高,所以不用此种作为显示[3]。方案二: 采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最适宜,而且采用动态扫描法与单片机连接时,占用单片机口线少。但是由于数码管动态扫描需要借助74LS164移位存放器进行移位,该芯片在电路调试时往往有很多障碍,所以不采用LED数码管作为显示。方案三: 采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多样,清晰可见,对于本设计而言一个LCD1602的液晶屏即可,价格也还能接受,需要的借口线较多,但会给调试带来诸多方便。所以本设计中方案三中的LCD1602液显示屏作为显示模块。信号产生模块的选型和论证方案一: 利用R2R型DA转换器DAC0832进行产生信号,把要产生的信号根据其规那么建立一个ROM表,单片机每隔一段时间根据ROM表的值去改变数模转换器的电压输出值,如果ROM表示根据正弦变化记录的表那么输出的波形那么为正弦波,如此类推,只用通过改变时间的间隔即可改变输出波形的频率。方案二: 利用集成芯片DDS芯片AD9833进行产生信号,该芯片可以通过与单片机通信设定其输出波形和频率,而且设定的频率精度非常高。DDS芯片中主要包括频率控制存放器、高速相位累加器和正弦计算器三个局部。频率控制存放器可以串行或并行的方式装载并存放用户输入的频率控制码。方案一由于使用的独立的DA转换器,设计比拟灵活,只要预先先把波形的ROM表生产好存储到单片机内即可输出,定频率的设定波形而选用DDS芯片那么只需要通过固定的时序控制那么能方便产生设。但是由于DDS本钱较为高昂,因此本设计选用DA转换器来实现波形产生的功能。方案一:选用DAC0832搭配外部电路构成程控放大器,由于DAC0832是一个8位DA转换器,因此能设置成256档放大倍数。通过单片机控制DA转换器的数字端口即可改变放大倍数。方案二:选用VCA810作为主芯片进行程控放大,VCA是一款高性能的压控放大器芯片,它有一个增益控制引脚,用户可以通过改变该脚的电压进行增益的控制,增益的控制范围为-40dB~40dB,不过VCA810需要搭配外部的DA转换器才能实现程控放大的功能。由于DAC0832的价格较VCA810廉价,而且VCA810需要搭配外部DA转换器才能实现增益改变的功能,因此这里选用DAC0832进行程控放大。由于DAC0832搭配运放后输出的电压为负电压,为了能正常输出,因此运放的电源需要正负电源供电,因为系统供电只有一个5V电源,为了得到一个-5V电源,这里使用了ICL7660负压产生芯片来实现。2.6系统整体设计概述本系统以单片机为控制核心,对系统进行初始化,主要完成对键盘的响应、液晶显示、波形产生、增益调节等功能的控制,起到总控和协调各模块之间工作的作用。放大电路数/模转换电路单放大电路数/模转换电路单片机显示电路波形输出复位电路波形输出复位电路键盘电路键盘电路图2.1系统结构框图3.系统硬件电路设计3.1主控模块主控模块模块在整个系统中起着统筹的作用,需要检测键盘,波形控制等各种功能,同时驱动液晶显示相关参数,在这里我们选用了51系列单片机中的STC12C5A60S2单片机作为系统的主控芯片[5]。51系列单片机最初是由Intel公司开发设计的,但后来Intel公司把51核的设计方案卖给了几家大的电子设计生产商,譬如SST、Philip、Atmel等大公司。因此市面上出现了各式各样的均以51为内核的单片机。这些各大电子生产商推出的单片机都兼容51指令、并在51的根底上扩展一些功能而内部结构是与51一致的[6]。STC12C5A60S2有40个引脚,4个8位并行I/O口,1个全双工异步串行口,同时内含5个中断源,2个优先级,2个16位定时/计数器。STC12C5A60S2的存储器系统由4K的程序存储器(掩膜ROM),和128B的数据存储器(RAM)组成。STC12C5A60S2单片机的根本组成框图见图3-1。图3.1STC12C5A60S2单片机结构图3.1.1STC12C5A60S2单片机主要特性1.一个8位的微处理器(CPU)。2.片内数据存储器RAM(128B),用以存放可以读/写的数据,如运算的中间结果、最终结果以及欲显示的数据等,SST89系列单片机最多提供1K的RAM。3.片内程序存储器ROM(4KB),用以存放程序、一些原始数据和表格。但也有一些单片机内部不带ROM/EPROM,如8031,8032,80C31等。目前单片机的开展趋势是将RAM和ROM都集成在单片机里面,这样既方便了用户进行设计又提高了系统的抗干扰性。SST公司推出的89系列单片机分别集成了16K、32K、64KFlash存储器,可供用户根据需要选用。4.四个8位并行I/O接口P0~P3,每个口既可以用作输入,也可以用作输出。5.两个定时器/计数器,每个定时器/计数器都可以设置成计数方式,用以对外部事件进行计数,也可以设置成定时方式,并可以根据计数或定时的结果实现计算机控制。为方便设计串行通信,目前的52系列单片机都会提供3个16位定时器/计数器[4]。6.五个中断源的中断控制系统。现在新推出的单片机都不只5个中断源,例如SST89E58RD就有9个中断源。7.一个全双工UART(通用异步接收发送器)的串行I/O口,用于实现单片机之间或单机与微机之间的串行通信。8.片内振荡器和时钟产生电路,但石英晶体和微调电容需要外接。最高允许振荡频率为12MHz。SST89V58RD最高允许振荡频率达40MHz,因而大大的提高了指令的执行速度。图3.2STC12C5A60S2单片机管脚图局部引脚说明:1.时钟电路引脚XTAL1和XTAL2:XTAL2(18脚):接外部晶体和微调电容的一端;片内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体固有频率。假设需采用外部时钟电路时,该引脚输入外部时钟脉冲。要检查振荡电路是否正常工作,可用示波器查看XTAL2端是否有脉冲信号输出。XTAL1(19脚):接外部晶体和微调电容的另一端;在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,该引脚必须接地。2.控制信号引脚RST,ALE,PSEN和EA:RST/VPD(9脚):RST是复位信号输入端,高电平有效。当此输入端保持备用电源的输入端。当主电源Vcc发生故障,降低到低电平规定值时,将+5V电源自动两个机器周期(24个时钟振荡周期)的高电平时,就可以完成复位操作。RST引脚的第二功能是VPD,即接入RST端,为RAM提供备用电源,以保证存储在RAM中的信息不丧失,从而合复位后能继续正常运行。ALE/PROG(30脚):地址锁存允许信号端。当8051上电正常工作后,ALE引脚不断向外输出正脉冲信号,此频率为振荡器频率fOSC的1/6。CPU访问片外存储器时,ALE输出信号作为锁存低8位地址的控制信号。平时不访问片外存储器时,ALE端也以振荡频率的1/6固定输出正脉冲,因而ALE信号可以用作对外输出时钟或定时信号。如果想确定8051/8031芯片的好坏,可用示波器查看ALE端是否有脉冲信号输出。如有脉冲信号输出,那么8051/8031根本上是好的。ALE端的负载驱动能力为8个LS型TTL(低功耗甚高速TTL)负载。此引脚的第二功能PROG在对片内带有4KBEPROM的8751编程写入(固化程序)时,作为编程脉冲输入端。PSEN(29脚):程序存储允许输出信号端。在访问片外程序存储器时,此端定时输出负脉冲作为读片外存储器的选通信号。此引肢接EPROM的OE端(见后面几章任何一个小系统硬件图)。PSEN端有效,即允许读出EPROM/ROM中的指令码。PSEN端同样可驱动8个LS型TTL负载。要检查一个8051/8031小系统上电后CPU能否正常到EPROM/ROM中读取指令码,也可用示波器看PSEN端有无脉冲输出。如有那么说明根本上工作正常。EA/Vpp(31脚):外部程序存储器地址允许输入端/固化编程电压输入端。当EA引脚接高电平时,CPU只访问片内EPROM/ROM并执行内部程序存储器中的指令,但当PC(程序计数器)的值超过0FFFH(对8751/8051为4K)时,将自动转去执行片外程序存储器内的程序。当输入信号EA引脚接低电平(接地)时,CPU只访问外部EPROM/ROM并执行外部程序存储器中的指令,而不管是否有片内程序存储器。对于无片内ROM的8031或8032,需外扩EPROM,此时必须将EA引脚接地。此引脚的第二功能是Vpp是对8751片内EPROM固化编程时,作为施加较高编程电压(一般12V~21V)的输入端。3.输入/输出端口P0/P1/P2/P3:P0口(~,39~32脚):P0口是一个漏极开路的8位准双向I/O口。作为漏极开路的输出端口,每位能驱动8个LS型TTL负载。当P0口作为输入口使用时,应先向口锁存器(地址80H)写入全1,此时P0口的全部引脚浮空,可作为高阻抗输入。作输入口使用时要先写1,这就是准双向口的含义。在CPU访问片外存储器时,P0口分时提供低8位地址和8位数据的复用总线。在此期间,P0口内部上拉电阻有效。P1口(~,1~8脚):P1口是一个带内部上拉电阻的8位准双向I/O口。P1口每位能驱动4个LS型TTL负载。在P1口作为输入口使用时,应先向P1口锁存地址(90H)写入全1,此时P1口引脚由内部上拉电阻拉成高电平。P2口~,21~28脚):P2口是一个带内部上拉电阻的8位准双向I/O口。P口每位能驱动4个LS型TTL负载。在访问片外EPROM/RAM时,它输出高8位地址。P3口~,10~17脚):P3口是一个带内部上拉电阻的8位准双向I/O口。P3口每位能驱动4个LS型TTL负载。P3口与其它I/O端口有很大的区别,它的每个引脚都有第二功能,如下::(RXD)串行数据接收。:(RXD)串行数据发送。:(INT0#)外部中断0输入。:(INT1#)外部中断1输入。:(T0)定时/计数器0的外部计数输入。:(T1)定时/计数器1的外部计数输入。:(WR#)外部数据存储器写选通。:(RD#)外部数据存储器读选通。3.1.2STC12C5A60S2单片机的中断系统STC12C5A60S2系列单片机的中断系统有5个中断源,2个优先级,可以实现二级中断效劳嵌套。由片内特殊功能存放器中的中断允许存放器IE控制CPU是否响应中断请求;由中断优先级存放器IP安排各中断源的优先级;同一优先级内各中断同时提出中断请求时,由内部的查询逻辑确定其响应次序。[7]在单片机应用系统中,常常会有定时控制需求,如定时输出、定时检测、定时扫描等;也经常要对外部事件进行计数。STC12C5A60S2单片机内集成有两个可编程的定时/计数器:T0和T1,它们既可以工作于定时模式,也可以工作于外部事件计数模式,此外,T1还可以作为串行口的波特率发生器。3.1.3单片机最小系统设计图3.3单片机最小系统电路图 图3.3为单片机最小系统电路图,单片机最小系统有单片机、时钟电路、复位电路组成,时钟电路选用了12MHZ的晶振提供时钟,作用为给单片机提供一个时间基准,其中执行一条根本指令需要的时间为一个机器周期,单片机的复位电路,按下复位按键之后可以使单片机进入刚上电的起始状态。图中10K排阻为P0口的上拉电阻,由于P0口跟其他IO结构不一样为漏极开路的结构,因此要加上拉电阻才能正常使用。3.2LCD液晶显示器简介由于本设计中要求显示界面显示一些参数,因此这里选用了LCD1602作为界面显示,可以实时的显示当前信号输出的频率、波形、占空比以及幅值,同时也方便用户设置相关的参数。3.2.1液晶原理介绍液晶显示器(LCD)英文全称为LiquidCrystalDisplay,它一种是采用了液晶控制透光度技术来实现色彩的显示器。和CRT显示器相比,LCD的优点是很明显的。由于通过控制是否透光来控制亮和暗,当色彩不变时,液晶也保持不变,这样就无须考虑刷新率的问题。显示接口用来显示系统的状态,命令或采集的电压数据。本系统显示局部用的是LCD液晶模块,采用一个16×2的字符型液晶显示模块[3]。点阵图形式液晶由M行×N列个显示单元组成,假设LCD显示屏有64行,每行有128列,每8列对应1个字节的8个位,即每行由16字节,共16×8=128个点组成,屏上64×16个显示单元和显示RAM区1024个字节相对应,每一字节的内容和屏上相应位置的亮暗对应。一个字符由6×8或8×8点阵组成,即要找到和屏上某几个位置对应的显示RAM区的8个字节,并且要使每个字节的不同的位为‘1’,其它的为‘0’,为‘1’的点亮,为‘0’的点暗,这样一来就组成某个字符。但对于内带字符发生器的控制器来说,显示字符就比拟简单了,可让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。3LCD1602液晶模块采用HD44780控制器,hd44780具有简单而功能较强的指令集,可以实现字符移动,闪烁等功能,LM016L与单片机MCU通讯可采用8位或4位并行传输两种方式,hd44780控制器由两个8位存放器,指令存放器〔IR〕和数据存放器〔DR〕忙标志〔BF〕,显示数RAM〔DDRAM〕,字符发生器ROMA〔CGOROM〕字符发生器RAM〔CGRAM〕,地址计数器RAM(AC)。IR用于存放指令码,只能写入不能读出,DR用于存放数据,数据由内部操作自动写入DDRAM和CGRAM,或者暂存从DDRAM和CGRAM读出的数据,BF为1时,液晶模块处于内部模式,不响应外部操作指令和接受数据,DDTAM用来存储显示的字符,能存储80个字符码,CGROM由8位字符码生成5*7点阵字符160中和5*10点阵字符32种.8位字符编码和字符的对应关系,CGRAM是为用户编写特殊字符留用的,它的容量仅64字节,可以自定义8个5*7点阵字符或者4个5*10点阵字符,AC可以存储DDRAM和CGRAM的地址,如果地址码随指令写入IR,那么IR自动把地址码装入AC,同时选择DDRAM或CGRAM,LCD1602液晶模块的引脚图如图3.4所示。图3.4LCD1602引脚图液晶存放器选择控制如表3.1。表3.1存放器选择控制RSR/W操作说明00写入指令存放器〔去除屏等〕01读busyflag〔DB7〕,以及读取位址计数器〔DB0~DB6〕值10写入数据存放器〔显示各字型等〕11从数据存放器读取数据3STC12C5A60S2的接口如图3-5所示。用STC12C5A60S2的P0口作为数据线,用P1.2、P1.1、P1.0分别作为LCD的EN、R/W、RS。其中EN是下降沿触发的片选信号,R/W是读写信号,RS是存放器选择信号本模块设计要点如下:显示模块初始化:首先清屏,再设置接口数据位为8位,显示行数为1行,字型为5×7点阵,然后设置为整体显示,取消光标和字体闪烁,最后设置为正向增量方式且不移位。向LCD的显示缓冲区中送字符,程序中采用2个字符数组,一个显示字符,另一个显示电压数据,要显示的字符或数据被送到相应的数组中,完成后再统一显示.首先取一个要显示的字符或数据送到LCD的显示缓冲区,程序延时2.5ms,判断是否够显示的个数,不够那么地址加一取下一个要显示的字符或数据[8]。图3.5LCD1602与STC12C5A60S2的接口3.3键盘模块设计本按键模块使用的是多位独立按键,按键一端接IO口,一端接地,由于单片机的IO口都有内部上拉,因此当按键没有按下的时候,IO检测到的时候高电平,当按键按下的时候,相当于IO短接地,因此这时候单片机检测到的电平为低电平,通过检测不同时刻的IO口状态就可以判断按下的是那个按键。4个按键分别代表以下功能,第一为功能按键,可以切换不同参数设置界面,第二个为切换按键,可以切换波形、频率和幅值等参数进行设置,第三个为增加按键,第四个为减少按键。键盘模块电路图如图3.6所示。图3.6键盘模块电路图3.4信号产生模块设计这里由于要产生方波、正弦波、锯齿波和三角波这几种波形,综合考虑选择了DAC0832作为主芯片,DAC0832是一款是国家半导体公司采用先进的DA转换器,单片机通过查询内部的预存的波形ROM表来实现波形产生。3.4.1直接数字合成技术介绍本设计就是基于直接数字合成技术原理设计的,直接数字合成技术是美国学者于1971年提出的,即以全数字技术,从相位概念出发直接合成所需波形的一中新的频率合成原理,称之为直接数字频率合成器(DirectDigitalSynthesis)。这是频率合成技术的一次重大革命。它的根本原理就是利用采样原理,通过查表法产生波形。但是限于当时微电子技术和数字信号处理技术的限制,DDS并没有得到足够的重视,随着现代超大规模集成电路集成工艺的高速开展,使得数字频率合成技术得到了质的飞跃,它在相对带宽、频率转换时间、相位连续性、正交输出、高分辨率以及集成化等一系列性能指标方面,已远远超过了传统频率合成技术所能到达的水平。但是由于DDS数字化实现的固有特点,决定了其输出频谱杂散较大。从20世纪80年代末开始通过深入的研究认识了DDS杂散成因及其分布规律后,对DDS相位累加器进行了改良,ROM数据进行了压缩,使用了抖动注入技术以及对DDS工艺结构和系统结构进行了改良。DDS技术建立在采样在采样定理的根底上,它首先对需要产生的信号波形进行采样和量化,然后存入存储器作为待产生信号波形的数据表。输出信号波形时,电路在一个高稳定时钟控制下从数据表中依次读出信号波形的数据,产生过数字化的信号,这个信号再通过DAC转换成所需的模拟信号波形。具体原理框图如图3.7所示。它的核心是相位累加器,由N位加法器与N位相位存放器构成,类似一个简单的计数器。加法器将频率控制字与累加存放器输出的累加相位数据相加,把相加后的结果送至累加存放器的数据输入端。这样,相位累加器在时钟作用下,不断对频率控制字进行线性相位累加。由此可以看出,相位累加器输出的数据就是合成信号的相位,相位累加器的溢出频率就是DDS输出的信号频率。将相位存放器的输出与相位控制字相加得到的数据作为一个地址对正弦查询表进行寻址,查询表把输入的地址相位信息映射成正弦波幅度信号,通过D/A变换器把数字量变成模拟量,再经过低通滤波器平滑并滤除不需要的取样分量,以便输出频谱纯洁的正弦波信号。在参考频率为fs的情况下,DDS系统输出信号的频率fo为:〔3-1〕输出信号的频率分辨率Δfo为:〔3-2〕图3.7DDS技术的原理框图相对于其他信号波形产生技术,DDS技术具有输出信号的采样频率固定、频率稳定性高、信号频率转换时间输出相位连续、全数字化、可编程和易于控制等优点。但还是有两点缺乏之处:〔1〕散分量丰富。这些杂散分量主要由相位舍位、幅度量化和DAC的非理想特性所引起,如图3-8所示。因为在实际的DDS电路中,为了到达足够小的频率分辨率,通常将相位累加器的位数取大。但受体积和本钱的限制,即使采用先进的存储方法,ROM的容量都远小于此,因此在对ROM寻址时,只是用相位累加器的高位去寻址,这样不可防止地引起误差,即相位舍位误差。另外,一个幅值在理论上只能用一个无限长的二进制代码才能精确表示,由于ROM的存储能力,只采用了有限比特代码来表示这一幅值,这必然会引起幅度量化误差。另外,DAC的有限分辨率以及非线性也会引起误差。所以对杂散的分析和抑制,一直是国内外研究的特点,因为它从很大程度上决定了DDS的性能。图3.8DDS掺杂模型〔2〕频带受限。由于DDS内部DAC和ROM的工作速度限制,使得DDS输出的最高频率有限。3.4.2DAC0832芯片介绍DAC0832是采用CMOS工艺制成的单片直流输出型8位数/模转换器。旨在直接与8080,8048,8085,Z80及其他通用的微型处理器进行相接。存储的硅铬R-2R电阻梯形网络将参考电流分开,并为电路提供适宜的温度处理特性〔全范围最大线性温度误差的0.05%〕。电路利用CMOS电流开关和控制逻辑来取得最少的电能损耗和最小的输出泄露电流误差。特殊的电路也能提供TTL逻辑输入电压的水平兼容。双缓冲可以使这些D/A转换器在获取下一个数位字时输出相应一个数位字的电压。这就使得任何一个D/A转换器均可进行同步更新。D/A转换器0830系列是8位的可兼容微型处理器的D/A转换器的集合。图3.9典型应用连接3.4.3DAC0832波形发生电路设计由于DAC0832是电流输出型DAC,因此需要用运放转换成电压,AMP1A输出电压V的范围为-VREF~0V,由于运放供电为正负5V供电,并且运放不能输出电压范围到电源轨,因此基准电压只使用了2.5V电压。基准由TL431进行提供。为了使输出信号幅度范围以0V为中间值,使用了AMP1B搭建成一个加法器进行信号放大和偏置调整。输出电压Vout=V(-R4/R2)+VREF(-R4/R3)=-2V-VREF,因此输出的幅度范围为-VREF~VREF,由于基准电压为2.5V,所以输出电压范围为-2.5V~2.5V。图3.10波形发生电路设计3.5程控放大模块的设计程控放大模块的结构跟波形发生局部相似,区别在于波形发生局部的基准电压是固定的,通过查ROM的数组来改变输出电压来描绘出波形,而程控放大模块的基准是接到波形发生电路的输出,因此输出VOUT=VREF*DATA/256。其中DATA值通过改变单片机连接到DA数据口的电平值即可以改变其放大倍数。其硬件电路图如图3.11所示。图3.11程控放大电路设计3.6负压转换电路设计由于电路中很多芯片都需要正负电源供电,而我们的电源只有正5伏的电压,因此这里使用ICL7660进行产生一个负5伏电压。该ICL7660S超电压转换器是一个单片电路CMOS电压转换IC,保证显着的性能优于其他类似装置。这是一个直接替换工业标准的ICL7660提供了一个扩大经营范围的电源电压高达12V,低电源电流。无需外部二极管所需的ICL7660S。此外,高频升压脚已被纳入,使用户能够实现较低的输出阻抗,尽管使用较小的电容器。图3.12ICL7660S引脚所有改良中所强调的电气规格一节。关键参数都保证在整个商业,工业和军事温度范围内工作。ICL7660S执行的电源电压转换从积极的消极的输入电压范围1.5V至12V的,因此互补的输出电压-1.5V~-12V的。只有2个非关键外部电容器所需要的电荷泵和负责水库的功能。该ICL7660S可以连接到作为一个电压倍增,并会产生高达22.8V的12V输入。它也可以被用来作为电压倍增器或分压器。图3.13ICL7660硬件电路图4.系统软件设计4.1系统软件总体设计图4.1主程序流程图主程序流程图如图4.1所示,单片机上电后先进行初始化,去除一些参数的初值,然后显示相关波形的参数,每个循环单片机都会判断用户是否按下设定按键,如果按下那么进入相关参数的设置。图4.2LCD1602初始化子信号流程图首先先调用液晶自定义的字库,设置好DDRAM地址后在第一行显示,根据程序中的数据设置显示数据的首地址并设置循环量,在循环过程中不断的取字符代码直到终止,第二行的显示过程同一行的显示过程一样,两行显示完毕后便结束子程序[4]。4.2程序设计原理软件任务分析和硬件电路设计结合进行,哪些功能由硬件完成,哪些任务由软件完成,在硬件电路设计根本定型后,也就根本上决定下来了。软件任务分析环节是为软件设计做一个总体规划。从软件的功能来看可分为两大类:一类是执行软件,它能完成各种实质性的功能,如测量,计算,显示,打印,输出控制和通信等,另一类是监控软件,它是专门用来协调各执行模块和操作者的关系,在系统软件中充当组织调度角色的软件。这两类软件的设计方法各有特色,执行软件的设计偏重算法效率,与硬件关系密切,千变万化。软件任务分析时,应将各执行模块一一列出,并为每一个执行模块进行功能定义和接口定义〔输入输出定义〕。在各执行模块进行定义时,将要牵扯到的数据结构和数据类型问题也一并规划好。各执行模块规划好后,就可以监控程序了。首先根据系统功能和键盘设置选择一种最适合的监控程序结构。相对来讲,执行模块任务明确单纯,比拟容易编程,而监控程序较易出问题。这如同当一名操作工人比拟容易,而当一个厂长就比拟难了。软件任务分析的另一个内容是如何安排监控软件和各执行模块。整个系统软件可分为后台程序〔背景程序〕和前台程序。后台程序指主程序及其调用的子程序,这类程序对实时性要求不是太高,延误几十ms甚至几百ms也没关系,故通常将监控程序〔键盘解释程序〕,显示程序和打印程序等与操作者打交道的程序放在后台程序中执行;而前台程序安排一些实时性要求较高的内容,如定时系统和外部中断〔如掉电中断〕。也可以将全部程序均安排在前台,后台程序为“使系统进入睡眠状态〞,以利于系统节电和抗干扰。5.系统调试5.1硬件调试本系统的电路较为复杂,涉及的模块比拟多,其中包含信号产生模块,程控增益模块,单片机最小系统模块,液晶模块,因此对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,那么会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否那么会刺破带有包皮的导线,那么会对电路造成短路现象。在制作硬件电路之前,我们先根据实际需要的功能划分硬件模块,并且在PROTEL里面画出其硬件原理图和PCB图,检查无误后开始再开始焊接。在本系统的硬件调试中遇到了很多的问题。回想这些问题只要认真多思考都是可以防止的,以下为主要的问题:问题:一开始波形一直输出不正常,输出的电压一直都是正电压。解决:由于DA转换器后面的电压转换电路输出为负电压,因此运放需要使用正负电源供电,后来使用ICL7660芯片产生出-5V电压供电便解决了问题。5.2软件调试本系统是一个比拟复杂的数字系统,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。首先为了更好的测试效果,我最开始是直接在PROTUES软件下进行一些显示界面仿真,在确定无误后,再把程序烧录到实物中运行。最后经过屡次的模块子程序的修改,一步一步的完成,最终解决了软件上的各种问题。在软件的调试过程中主要遇到的问题如下:问题1.烧入程序后,LCD液晶显示闪动,而且亮度不均匀。解决:首先对调用的延时进行逐渐修改,可以解决显示闪动问题。其次,由于本作品使作动态扫描方式显示的数字,动态扫描很快,人的肉眼是无法看出,但是调用的显示程序时,如果不在反回时屏蔽掉最后的附值,那么会出现很亮的现象,所以在显示的后面加了屏蔽子令,最后解决了此问题。问题2.当用户按下按键的时候,单片机读取的数值跟设定的数值不对。解决:重新检查独立键盘电路的连接,重新建立一个新的对应关系。结论通过这次毕业设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。经过我长时间的设计及调试,本系统根本能实现本系统的所有功能。缺乏之处有:1.硬件的稳定性有待进一步提高2.系统界面人性化还缺乏。我的综合设计主要涉及硬件和软件两方面的内容,通过这些我的硬件和软件开发能力都获得了提高。首先硬件方面,根本了解了电子产品的开发流程和所要做的工作。根本掌握了Proteus原理图的方法,并设计了一个单片机最小系统。通过开发板的设计和硬件搭建的过程,使我对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LCD液晶,键盘等。并且我学会了分析问题解决问题的能力,加深了对所学理论知识的理解和运用。我的动手能力得到了很大的提高,创新意识得到了锻炼。致谢在这次毕业设计中,最应该感谢的是我的指导老师梁芳老师,本次多功能信号发生器的成功设计与梁老师的帮助是息息相关的。导师渊博的专业知识,严谨的治学态度,精益求精的工作态度,诲人不倦的高尚师德,严以律己、宽厚待人的崇高风范,朴实无华。平易近人的人格魅力对我影响深远。从论文到选题的完成,每一步都是在指导老师的指导下完成的,倾注了导师的大量心血,再次谨向导师表示崇高敬意。还有就是应该感谢我校陕西理工学院图书馆的相关及图书及文献,以及网上前辈们的优秀研究成果,通过对这些资料的学习与借鉴,完成和丰富了本次毕业设计的内容。再加上自己的思考和领悟才能预期成功地完成的本次目标。梁老师在论文前期、中期、后期都对我的想法及设计经行了独特地分析,这深深的影响了我对学习的态度,也大大促进了本次设计的顺利进行。参考文献[1]吴岩.单片机在电子技术中的应用和开发技术研究[J].黑龙江科技信息,202319-24[2]李富林.浅谈单片机的应用领域[J].网络财富2023112-120[3]阎石.数字电子技术根底.北京:高等教育出版社,1997[4]张晓丽等.数据结构与算法.北京:机械工业出版社,2002[5]李建忠.单片机原理及应用.西安:西安电子科技大学,20027-8[6]韩志军等.单片机应用系统设计[M].机械工业出版社,2004[7]马忠梅等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2006[8]刘树中,孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现[J].微计算机信息,2007[9]Baskakov,S.I.Signalsandcircuits.mirpublishiers,1986[10]Levan,N.Systemsandsignals.NewYork::OptimizationSoftware,Inc.,,c1983[11]Marven,Craig.,Ewers,Gillian.Buildyourownlow-costsignalgenerator.NewYork::TAB,,c1994.附录A系统仿真图附录B元件清单元件名称数量STC12C5A60S2130PF212MHZ晶振1轻触按键510UF电容76USB座子11000UF1LCD16021110K排阻1TL4311DAC08322TL0721UA741110K电阻120K电阻2100PF电容2铜柱+螺帽4板子1ICL76601DIP40座子1DIP20座子2DIP8座子3附录C系统源程序#include"reg52.h"#include"LCD1602.h"#include"key.h"#defineDAPortP3sbitIO=P2^0;unsignedintcount;staticunsignedcharcodeTableSin[256]={128,131,134,137,140,143,146,149,152,155,158,162,165,167,170,173,176,179,182,185,188,190,193,196,198,201,203,206,208,211,213,215,218,220,222,224,226,228,230,232,234,235,237,238,240,241,243,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243,241,240,238,237,235,234,232,230,228,226,224,222,220,218,215,213,211,208,206,203,201,198,196,193,190,188,185,182,179,176,173,170,167,165,162,158,155,152,149,146,143,140,137,134,131,127,124,121,118,115,112,109,106,103,100,97,93,90,88,85,82,79,76,73,70,67,65,62,59,57,54,52,49,47,44,42,40,37,35,33,31,29,27,25,23,21,20,18,17,15,14,12,11,10,9,7,6,5,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,5,6,7,9,10,11,12,14,15,17,18,20,21,23,25,27,29,31,33,35,37,40,42,44,47,49,52,54,57,59,62,65,67,70,73,76,79,82,85,88,90,93,97,100,103,106,109,112,115,118,121,124};staticunsignedcharcodeTableTriangle[256]={128,130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242,244,246,248,250,252,254,255,254,252,250,248,246,244,242,240,238,236,234,232,230,228,226,224,222,220,218,216,214,212,210,208,206,204,202,200,198,196,194,192,190,188,186,184,182,180,178,176,174,172,170,168,166,164,162,160,158,156,154,152,150,148,146,144,142,140,138,136,134,132,130,128,126,124,122,120,118,116,114,112,110,108,106,104,102,100,98,96,94,92,90,88,86,84,82,80,78,76,74,72,70,68,66,64,62,60,58,56,54,52,50,48,46,44,42,40,38,36,34,32,30,28,26,24,22,20,18,16,14,12,10,8,6,4,2,0,2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126};staticunsignedcharcodeTableSaw[256]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255};voidmain(void){ LCDInit(); AmPort=0xff; fword=1048; TMOD=0x02; TH0=0xf0;TL0=0xf0; TR0=1;//计数器停止计数 ET0=1;//开启计数器0中断 LCDDispString(0,1,"wave:SinVo:5.0V"); LCDDispString(0,2,"f:01000HzD:--%"); EA=1;//开总中断 while(1) { key_scan(); }} //gType=0:正弦波//gType=1:方波//gType=2:三角波//gType=3:锯齿波voidtimer0(void)interrupt1//计数器0中断{ count=count+fword; switch(gType) { case0: DAPort=TableSin[count>>8]; break; case1:if(count>Duty*655) DAPort=0xff; else DAPort=0x00; break; case2: DAPort=TableTriangle[count>>8]; break; case3: DAPort=TableSaw[256-(count>>8)]; break; default:DAPort=TableSin[count>>8]; }} #include<reg52.h>#include"LCD1602.h"/*********************************************************Function:staticvoidDelayN40us(unsignedintn)Description:延时函数,延时40us的整数倍,传入值n代表延时 时间到n*40us,不能实现准确延时,只能实现大 概时间的延时,利用的是指令实现延时功能。不允 许外部调用。Calls:没有调用其它函数CalledBy:voidLCDWriteCommand(unsignedchardat); voidLCDWriteData(unsignedchardat);Input:unsignedintn用于延时时间确实定,取值、为1~65535Output:无Return:无***********************************************************/voidDelayN40us(unsignedintn){ unsignedinti; unsignedcharj; for(i=n;i>0;i--) for(j=0;j<80;j++);}/*********************************************************Function:voidLCDInit(void);Description:液晶初始化函数,对LCD1602进行初始化操作,在每一次实用液晶前必须用到的,外部可调用函数。Calls:voidLCDWriteCommand(unsignedchardat); DelayN40us(unsignedintn);CalledBy:main();或其他Input:无Output:无Return:无***********************************************************/voidLCDInit(void) { LCDWriteCommand(0x38);/*设置8位格式,2行,5x7*/ LCDWriteCommand(0x38);/*设置8位格式,2行,5x7*/ LCDWriteCommand(0x38);/*设置8位格式,2行,5x7,有的液晶做的不好,写三遍保险!!!!*/ LCDWriteCommand(0x0c);/*整体显示,关光标,不闪烁*/ LCDWriteCommand(0x06);/*设定输入方式,增量不移位*/ LCDWriteCommand(0x01);/*去除屏幕显示*/ DelayN40us(100); /*清屏延时*/}/*********************************************************Function:staticvoidLCDWriteCommand(unsignedchardat);Description:写命令函数,对LCD1602内部存放器进行操作,不允许外部调用Calls:DelayN40us(unsignedintn);CalledBy:voidLCDInit(void); voidLCDDispChar(unsignedcharx,unsignedchary,unsignedchardat); voidLCDDispNum(unsignedcharx,unsignedchary,unsignedchardat); Input:unsignedchardat写入的命令Output:无Return:无***********************************************************/staticvoidLCDWriteCommand(unsignedchardat){ LCD_DB=dat;LCD_RS=0;/*选择写指令*/ LCD_RW=0;/*写入指令值*/ LCD_E=1;/*使能LCD1602*/ LCD_E=0; DelayN40us(1);/*写命令延时*/}/*********************************************************Function:staticvoidLCDWriteData(unsignedchardat);Description:写数据函数,将数据写入LCD1602中,不允许外 部调用Calls:DelayN40us(unsignedintn);CalledBy:voidLCDInit(void); voidLCDDispChar(unsignedcharx,unsignedchary,unsignedchardat); voidLCDDispNum(unsignedcharx,unsignedchary,unsignedchardat); Input:unsignedchardat写入的数据Output:无Return:无***********************************************************/staticvoidLCDWriteData(unsignedchardat) //写数据函数{ LCD_DB=dat; LCD_RS=1;/*选择写数据*/ LCD_RW=0;/*写入数据值*/ LCD_E=1;/*使能LCD1602*/ LCD_E=0; DelayN40us(1);/*写数据延时*/}/*********************************************************Function:voidLCDDispChar(unsignedcharx,unsignedchary,unsignedchardat);Description:在某个屏幕位置上(x,y)位置显示一个字符,可外部调用。Calls:LCDWriteCommand(unsignedchardat); voidLCDWriteData(unsignedchardat);CalledBy:main();及其他Input:X〔0-15),y(1-2),dat为显示字符‘a’形式。Output:无Return:无***********************************************************/voidLCDDispChar(unsignedcharx,unsignedchary,unsignedchardat){ unsignedcharaddress; if(y==1) address=0x80+x; /*显示在第一排的时候的x的地址*/ else address=0xc0+x; /*显示在第二排的时候的x的地址*/ LCDWriteCommand(address); /*输入地址*/ LCDWriteData(dat); /*输入数据*/}/*********************************************************Function:voidLCDDispNum(unsignedcharx,unsignedchary,unsignedchardat);Description:在某个屏幕位置上(x,y)位置显示一个数字,可外部调用。Calls:LCDWriteCommand(unsignedchardat); voidLCDWriteData(unsignedchardat);CalledBy:main();及其他Input:X〔0-15),y(1-2),dat(0-9)。Output:无Return:无***********************************************************/voidLCDDispNum(unsignedcharx,unsignedchary,unsignedchardat){ unsignedcharaddress; if(y==1) address=0x80+x; /*显示在第一排的时候的x的地址*/ else address=0xc0+x; /*显示在第二排的时候的x的地址*/ LCDWriteCommand(address); /*输入地址*/ LCDWriteData(dat+48); /*输入数据*/}/*********************************************************Function:voidLCDDispString(unsignedcharx,unsignedchary,unsignedchar*string)Description:在屏幕上显示一串字符,考虑到我的数值均存储于数组中,为方便而作,允许外部调用

温馨提示

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

评论

0/150

提交评论