基于单片机的信号发生器(李炳阳)_第1页
基于单片机的信号发生器(李炳阳)_第2页
基于单片机的信号发生器(李炳阳)_第3页
基于单片机的信号发生器(李炳阳)_第4页
基于单片机的信号发生器(李炳阳)_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

1、1 绪论1.1 单片机概述单片微型计算机(单片机)作为微型计算机的一个很重要的分支,自问世以来,以其极高的性价比,受到人们的重视和关注,因此应用广泛,发展迅速。相对而言,单片机体积小、重量轻、抗干扰能力强,对环境要求不高,并且价格低廉、可靠性高、灵活性好,开发较为容易。目前,在我国,单片机已经广泛地用于智能仪表、机电设备过程控制、自动检测、家用电器和数据处理等各个方面。1.2 at89s52单片机at89s52是一种低功耗、高性能cmos8位微控制器,具有8k在系统可编程flash 存储器。使用atmel公司高密度非易失性存储器技术制造,与工业80c51产品指令和引脚完全兼容。片上flash允

2、许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8位cpu和在系统可编程flash,使得at89s52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。at89s52具有以下标准功能:8k字节flash,256字节ram,32 位i/o 口线,看门狗定时器,两个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,at89s52 可降至0hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,cpu停止工作,允许ram、定时器/计数器、串口、中断继续工作17。掉电保护方式下,ram内容被保存,振荡器被冻结,单片机一切工作

3、停止,直到下一个中断或硬件复位为止。1.3信号发生器概述目前,市场上的信号发生器多种多样,一般按频带分为以下几种:超高频:频率范围1mhz以上,可达几十兆赫兹。高频:几百khz到几mhz。低频:频率范围为几十hz到几百khz。超低频:频率范围为零点几赫兹到几百赫兹。超高频信号发生器,产生波形一般用lc振荡电路。高频、低频和超低频信号发生器,大多使用文氏桥振荡电路,即rc振荡电路,通过改变电容和电阻值,改变频率。用以上原理设计的信号发生器,其输出波形一般只有两种,即正弦波和脉冲波,其零点不可调,而且价格也比较贵,一般在几百元左右。在实际应用中,超低频波和高频波一般是不用的,一般用中频,即几十hz

4、到几十khz。用单片机89s52,加上一片dac0808,就可以做成一个简单的信号发生器,其频率受单片机运行的程序的控制。我们可以把产生各种波形的程序,写在rom中,装入本机,按用户的选择,运行不同的程序,产生不同的波形。再在dac0808输出端加上一些电压变换电路,就完成了一个频率、幅值、零点均可调的多功能信号发生器的设计。这样的机器体积小,价格便宜,耗电少,频率适中,便于携带。 2 系统设计方案2.1系统可行性分析 (1)元器件的选择及其可行性讨论根据技术指标及系统设计目的,经研究芯片的选择如下:主控芯片采用atmel公司的89s52;采用12mhz的晶振器为89s52提供时钟信号;稳压块

5、选用7812与7805相串联,提供12v和5v电压,7912产生-12v电压;对于89s52的p0口的数据采用74ls373进行锁存后经过dac0808进行d/a转换;数码显示器采用高亮8位共阴极数码管;8位d/a转换器采用dac0808;运算放大器采用lm324。大部分的芯片及器件都可以通过网络购买,所以器件的选择完全可行。(2) 设计中可能存在的问题及解决方案排除问题的可行性讨论设计原理图时应着重考虑设计最终的电路板的可行性。在设计时要对每一个电路模块仔细检查,查阅其他书籍进行校对,还要进行实物实验,以确保设计的可实现性。在最后的电路板的调试阶段,需要诊断模块程序和单片机仿真机合作进行,从

6、而克服调试程序本身的不可靠性,可方便地进行调试及错误诊断。以上对设计中可能遇到的较为重要的问题进行了分析并提出了解决方法,基本上可以解决。(3) 经济上的可行性讨论 本设计是一个实验系统,芯片的选择在前面已经讨论,从前面的讨论中可见芯片大部分可在网上找到。因此,设计费用主要集中在购买元器件上,而大部分的元器件又不是很贵,所以经济上本设计完全可行。2.2系统需求分析2.2.1系统功能要求系统具有d/a转换功能,信号幅度放大功能,8位七段数码显示功能,上电自动复位功能,24键盘输入接口。2.2.2系统性能要求(1)系统的d/a转换功能具有8位精度;(2)动态扫描七段数码显示器;(3)89s52单片

