基于C的多波形发生器的设计与实现(共30页).doc

上传人:飞****2 文档编号:13441496 上传时间:2022-04-29 格式:DOC 页数:30 大小:724.50KB
返回 下载 相关 举报
基于C的多波形发生器的设计与实现(共30页).doc_第1页
第1页 / 共30页
基于C的多波形发生器的设计与实现(共30页).doc_第2页
第2页 / 共30页
点击查看更多>>
资源描述

《基于C的多波形发生器的设计与实现(共30页).doc》由会员分享,可在线阅读,更多相关《基于C的多波形发生器的设计与实现(共30页).doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上本科毕业设计题目:基于C的多波形发生器的设计与实现姓 名: 陈 卫 学 号: 专 业: 通信工程 院 系: 电子通信工程学院 指导老师: 于玉亭 安徽新华学院本科毕业生毕业论文(设计)承诺书本人按照毕业论文(设计)进度计划积极开展实验(调查)研究活动,实事求是地做好实验(调查)记录,所呈交的毕业论文(设计)是我个人在导师指导下进行的研究工作及取得的研究成果。据我所知,除文中特别加以标注引用参考文献资料外,论文(设计)中所有数据均为自己研究成果,不包含其他人已经发表或撰写过的研究成果。与我一同工作的同志对本研究所做的工作已在论文中作了明确说明并表示谢意。毕业论文(设计)

2、作者签名: 日期: 前言毕业设计是大学本科教育培养目标实现的重要阶段,是毕业前的综合学习阶段,是深化、拓宽、综合教和学的重要过程,是对大学期间所学专业知识的全面总结。本人毕业设计题目为:基于C多波形发生器的设计与实现。在毕业设计前期,我温习了C程序设计、单片机原理及应用、汇编语言等课本,并借阅了相关书籍资料,其中有电子系统设计、例说51单片机、汇编语言与接口技术、单片机原理及接口技术等书本。在毕业设计中期,我通过所学的基本理论、专业知识和基本技能进行原理设计、程序编写、调试仿真等操作。在毕业设计后期,主要进行手稿的整理,并借助计算机调试程序和整理文本文档,同时征求老师的建议和意见,最后在导师的

3、指导下使我得以圆满的完成了任务,在此表示衷心的感谢。毕业设计的三个月里,在指导老师的帮助下,通过查阅资料、设计程序、论文撰写以及外文的翻译,加深了对新规范、规程、手册等相关内容的理解。巩固了专业知识、提高了综合分析、解决问题的能力。同时掌握了单片机仿真软件Keil C与Proteus的使用,所有的这些都从不同得方面达到了毕业设计的目的与要求。由于学生本人的水平有限,难免有不妥和疏忽之处,敬请各位老师不吝赐教与批评指正。 陈 卫 2011年05月05日中文摘要摘 要:波形发生器即简易函数信号发生器,它以AT89C52为核心,结合D/A转换器DAC0832等器件,用仿真软件设计硬件电路,用C语言编

4、写驱动程序,以实现程序控制产生正弦波、三角波、方波、锯齿波四种常用低频信号。可以通过键盘选择波型和输入任意频率值。关键词:函数信号发生器;AT89C52;DAC0832;C语言英文摘要Summary: waveform generator is simple function generator, it AT89C52 as the core, combined with the d/a converter devices such as DAC0832, with simulation software design of hardware circuit, written in c lan

5、guage driver to achieve program generated sine wave, triangle wave, square wave, sawtooth wave of four common low frequency signals. Can by any of the keyboard select the wave type and enter the frequency values. Key words:unction generator; AT89C52;DAC0832; C language1.课题概况1.1基本概述波形发生器即简易函数信号发生器,是一

6、种能够产生多种波形,如三角波、锯齿波、方波、正弦波等波形的电路。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波、锯齿波的函数波形发生器。在工业生产和科研中利用函数信号发生器输出的信号,可以对元器件的性能及参数进行测量,还可以对电工和电子产品进行指数验证、参数调整及性能鉴定。常用的信号发生器绝大部分是由模拟电路构成的,当这种模拟信号发生器用于低频信号输出往往需要的RC值很大,这样不但参数准确度难以保证,而且体积和功耗都很大,而由数字电路构成的低频信号发生器,虽然其低频性能好但体积较大,价格较贵,因此,高精度,