7、机时钟信号为12mhz;(4)系统上电自动复位;(5)系统具有8位行列扫描键盘。2.3总体方案设计一个单片机主系统的硬件电路设计包含两部分内容:一是单片机系统扩展部分设计,它包括存储器扩展和接口扩展。存储器扩展指eprom、eeprom和ram的扩展。接口扩展是指各接口芯片以及其他功能器件的扩展。二是各功能模块的设计,如信号检测功能模块、信号控制功能模块、人机对话功能模块、通讯功能模块等,根据系统功能要求配置相应的d/a、键盘、显示器等外围设备。本机硬件设计包括两部分,即电源部分设计和主系统设计。电源设计和主系统框图分别如图2-1,2-2所示。图2-1 交流直流电压转换图2-2 主系统结构框图

8、3 硬件设计3.1总体硬件设计单片机应用系统的硬件电路设计包含两部分内容:一是系统扩展,即单片机内部的功能单元(如rom、i/o、定时/计数器等)容量不能满足应用系统的要求时,必须在片外进行扩展,选择适当的芯片,设计适当的电路。二是系统配置,即按照功能要求配置外围设备如显示器、d/a转换等,要设计合适的电路。系统的扩展和模块设计应遵循下列原则12:(1)尽可能选择标准化、模块化的典型电路,提高设计的成功率和结构的灵活性。(2)系统的扩展与外围设备配置的水平应充分满足应用系统的功能要求。(3)硬件结构应结合应用软件方案一并考虑。硬件结果与软件方案会产生相互影响,考虑的原则是:软件能实现的功能尽可

9、能由软件来实现,以简化硬件结构。但必须注意,由软件实现的硬件功能,其响应时间要比直接用硬件响应来的长,而且占用cpu时间。所以,选择软件方案时,要考虑到这些因素12。(4)可靠性及抗干扰性设计是硬件系统设计不可缺少的部分,它包括芯片、器件选择,去耦滤波等。(5)单片机外接电路较多时,必须考虑其驱动能力。驱动能力不足时,系统工作不可靠,解决的办法是增加驱动能力,增设线驱动器或减少芯片功耗,降低总线负载。(6)系统的扩展及各功能模块的设计在满足系统功能要求的基础上,应适当留有余地,以备将来修改、扩展之需。(7)在考虑硬件总体结构的同时要注意通用性的问题。 根据以上原则,进行硬件设计。系统采用较为普

10、及的89s52单片机作为系统的核心。它不但容易实现设计指标,而且还有较好的性价比。(1)程序存贮器89s52内部自带8k的rom,512b的ram,所以不需要对其扩展存储器。(2)键盘接口矩阵式键盘适用于按键数量较多的场合,系统采用了行列式键盘设计即矩阵键盘,用i/o线组成行、列结构,按键设置在行列的交点上,24的行列结构可构成8个键的键盘。因此,在按键数量较多时,可以节省i/o线。按键的识别方法有两种,一种为扫描法,另一种为线反转法。此设计采用了行列式及与之相适应的行列扫描法。(3)数码管驱动本设计实现了89s52的i/o口对24键盘和8位数码管显示的控制。为增加对数码管显示器的驱动能力及稳

11、定性,在它与89s52之间设置了提高驱动能力的74ls373。(4)d/a转换本设计d/a转换部分采用dac0808芯片,由于它不带锁存器,故在使用时必须加74ls373进行数据锁存。(5)信号变换部分对信号的变换部分采用四运放集成芯片lm324,它采用14脚双列直插塑料封装,它的内部包含四组形式完全相同的运算放大器。(6)可靠性方面在使用应用系统时,可能会受到多种干扰的侵袭,直接影响到系统的可靠性,因此,本系统适当加入去耦电容,以减少干扰,确保精度。3.2系统模块设计3.2.1电源设计稳压电源是单片机控制系统的重要组成部分,它不仅为测控系统提供多路电源电压,还直接影响到系统的技术指标和抗干扰

12、性能。近年来,传统的线性稳压电源正逐步被高有效率的开关电源所取代,特别是单片开关电源的迅速推广应用,为设计新型、高效、节能电源创造了良好的条件13。 本机使用三种共地电源:+12v,12v,+5v,硬件设计中采用自带电源方式。因为本机有89s52单片机,还有许多逻辑芯片,这些芯片的工作电源电压为+5v,所以电源中必须有+5v电源。另外由于d/a转换器件vee端需接-12v电压,lm324也需要提供12v电源,所以需要设计一个能产生12v,+5v的电源。经过综合分析,变压器选用16w32v变压器(带三抽头如图3.1所示),整流用一片rbv-406集成电桥(如图3.2所示)。稳压部分选用三端集成7