7、宽调幅,低价格将成为数字量信号发生器的发展趋势。目前我国己经开始研制波形发生器,并取得了可喜的成果。但总的来说,我国波形发生器还没有形成真正的产业。就目前国内的成熟产品来看,多为一些PC仪器插卡,独立的仪器和VXI系统的模块很少,并且我国目前在波形发生器的种类和性能都与国外同类产品存在较大的差距1。因此,在国内发展可调多波形发生器具有重大意义。1.2基本要求1.2.1技术要求a.波形失真度在-3%+3%之间b.液晶显示器显示1.2.2工作要求a.组建基于单片机的函数发生器的总体结构框架;b.根据设计测量范围和准确度要求,理论分析和计算选择电路参数;c.根据操作功能要求,确定按键功能;d.采用C

8、语言编写应用程序并调试通过;e.对系统进行测试和结果分析; 1.3主要工作本设计采用AT89C52及其外围扩展系统,软件方面主要是应用C语言设计程序。系统以89C52单片机为核心,配置相应的外设及接口电路,用C语言开发,组成一个多功能信号发生系统。该系统的软件可运行于Windows XP环境下,使用Keil C及Proteus等软件开发,硬件电路设计具有典型性。同时,本系统中任何一部分电路模块均可移植与实用开发系统的设计中,电路设计具有实用性。本设计讲完成以下几个方面的工作:a.选芯片,尽量满足一般工业控制要求、以增强其实用性。b.原理图设计在保证正确的前提下,尽量采用典型的电路设计。c.掌握

9、单片机仿真软件Keil C与Proteus的使用。2.2.1主要功能系统的性能指标主要功能是实现利用单片机AT89C52和8位D/A转换芯片DAC0832共同实现正弦波、方波、三角波、锯齿波这四种常见波形的发生,并且可以接收按键输入而在一定范围内改变频率。主要性能指标:下限频率1.9HZ,上限频率不确定。输出波形不能含有尖峰干扰或失真。输入各种波形的峰峰值最大为10V。波形失真度:(-3%+3%),液晶显示器显示。2.2总体方案设计2.2.1 元器件的选择该函数发生器有以下几个部分:(1)控制模块(2)按键及显示模块(3)采用模块组成。(1)控制模块:用单片机AT89C52作为系统的主控核心。

10、单片机具有体积小,使用灵活的,易于人机对话和良好的数据处理,有较强的指令寻址和运算功能等优点。且单片机功耗低,价格低廉的优点。(2)按键及显示模块:采用DAC0832,其具有以下特点:8位分辨率;双通道D/A转换;输入输出电平与TTL/CMOS相兼容等。2.2.2 系统总体框图设计本系统是以单片机AT89C52和8位A/D转换芯片DAC0832及显示共同实现正弦波、方波、三角波、锯齿波这四种常见波形及显示功能。单片机按键液晶显示转换模块输出 系统框图3.系统硬件设计3.1单片机介绍89C52单片机有44个引脚PLCC和TQFP方形封装形式,40个引脚直插式封装形式,常见如图3.2 设计系统图本

11、系统含有DAC0832与单片机的连接模块,液晶显示与单片机的连接模块以及按键控制模块等主要部分。液晶使用的是LM016L,他们都是数字式的,和单片机系统的接口更加可靠,操作更加方便。体积小,质量轻,功耗低。DAC0832是采样频率为八位的D/A转换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要。所以这个芯片的应用很广泛。4. 系统软件设计4.1 信号频率数据采集本程序通过外部中断,接收减频或加频按键,单片机内部对接受的值经过运算得出波形的输出延时,从而产生频率的改变。电路较为简单,成本较低。4.2 正弦波产生输入正弦波的采样点