13、805,7812,7912稳压器件(如图3.3所示)。图3.1 变压器图3.2 集成电桥图 图3.3 三端集成稳压器件特别说明,在使用稳压器件时,一定要注意79xx系列是左边接地,右边输出,中间输入;而78xx系列是左边输入,右边输出,中间接地。电源部分原理图如图3.4所示图3.4 电源原理图对于图3.4有几点说明:1.7805稳压块与7812稳压块相串联,是为了使7805上的功耗降低,以免功耗太大而使用散热片。稳压块的功耗按下式计算:w=u=i(ui-uo) (31)其中:i是稳压片的通过电流,ui是稳压片的输入电压,uo是稳压片的输出电压,u是稳压片上的电压降。由上式可以看出:稳压块上的压

14、降u越大,其功耗越大。如果7805直接接到整流桥输出端,则u1必会大于12v,功耗必然加大。2.at89s52的功耗100ma显示器采用动态显示,每一瞬间只有一个数码管发亮,而数码管电流100ma。其它芯片总电流5070ma。所以+5v电流的总电流可300ma,查三端集成稳压器说明书,可以选用7805,其电流im=0.5a,这样电流可以留有一定裕量。3.大滤波电容的选择由于变压器副线圈的额定电压选用12v,那么瞬时电压峰值为um=121.41417v因为大电容耐压值越高,价格越高,所以选用1000f/25v电容。4.整流桥的选择虽然要求的电源电流1a,但变压器副线圈电压为脉动电压,电流为脉动电

15、流,其电流瞬时值远远超过1a,尤其在电源刚接通时,为留有一定裕量,而且不损坏整流桥,选用2a的。由于整流桥的每个二极管都是半相导通,半相不导通,所以其反向耐压值要求很高,为留有一定裕量,选用50v。最后选定整流桥为2a/50v。5.变压器的选择要求电源电压为12v,而稳压块压降2v,所以变压器副线圈电压16v,因此选用32v的电源。又因电源电压500ma,所以选用16w32v变压器(带三抽头)。6.电路中0.1f电容的作用电路中在集成三端稳压器输入端、输出端与公共端之间,分别接有0.1f电容,这是为了更好地改变集成三端稳压片的瞬态响应,防止稳压块自激振荡,保证正常工作。3.2.2显示器接口设计

16、 一、led显示器的结构与原理led发光器件一般常用的有两类:数码管和点阵。常用的数码管一般为8字型数码管,分为a、b、c、d、e、f、g、dp八段,其中dp为小数点。数码管常用的有10根管脚,每一段有一个管脚,另外两根管脚为一个数码管的公共端。从尺寸上分,led数码管的种类很多,常用的有0.3、0.5、0.8、1.0、1.2、1.5、1.8、2.3、3.0、4.0、5.0等。一般小于1.0的为单管芯,1.21.5为双管芯,1.8以上的为3个以上管芯,因而它们的供电电压要求不同,一般每个管芯的压降为2.1v左右。通常,0.8以下采用5v供电,1.02.3采用12v供电,3.0以上的选择更高电压

17、供电。从电路上分,数码管又可分为共阴极和共阳极两种。结构分别如图3.5,3.6所示。图3.5 共阴极 图3.6 共阳极 图3.7 管脚图其中:图3.7为管脚图,从ag管脚输入不同的字段码,可显示不同的数字或字符(其字形码见表3-1)。可见共阴极和共阳极的字段码互为反码 。表3.1 字段码表二、led数码管显示器的译码方式1硬件译码方式图3.8 硬件译码硬件译码方式是指利用专门的硬件电路来实现显示字符到字段码的转换,这样的硬件电路有很多,比如mototola公司生产的mc14495芯片就是其中的一种,mc14495是共阴极一位十六进制数字段码转换芯片,能够输出用四位二进制表示形式的一位十六进制数

18、的七位字段码(不带小数点)。它的内部结构如图3-8所示。2软件译码方式软件译码方式就是通过编写软件译码程序,通过译码程序来得到要显示的字符的字段码。 三、led数码管的显示方式1led静态显示所谓静态显示方式,就是当显示器显示某一个字符时,相应的发光二极管恒定地导通或截止。静态显示时,较小的电流能得到较高的亮度。这是由于显示器的各位相互独立,而且各位的显示字符一经确定,相应锁存器的输出将维持不变,直到显示另一个字符为止(如图3.9所示)。当显示器位数很少(仅一、二位)时,采用静态显示方式是合适的。当位数较多时,用静态显示所需的i/o口太多,占用太多的硬件资源。故在位数较多时往往采用动态显示方式