12、,计算出256个(一个周期内)正弦波信号值。然后通过输出的两点间的延时来实现调频。依次循环输出,可得出正弦波。采点值放在table2中,程序如下:void sin()/正弦波unsigned int i;for(i=0;i256;i+)DAC0832=table2i;delay(pinlv/256);输出波形如下:4.3 三角波产生设个自变量i让它不断地自加1,直到加到255时,t=i,对t进行不断地自减1直到减到t=0,然后再不断地重复上述过程产生三角波。程序如下:void tran()/三角波unsigned char i;for(i=0;i0;i-)DAC0832=i;delay(pin

13、lv/64);输出波形如下:4.4 方波产生设个自变量i=0使之延时一段时间,再另i=255时在延时与i=0相同的时间,然后再重复上述过程。程序如下:void fang()/方波DAC0832=0;delay(pinlv/2);DAC0832=0xff;delay(pinlv/2);输出波形如下:4.5锯齿波产生锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,当达到最大值后又回到最小值,如此循环,当台阶间隔很小时,波形基本上近似于直线。适当选择循环的时间,可以得到不同的周期锯齿波。锯齿波发生原理与方波类似,只是高低两个时延的常数不同,所以用延时法,来产生锯齿波,设个自变量

14、i让它不断地自加1,直到叫到255,DAC0832可以又自动归0,然后再不断地重复上述过程。程序如下:void jvchi()/锯齿波unsigned char i;for(i=0;i255;i+)DAC0832=i;delay(pinlv/256);输出波形如下:5. 波形发生器的调试与测试本系统是在protues下仿真,使用Keil C编程。从而实现其设计及仿真。在测试本系统是采用的是将设置的数值与示波器所测值进行对比,进而可以知道本系统的性能。频率测试数据: 设定频率(HZ)示波器测试频率(HZ) 相对误差%3.93.961.57.87.931.2815.6316.133.196.总结与

15、提高本次毕业设计题目为:基于C的多波形发生器的设计与实现,由于以前做过类似简易的、单一的波形发生器,当时使用汇编语言编写源程序。对于本次毕业课题设计总体认知不是非常的难。后来导师提出了设计相关要求,本人根据导师的要求,查阅资料,明确步骤,为了提高编程能力和开拓创新,本人最终决定使用C语言编写源程序,使用Keil C和Protues作为设计开发和仿真软件。以及对自己毕业设计完成情况的评价对于本次的毕业设计,在制作的过程中遇到了一些问题,比如正弦波的产生,有多种方法,在方法的选择上就产生了犹豫和困惑,但是后来在导师的指点下自己又不断地查找资料,努力的去揣摩思考,最终决定使用正弦波采点值和延时实现正

16、选波的发生。但是让我最为头疼的是个人知识水平有限,基本功不够扎实,所以在程序设计的过程中难免出现很多的错误和争议,但是我端正了态度通过多种渠道把相关问题逐一解决,增强了不畏艰难的意识。本次毕业设计,自我感觉良好,对于硬件课题设计也有了更加深入的了解,同时更激发个人对硬件的学习兴趣。但是学习仍有很多的不足之处,如知识未能系统连贯化,对于技巧的应用仍然很匮乏,实践能力较弱,方法比较笨,效率不够高等,所以在今后的工作学习中会更加注重知识的系统化、方法效率的提高和实践能力的培养上。此次毕业设计相信对于我今后学习知识的自主性和实践锻炼能力有很大的帮助。7、参考文献1 张以和,王敏男.例说51单片机(C语

17、言版).北京:人民邮电出版社,2009.2 王让定,朱莹.汇编语言与接口技术(第二版).北京:清华大学出版社,2007.3 李朝青.单片机原理及接口技术(第三版).北京:北京航空航天大学出版社,2009.4 黄虎.电子系统设计专题篇.北京:北京航空航天大学出版社,2009.5 谭浩强.C程序设计(第三版).北京:清华大学出版社,2005.6 王琼.单片机原理及应用(实验教程).安徽:合肥工业大学出版社,2005.8、附录8.1源程序#include#include#define DAC0832 XBYTE0x0fff /DAC0832端口int pinlv=256; /改变频率的时延自变量sb

18、it p20=P20;sbit p21=P21;sbit p22=P22;sbit p23=P23;sbit RS = P30;sbit RW= P31; /液晶显示的端口sbit E = P34;int j=0;unsigned char code TAB =msTIME: ;unsigned char code TAB1 =zhengxuanbofangbo sanjiaobo juchibo ;unsigned char table4;float code table2= / 正弦波信号采点值 0x80,0x83,0x85,0x88,0x8A,0x8D,0x8F,0x92, 0x94,0

19、x97,0x99,0x9B,0x9E,0xA0,0xA3,0xA5, 0xA7,0xAA,0xAC,0xAE,0xB1,0xB3,0xB5,0xB7, 0xB9,0xBB,0xBD,0xBF,0xC1,0xC3,0xC5,0xC7, 0xC9,0xCB,0xCC,0xCE,0xD0,0xD1,0xD3,0xD4, 0xD6,0xD7,0xD8,0xDA,0xDB,0xDC,0xDD,0xDE, 0xDF,0xE0,0xE1,0xE2,0xE3,0xE3,0xE4,0xE4, 0xE5,0xE5,0xE6,0xE6,0xE7,0xE7,0xE7,0xE7, 0xE7,0xE7,0xE7,0xE7

20、,0xE6,0xE6,0xE5,0xE5, 0xE4,0xE4,0xE3,0xE3,0xE2,0xE1,0xE0,0xDF, 0xDE,0xDD,0xDC,0xDB,0xDA,0xD8,0xD7,0xD6, 0xD4,0xD3,0xD1,0xD0,0xCE,0xCC,0xCB,0xC9, 0xC7,0xC5,0xC3,0xC1,0xBF,0xBD,0xBB,0xB9, 0xB7,0xB5,0xB3,0xB1,0xAE,0xAC,0xAA,0xA7, 0xA5,0xA3,0xA0,0x9E,0x9B,0x99,0x97,0x94, 0x92,0x8F,0x8D,0x8A,0x88,0x85,0x

21、83,0x80, 0x7D,0x7B,0x78,0x76,0x73,0x71,0x6E,0x6C, 0x69,0x67,0x65,0x62,0x60,0x5D,0x5B,0x59, 0x56,0x54,0x52,0x4F,0x4D,0x4B,0x49,0x47, 0x45,0x43,0x41,0x3F,0x3D,0x3B,0x39,0x37, 0x35,0x34,0x32,0x30,0x2F,0x2D,0x2C,0x2A, 0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21, 0x20,0x1F,0x1E,0x1D,0x1D,0x1C,0x1C,0x1B, 0x1B

22、,0x1A,0x1A,0x1A,0x19,0x19,0x19,0x19, 0x19,0x19,0x19,0x19,0x1A,0x1A,0x1A,0x1B, 0x1B,0x1C,0x1C,0x1D,0x1D,0x1E,0x1F,0x20, 0x21,0x22,0x23,0x24,0x25,0x26,0x28,0x29, 0x2A,0x2C,0x2D,0x2F,0x30,0x32,0x34,0x35, 0x37,0x39,0x3B,0x3D,0x3F,0x41,0x43,0x45, 0x47,0x49,0x4B,0x4D,0x4F,0x52,0x54,0x56, 0x59,0x5B,0x5D,0x

23、60,0x62,0x65,0x67,0x69, 0x6C,0x6E,0x71,0x73,0x76,0x78,0x7B,0x7D;void delay(unsigned char ms);/延时函数void write_com(unsigned char com); /液晶写指令void write_data(unsigned char dat); / 液晶写数据void LCD1602_init(void) /液晶初始化delay(15); write_com(0x38); delay(5); write_com(0x38);delay(5); write_com(0x38); write_c