19、。led静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与i/o口线相连。要显示字符,直接在i/o线上输出相应的字段码。 图3.9 led静态显示2led动态显示方式led动态显示是将所有的数码管的段选线并接在一起,用一个i/o口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的i/o口线控制。如图3.10所示。 图3.10 led动态扫描设数码管为共阳极,它的工作过程为:第一步使右边第一个数码管的公共端d0为1,其余的数码管的公共端为0。同时在i/o(1)上送右边第一个数码管的字段码,这时,只有右边第一个数码管显示,其余不显示;第二步使右边第二个数码管的

20、公共端d1为1,其余的数码管的公共端为0,同时在i/o(1)上送右边第二个数码管的字段码。这时,只有右边第二个数码管显示,其余不显示,依此类推,直到最后一个,这样四个数码管轮流显示相应的信息,一个循环完后,下一循环又这样轮流显示,从计算机的角度看是一个一个的显示,但由于人的视觉滞留,只要循环的周期足够快,看起来所有的数码管都是一起显示的了。这就是动态显示的原理。而这个循环周期对于计算机来说很容易实现。所以在单片机中经常用到动态显示。 四、系统显示电路:本机显示采用软件译码动态显示,系统显示电路如图3.13所示。采用软件译码动态显示的理由如下:1)如果用静态显示,单片机的接口资源肯定不够用,那么

21、还要进行接口的扩展,增加了系统的复杂度;2)如果要制成印刷线路板,得占相当大一块面积;3)另外,采用动态显示,可以明显的降低功耗,因为每一时刻只有一个led发光,其功耗为静态显示的18。一个led最大电流为120ma,如用静态显示,8个led就耗电流960ma,那么变压器就得选32v32w,价格提高近一倍,稳压块得选7805c(im=1a),这种管是椭圆壳,在印刷线路板上也得占相当大的面积。综上分析,采用动态显示才是最经济的方案。 在显示的时候,只要把显示的字码输送到p2口,再经过74ls373进行数据锁存,p3口作为位选控制信号。由于采用的是共阴极数码管,当需要显示哪一位的时候,只要在相应的

22、位选控制信号输出低电平就行。例如,要在第一个数码管显示p,那么在p2口就要输出73h字段码,同时p3口输出feh位选码。 图3.13 系统显示电路3.2.3复位与时钟电路设计1复位电路设计单片机的复位是靠外电路实现的,在时钟电路工作后,只要在单片机的rst引脚上出现24个时钟振荡脉冲(2个机器周期)以上的高电平,单片机便实现初始化状态复位。为了保证应用系统可靠地复位,通常是rst引脚保持10ms以上的高电平。复位电路连接如图3.14所示。此电路仅用一个电容及一个电阻。系统上电时,在rc电路充电过程中,由于电容两端电压不能跳变,故使reset端电平呈高电位,系统复位。经过一段时间,电容充电,使r

23、eset端呈低电位,复位结束7。89s522+5vc1r1 图3.14 复位电路2.时钟电路设计 8xx51系列单片机的时钟信号通常用两种电路形式得到:内部振荡方式和外部振荡方式。在引脚xtal1和xtal2外接晶体振荡器(简称晶振),就构成了内部振荡方式。由于单片机内部有一个高增益反向放大器,当外接晶振后,就构成了自激振荡器,并产生振荡时钟脉冲。晶振通常选用6mhz、12mhz或24mhz。内部振荡方式如图3.15所示。图中电容c1、c2起稳定振荡频率、快速起振的作用。电容值一般为530pf。内部振荡方式所得时钟信号比较稳定,实用电路中使用较多。 外部振荡方式是把已有的时钟信号引入单片机内。

24、这种方式适宜用来使单片机的时钟与外部信号保持一致。外部振荡方式电路如图3.16所示。 对hmos的单片机(8031,8031ah等),外部时钟信号由xtal2引入;对于chmos的单片机(8xcxx),外部时钟信号由xtal1引入。图3.15 内部振荡 图3.16 外部振荡3.2.4键盘接口设计一、人机交互接口的设计 所谓人机交互接口,是指人与计算机之间建立联系、交互信息的输入/输出设备的接口8。这些输入/输出设备主要有键盘、显示器和打印机等。他们是计算机应用系统中必不可少的输入、输出设备,是控制系统与操作人员之间的交互窗口。一个安全可靠的控制系统必须具有方便的交互功能。操作人员可以通过系统显

25、示的内容,及时掌握生产情况,并可通过键盘输入数据,传递命令,对计算机应用系统进行人工干扰,使其随时能按照操作人员的意图工作。二、矩阵键盘的工作方式1查询工作方式这种方式是直接在主程序中插入键盘检测子程序,主程序每执行一次,则键盘检测子程序就对键盘进行检测一次。如果没有键按下,则跳过键识别,直接执行其他程序;如果有键按下,则通过键盘扫描子程序识别按键,得到按键的编码值。然后根据编码值进行相应的处理,处理完后再回到主程序执行。键盘扫描子程序流程如图3.17所示 。图3.17 键盘扫描流程图2.中断工作方式 如图3.18所示,就是中断工作方式,当有中断的时候,就去执行扫描程序,没有中断的时候,cpu

26、可以去做其他的事情。这样可以提高cpu的效率。图3.18 键盘中断工作方式三、系统键盘的实现依据上述工作原理,结合本设计实际,设计出本系统键盘结构如图3.19示。图图3.19 系统键盘实现工作原理如下:1检测键盘上是否有键按下:将行线送入低电平,列线送入高电平。读入p1口的状态来判别。其具体过程如下:p1口输出0fh,即所有行线置成高电平,所有列线置成低电平,然后将p1口状态读入与0fh比较。如果有键按下,总会有一根行线电平被拉至低电平,从而使行输入状态不全为1。2识别键盘中哪一个键按下:确认有键按下后,保存行扫描时有键按下时的状态x 。p1口输出f0h,进行列扫描,保存列扫描状态y,取出键值

27、z=x|y.例如第一行第一列有键按下,那么行扫描读入的状态为00001110,列扫描读入的状态为11100000,最后键值z=11101110=eeh,然后转去执行相应的服务程序。3.2.5 d/a转换设计一、d/a转换器的原理 以倒t形电阻网络d/a转换器为例,介绍d/a转换器的原理。倒t形电阻网络d/a转换器结构如图3.20所示。 图3.20 倒t形电阻网络d/a转换器图中s0s3为模拟开关,由输入数码di控制,当di=1时,si接运算放大器反相输入端(虚地),电流ii流入求和电路;当di=0时,si将电阻2r接地。所以,无论si处于何种位置,与si相连的2r电阻均接“地”(地或虚地)。流

28、过各开关支路(从右到左)的电流分别为 i/2、i/4、i/8、i/16。总电流: (33)输出电压: (34)将输入数字量扩展到n位,则有:可简写为: (35)其中,=二、dac0808简介dac0808是八位电流输出型d/a转换器件,由4脚输出转换电流,其简化电路图及引脚结构如图3.21所示。vref为参考电源,vee负电压供电;d0是高数据位(msb),d7才是地数据位(lsb)。dac0808的电源极性:vcc=+5v,vee=-15v,vref=+15v。d0d7是数据输入端,i0是电流输出端,comp是接电容进行补偿。在单片机应用系统中通常需要的是电压信号,电流信号与电压信号之间的转

29、换可由运算放大器实现。dac0808不带锁存器,所以在使用时必须加一个74ls373进行数据锁存。 图3.21 dac0808简化电路框图和管脚排列三、d/a转换系统的实现根据dac0808的特性设计出本系统的d/a转换电路如图3.22所示。图3.22 系统d/a实现工作原理:本系统由vref提供参考电压,相应参考电流为i=vref/r1。电容c4提供补偿,out输出电流,经过lm324运算放大器转换成电压。所以输出电压:=5k (36)3.2.6 电压变换一、lm324简介lm324是四运放集成电路,它采用14脚双列直插塑料封装。它的内部包含四组形式完全相同的运算放大器,除电源共用外,四组运

30、放相互独立。每一组运算放大器可用图3.23所示的符号来表示,它有5个引出脚,其中“+”、“-”为两个信号输入端,“v+”、“v-”为正、负电源端,“vo”为输出端。两个信号输入端中,vi-(-)为反相输入端,表示运放输出端vo的信号与该输入端的位相反;vi+(+)为同相输入端,表示运放输出端vo的信号与该输入端的相位相同9。lm324的引脚排列如图3.24所示。图3.23 lm324运算放大器 图3.24 lm324引脚结构图由于lm324是四运放集成电路,具有电源电压范围宽,静态功耗小,可单电源使用,价格低廉等优点,因此被广泛应用在各种电路中。二、原理图 电压变换原理图如图3.25所示图3.

31、25 系统信号变换4 软件设计4.1软件功能设计4.1.1系统初始化程序设计复位程序完成如下工作:1.显示2秒的ppp.hello初始界面;2.初始频率设置为983hz;3.将频率值转换成定时器的初值;4.置定时器0工作于方式1,即16位定时器方式,送入定时器0定时初值,启动定时器0工作;5.显示初始频率和产生波形的类型;6.转键盘扫描程序。系统的初始化流程如图4.1所示。图4.1 初始化流程图4.1.2 键盘扫描及处理程序设计这部分程序包括如下几部分:1.键盘扫描程序judge;2. 先对p1置数,行扫描;3. 判断是否有键按下;4. 延时10ms,软件去干扰;5. 确认按键按下x = p1