24、om(0x38); write_com(0x08);write_com(0x01); write_com(0x06); write_com(0x0c); void write_com(unsigned char com)E = 0; /复位初始为高电平 RS = 0;RW = 0;P1 = com;delay(1);E = 1;delay(1);E = 0;void write_data(unsigned char dat)E = 0; /复位初始为高电平 RS = 1;RW = 0;P1 = dat;delay(1);E = 1;delay(1);E = 0; void delay(unsi

25、gned char ms) / 晶振12MHzunsigned char i;while(ms-)for(i=0;i120;i+);void fang()/方波DAC0832=0;delay(pinlv/2);DAC0832=0xff;delay(pinlv/2);void jvchi()/锯齿波unsigned char i;for(i=0;i255;i+)DAC0832=i;delay(pinlv/256);void tran()/三角波unsigned char i;for(i=0;i0;i-)DAC0832=i;delay(pinlv/256);void sin()/正弦波unsign

26、ed int i;for(i=0;i256;i+)DAC0832=table2i;delay(pinlv/256);void main(void)/主函数IE=0x85; /外部中断设定 改变频率TCON=0x05;LCD1602_init();table0=pinlv/1000; /计算周期作为输出table1=pinlv%1000/100;table2=pinlv%100/10;table3=pinlv%10;write_com(0x80+0x40); / 设置代写入数据的地址,写1602的第2行。写出做产生波形的周期for(j=12;j17;j+)write_data(TAB j );d

27、elay(1);for(j=0;j4;j+)write_data(TABtable j );delay(1);write_data(TAB10);/在周期后面加上“MS”write_data(TAB11);while(1)if(p20=0) /方波write_com(0x80); /写1602的第1行,写明产生的波形for(j=11;j22;j+)write_data(TAB1j);while(p20=0)fang();if(p21=0) /锯齿波write_com(0x80); /写1602的第2行?for(j=33;j44;j+)write_data(TAB1j);while(p21=0)

28、jvchi(); if(p22=0) / 三角波write_com(0x80); /写1602的第2行?for(j=22;j33;j+)write_data(TAB1j);while(p22=0)tran();if(p23=0) /正弦波write_com(0x80); /写1602的第2行?for(j=0;j11;j+)write_data(TAB1j);while(p23=0)sin(); void int0(void) interrupt 0 /中断0 减频pinlv=pinlv*2;/频率减半table0=pinlv/1000;table1=pinlv%1000/100;table2=

29、pinlv%100/10;table3=pinlv%10; write_com(0x80+0x40);/设置代写入数据的地址,写1602第2行。for(j=12;j17;j+)write_data(TAB j );delay(1);for(j=0;j4;j+)write_data(TABtable j );delay(1);write_data(TAB10);write_data(TAB11);void int1(void) interrupt 2 /中断2 加频pinlv=pinlv/2;table0=pinlv/1000;table1=pinlv%1000/100;table2=pinlv

30、%100/10;table3=pinlv%10; write_com(0x80+0x40); /设置代写入数据的地址,写1602第1行。for(j=12;j17;j+)write_data(TAB j );delay(1);for(j=0;j4;j+)write_data(TABtable j );delay(1);write_data(TAB10);write_data(TAB11);9、致谢辞将近一个学期的毕业课题设计已经接近尾声,在这段时间里我学到了很多很有用的知识,更重要的是学会如何将理论知识运用到实践的操作当中去,这在今后的工作学习中相信也是一种能力的运用和锻炼。同时我也感受到一种关

31、怀和温暖,老师的谆谆教导和不厌其烦的指点以及同学们的相互帮助。可以说毕业设计的过程也是我们的成长过程,在这个过程中我们相互帮助、相互协作、团结一致,无论是学习还是工作都让我们变得成熟。其实在设计之初我感到了前所未有的压力,学校给了我们一个学期的时间让我们独自的去完成课题的设计,一开始感觉到没有多少知识和经验,这无形中让我犯了难,正因此,才感受到压力的存在。但学校这个大家庭始终是温暖的,这里有同学的友谊之情和老师的关怀之爱,还有学院给我们提供了良好的设计条件和完整的器材保证。很感谢能拥有这所有的一切,经过了这一学期的设计经历,真的是让我在这么多年的学习生涯中又成功的完成了一次蜕变。最后能圆满的完成本次课题设计任务,我感到骄傲和自豪,此刻我由衷的感谢我的导师于玉亭女士!同时也感谢院领导能给这样一个条件和机会,还要感谢我的各位老师和同学,真心的对你们说声谢谢!专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