32、, 保存行扫描时有键按下时状态;6. 列扫描;7. 保存列扫描时有键按下时状态;8. 取出键值;9. 执行相应键值程序。下面分别介绍其功能及设计思想。1.键盘扫描程序单片机系统中,键盘扫描是cpu工作的一个主要内容之一。cpu忙于各项工作任务时,如何兼顾键盘扫描。既保证不失时机的响应键盘操作,又不过多占用cpu时间。因此,要根据应用系统中的cpu的忙、闲情况,选择好键盘的工作方式。在单片机应用系统设计中,为了节省硬件,通常采用非编码键盘,在这种键盘结构中,单片机对它的控制有三种方式:程序控制扫描方式;定时扫描工作方式;中断工作方式6。(1)程序控制扫描方式这种方式就是只有当单片机空闲时,才调用

33、键盘扫描子程序,响应键盘的输入请求。(2)定时扫描方式这种方式就是每隔一定的时间对键盘扫描一次。通常是利用单片机内部定时器产生10ms的定时中断,cpu响应定时器溢出中断请求,对键盘进行扫描,以响应键盘输入请求。(3)中断工作方式为进一步提高cpu效率,可以采用中断扫描工作方式。即在键盘有健按下时,才执行键盘扫描,执行该键功能程序。本系统采用程序控制扫描工作方式。在该设计中的键盘的行列线连接于89s52的p1口上。键盘扫描程序自复位后就开始工作,时刻监视键盘,有无键按下。在监视键盘过程中,允许定时器t0中断,即同时动态显示数据和输出波形。一旦有键按下,先延时10ms,去除键的抖动,然后关中断,

34、不允许定时器t0发生中断。其框图如图4.2所示: 图4.2 键盘扫描对应键盘如图4.3所示图4.3 键盘实现键盘采用矩阵式键盘(如图4-3所示),由软件产生相应编码,再根据相应编码调用相应的子程序。编码产生原理:p1口低四位表示行,高四位表示列。键盘所在的行和所在的列用0表示,其它的行和列用1表示。如第一行第一列gw编码值为(11101110)2=0xee,第二行第三列zkbj编码值为(10111101)2=0xbd。表4.1 键盘处理程序键值对应处理程序0x7dkey1键选择发波类型(1为正弦波,2为三角波,3为方波)0xeekey2个位频率调整(gw)0xdekey3十位频率调整(sw)0

35、xbekey4百位频率调整(bw)0x7ekey5千位频率调整(qw)0xedkey6万位频率调整(ww)0xddkey7占空比增大调整(zkbz)0xbdkey8占空比减小调整(zkbj)键盘扫描源程序如下:void judge(void) unsigned char x,y,z; p1 = 0xff; p1 = 0x0f; /先对p1置数行扫描 if(p1 != 0x0f) /判断是否有键按下 delay10ms(); /延时,软件去干扰 if(p1 != 0x0f) /确认按键按下x = p1; x = p1; /保存行扫描时有键按下时状态 p1 = 0xf0; /列扫描 y = p1;

36、 /保存列扫描时有键按下时状态 z = x | y; /取出键值 switch ( z ) /判断键值(那一个键按下) case 0x7d: key1(); break; case 0xee: key2(); break; /对键值赋值 case 0xde: key3(); break; case 0xbe: key4(); break; case 0x7e: key5(); break; case 0xed: key6(); break; case 0xdd: key7(); break; case 0xbd: key8(); break; 4.1.3中断服务程序设计采用定时器t0定时中断,

37、根据不同的choice值,产生不同的波形。其中方波的占空比可以通过k变量来控制。定时器的初值可以这样计算:f = 100000 * ww + 1000 * qw + 100 * bw + 10 * sw + gw; t = 1000000 / f; th = -t / 256; /定时器高八位值 tl = -t % 256; /定时器低八位值void time0_int(void) interrupt 1 /中断服务程序 tr0 = 0; if(wave_choice = 1) p0 = to_sinb; b +; else if( wave_choice = 2 ) if(c = 128)

38、p0 = c; else p0 = 255 - c; c +; else if( wave_choice = 3 ) k = zk * 256 / 100; d +; if(d = k) p0 = 0x00; else p0 = 0xff; else if(wave_choice = 4) if(e = 255) p0 = 255 - e; else p0=0; e+; th0 = th; tl0 = tl; tr0 = 1;4.1.4 正弦波发生程序设计dac0808是8位的d/a转换器件,其工作电压是05v,当输入00数字量的时候,输出为0v电压;当输入80数字量的时候,输出为2.5v电压

39、;当输入ff数字量的时候,输出为5v电压。单片机的i/o输出均为+5 v的ttl电平,因此产生的正弦波幅值为+2.5 v。将一个周期内的正弦波形等分为256份,那么第1点的角度为0,对应的正弦值为2.5sin0;第2点的角度为360/256,对应的正弦值为2.5sin (360/256 ) ,如此计算下去,将这些模拟量正弦值都转换为单极性方式下的数字量,得到一张按照点号顺序排列的正弦波波形数据表格11。而每次送到74ls373的八位数字量是根据查正弦波形数据表格而得到。其实在计算正弦波形数据的时候,并不需要算出整个02区间的每一个值,而只需计算出0中的值就行,其他区间的值都可以通过对0中的值取

40、不同的变换。比如的值可以和0值一一对应,而2的值可以对0区间的值取反得到。计算值可以用c语言编程得到。幅度公式为y=2.51+sin() (n=0,1,264)相应的y值数字化后的递增量=0.0196那么每一个点相对于起一个点的递增率为a= (y2当前的点,y1为前一个点)所以每一个点的数字量与递增率a成一一对应关系。数字量化c程序:#includemain()int n,i=0,j,k; float y=0, a=3.1415926,b=0,c=2.5000,d=0; for(n=0;n=64;n+) y=2.5*sin(a*n/128)+2.5; b=y; /b,y为当前幅度值 d=b-c

41、; /d为递增率 j=d/0.0196; /j为数字递增率,0.0196为 k=128+j; /k为数字量 printf(“%d,%f,%f,%d,%dn”,i,y,d,j,k); i+; 4.1.5 三角波发生程序设计由于三角波的函数值比较容易计算,所以不必要像正弦波那样还需用表格。可直接通过如下程序段实现。else if( wave_choice = 2 ) /三角波 if(c = 128) p0 = c; else p0 = 255 - c; c +; 4.1.6方波发生程序设计方波发生程序运用延时的方法实现,只用一个主程序即可,因为产生一个方波只需要高低两个数,所以程序比较简单。要给一

42、个频率,再计算所需的延时即可。实现方波的程序如下:else if( wave_choice = 3 ) / 方波 k = zk * 256 / 100; d +; if(d = k) p0 = 0x00; else p0 = 0xff; 4.1.7锯齿波发生程序设计锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,当达到最大值后又回到最小值,如此循环,当台阶间隔很小时,波形基本上近似于直线。适当选择循环的时间,可以得到不同周期的锯齿波。锯齿波发生原理与方波类似,只是高低两个延时的常数不同,所以用延时法,来产生锯齿波。else if(wave_choice = 4) /锯齿波

43、 if(e = 255) p0 = 255 - e; else p0=0; e+; 4.2 proteus软件仿真4.2.1 proteus软件仿真过程第一步,打开proteus软件,选择所需器件。第二步,将所有器件排列好。器件排列见图4.4。 图4.4 器件排列窗口 图4.5 导线连接第三步,连接导线。如图4.5。第四步,打开keil软件,调出程序编译,生成hex文件。调试窗口见图4.6。 图4.6 程序调试窗口 图4.7初始化仿真窗口第五步,调试仿真。初始界面显示ppp.hello。仿真情况如图4.7。以下为四种波形的仿真结果示例。正弦波仿真:频率2383hz。仿真结果如图4.8所示。图4

44、.8 正弦波仿真输出三角波仿真:频率2984hz。结果如图4.9。图4.9 三角波仿真输出方波仿真:占空比50%,频率2824hz。仿真结果如图4.10。图4.10 方波仿真输出锯齿波仿真:频率1983hz。仿真结果如图4.11所示。图4.11 锯齿波仿真输出仿真总结:采用proteus进行单片机仿真,可以大大缩短单片机的开发周期。它不仅能仿真单片机cpu 的工作情况,也能仿真单片机外围电路或没有单片机参与的其它电路的工作情况。本系统仿真结果,满足设计需求。实际操作灵活,使用方便。5 系统测试报告5.1系统程序下载采用专用的51编程器,首先将编程器的并口线和计算机的并口连接好,其次将编程器串口

45、线和计算机的串口连接(采用串口供电)。将89s52插到编程器上,打开电源。第一步 检测器件;第二步 擦除器件;第三步 把程序写入单片机的flash rom 里。图5.1 程序写入单片机5.2系统使用说明本机分为两部分。一部分是主机板,是一块16cm10cm的电路板,另一部分是外接的变压器。主机板一侧有五根软线。其中三根线是接变压器的,红线是正电压输入端,接变压器输出的红接线柱,黑线是接变压器的黑接线柱(即中间抽头),黄线接变压器的黄接线柱。在使用本机之前,先把变压器与电源的插头拨开,然后把主机板左上角三根线与变压器三接线柱正确连接。这时把变压器的插头插入220v电源插座,主机正上方的八个数码管

46、应显示“ppp.hello”,否则应立即拔下变压器,检查是否接线错误。正确显示“ppp.hello”之后,就可以输入波形代号和频率值,产生要求的波形了。各种波形的代号如下:“1”:正弦波“2”:三角波“3”:方波“4”:锯齿波要产生一个波形,正确的操作过程如下:1.在接电源后,电源指示灯亮,按下复位键,显示器显示“ppp.hello”2.把本机右端两根标有“输出”字样的线接示波器输入端,红线为波形输出线,黑线为地线。3.输入波形代号:按下键盘上key1键,同时在显示器第三位上将显示你键入的数字,这个数字被认为是你选定的波形代号。4.选好波形代号后,选择key2-key6键,分别对频率的个位、十

47、位、百位、千位、万位进行调整。5.频率值最多输入5位,从0001到50000。6.输入完波形代号与频率后,输出端将产生出想要的波形及相应的频率。5.3系统性能指标1.输出频率宽度正弦波:1hz8khz三角波:1hz10khz方波:1hz10khz锯齿波:1hz15khz2.输出波形的幅值:本机设计目标是用于中低频小信号范围。最高幅值:0v+12v。3.波形零点调节范围:0v+12v。4.本机可带的负载:rl500。5.本机输出电流:i0+40ma,i0-20ma。5.4系统测试数据1.稳压部分输出电压测试通过对实际电路进行测试,得出各器件输出电压数据如表5.1所示。表5.1 输出电压测试数据表

48、稳压器件输入电压输出电压理想输出电压误差78120v0007805+11.5v4.854%7812+13.4v11.5124.2%7912-13.3v-13.3-1210.8%从测试的数据上可以看出:采用7812,7805稳压输出电压+12v,+5v,基本符合要求。误差都控制在5%以内。而7912稳压负电压,根本没有起到稳压的作用,而且误差也很大。我认为是损坏了,因为在一次测试中不小心将7912电源的极性接反了,直接烧坏了。所以,在测试的时候一定要小心电源的极性和用电安全。2.正弦波频率测试在实际测试中,主要对正弦波的频率进行了测试,测试数据如表5-2所示。表5.2 正弦波频率测试数据表显示频

49、率(hz)测试频率(hz)误差(%)5553.72.4100103.53.38200195.22.465004902.041000970.33.0615001548.63.1420002041.12.0140003945.31.4980007842.42.01从误差上分析,基本满足设计要求。但是在显示较高频率时,数码管的闪烁频率太快了,根本看不清楚数字。这一点有待进一步改进。三角波,方波和锯齿波的频率测试不够理想,所以不在这里列出。但是从proteus软件仿真的结果看,三种波形都可以实现。6 结论与展望6.1 结论单片机控制多功能信号发生器可以用于“单片机技术”的教学实践,也可以用于实验信号的

50、产生。其比较典型的接口电路设计也为实际应用提供参考。该仪器的研制既解决了实验教学的需求,也节约了实验设备投资,降低了实验成本。经过进一步完善后,可由学生利用课程设计的机会,亲自动手制作,这样还可以进一步降低成本,同时极大地提高了学生的动手能力,是一件一举多得的好事。随着科学技术的不断发展,以及实验教学要求的不断更新,要求我们开发的应用系统具有良好的可扩充性和更新能力,作为一名技术人员,应时刻跟踪科技发展的步伐,不断丰富专业知识,不断完善我们开发的系统。本设计是是自己对“单片机技术”课程的理解和实际技术的总结。论文中可能会存在一些不足之处,敬请评审专家和各位老师批评指正。6.2 展望未来 通过本次毕业设计,我感到自己应用基础知识及专业知识解决问题的能力有了很大的提高。并且这次毕业设计的选题,是一个实际应用工程。是我学完单片机课程后,自己动手做的一个大系统。尽管在设计过程中碰到了不少“难题”,通过自己翻阅大量资料,解决了一个个难题。通过这次毕业设计,我深深体会到:世上无难题,只怕有心人。碰到难题不要惧怕,只要你肯钻研,问题总会有解决的办法。我想,通过这次毕业设计,到了工作单位后,我将能够更快的适应工作岗位和工作要求,我对自己未来充满信心。 总之,这次毕业设计对我而言是受益匪浅的。参考文献1 李杏春主编.单片机原理及

温馨提示

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

评论

0/150

提交评论