硬件综合课程设计单片机函数信号发生器设计.doc

上传人:仙人指路1688 文档编号:4150385 上传时间:2023-04-07 格式:DOC 页数:21 大小:616KB
返回 下载 相关 举报
硬件综合课程设计单片机函数信号发生器设计.doc_第1页
第1页 / 共21页
硬件综合课程设计单片机函数信号发生器设计.doc_第2页
第2页 / 共21页
硬件综合课程设计单片机函数信号发生器设计.doc_第3页
第3页 / 共21页
硬件综合课程设计单片机函数信号发生器设计.doc_第4页
第4页 / 共21页
硬件综合课程设计单片机函数信号发生器设计.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《硬件综合课程设计单片机函数信号发生器设计.doc》由会员分享,可在线阅读,更多相关《硬件综合课程设计单片机函数信号发生器设计.doc(21页珍藏版)》请在三一办公上搜索。

1、硬 件 综 合 课 程 设 计课程设计报告 课 目:波 形 发 生 器 设 计 学 院:信 息 工 程 学 院 班 级:计 科 0802 班 小组成员: 指导教师: 二零一一年四月摘要波形发生器即简易函数信号发生器,是一种能够产生多种波形,如三角波、锯齿波、方波、正弦波等波形的电路。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。通过对函数波形发生器的原理以及构成分析,可设计一个能变换出三角波、正弦波、方波、锯齿波的函数波形发生器。在工业生产和科研中利用函数信号发生器输出的信号,可以对元器件的性能及参数进行测量,还可以对电工和电子产品进行指数验证、参数调整及性能鉴定。常用的信号发生器绝

2、大部分是由模拟电路构成的,当这种模拟信号发生器用于低频信号输出往往需要的RC值很大,这样不但参数准确度难以保证,而且体积和功耗都很大,而由数字电路构成的低频信号发生器,虽然其低频性能好但体积较大,价格较贵,因此,高精度,宽调幅,低价格将成为数字量信号发生器的发展趋势。本设计核心任务是:以AT89C52为核心,结合D/A转换器DAC0832等器件,用仿真软件设计硬件电路,用C语言编写驱动程序,以实现程序控制产生正弦波、三角波、方波、锯齿波四种常用低频信号。可以通过键盘选择波型和输入任意频率值。关键词:函数信号发生器;AT89C52;Keil C目 录1 项目概述 41.1 项目名称1.2小组成员

3、1.3 基本要求1.4 主要工作2 系统总体设计5 2.1 主要功能系统的性能指标2.2 总体方案设计3 系统硬件设计63.1 单片机介绍3.2 设计系统图4 系统软件设计84.1信号频率数据采集4.2正弦波产生4.3 方波产生4.4三角波产生4.5锯齿波产生5 波形发生器的调试与测试136 总结与提高136.1 课程设计总结6.2 开发中遇到的问题、解决方法以及对自己完成课程设计情况的评价6.3 硬件综合课程设计波形发生器设计课程设计的意见与建议7 参考文献148 附录:源程序151 项目概述1.1 项目名称:波形发生器设计1.2 小组成员小组成员:本硬件综合课程设计开发小组由张亚、汪明景共

4、同组成。其中张亚主要负责源程序开发及调试,汪明景主要负责硬件电路设计和软件仿真实现。1.3基本要求1.3.1技术要求a.波形失真度在-3%+3%之间b.液晶显示器显示1.3.2工作要求a.组建基于单片机的函数发生器的总体结构框架;b.根据设计测量范围和准确度要求,理论分析和计算选择电路参数;c.根据操作功能要求,确定按键功能;d.采用C语言编写应用程序并调试通过;e.对系统进行测试和结果分析;1.4主要工作本设计采用AT89C52及其外围扩展系统,软件方面主要是应用C语言设计程序。系统以89C52单片机为核心,配置相应的外设及接口电路,用C语言开发,组成一个多功能信号发生系统。该系统的软件可运

5、行于Windows XP环境下,使用Keil C及Proteus等软件开发,硬件电路设计具有典型性。同时,本系统中任何一部分电路模块均可移植与实用开发系统的设计中,电路设计具有实用性。本设计讲完成以下几个方面的工作:a.选芯片,尽量满足一般工业控制要求、以增强其实用性。b.原理图设计在保证正确的前提下,尽量采用典型的电路设计。c.掌握单片机仿真软件Keil C与Proteus的使用。2 系统总体设计 2.1主要功能系统的性能指标主要功能是实现利用单片机AT89C52和8位D/A转换芯片DAC0832共同实现正弦波、方波、三角波、锯齿波这四种常见波形的发生,并且可以接收按键输入而在一定范围内改变

6、频率。主要性能指标:下限频率1.9HZ,上限频率不确定。输出波形不能含有尖峰干扰或失真。输入各种波形的峰峰值最大为10V。波形失真度:(-3%+3%),液晶显示器显示。2.2 总体方案设计2.2.1 元器件的选择该函数发生器有以下几个部分:(1)控制模块(2)按键及显示模块(3)采用模块组成。(1)控制模块:用单片机AT89C52作为系统的主控核心。单片机具有体积小,使用灵活的,易于人机对话和良好的数据处理,有较强的指令寻址和运算功能等优点。且单片机功耗低,价格低廉的优点。(2)按键及显示模块:采用DAC0832,其具有以下特点:8位分辨率;双通道D/A转换;输入输出电平与TTL/CMOS相兼

7、容等。2.2.2 系统总体框图设计本系统是以单片机AT89C52和8位A/D转换芯片DAC0832及显示共同实现正弦波、方波、三角波、锯齿波这四种常见波形及显示功能。单片机按键液晶显示转换模块输出 系统框图3 系统硬件设计3.1 单片机介绍89C52单片机有44个引脚PLCC和TQFP方形封装形式,40个引脚直插式封装形式,常见如图3.2 设计系统图本系统含有DAC0832与单片机的连接模块,液晶显示与单片机的连接模块以及按键控制模块等主要部分。液晶使用的是LM016L,他们都是数字式的,和单片机系统的接口更加可靠,操作更加方便。体积小,质量轻,功耗低。DAC0832是采样频率为八位的D/A转

8、换芯片,集成电路内有两级输入寄存器,使DAC0832芯片具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要。所以这个芯片的应用很广泛。4 系统软件设计4.1 信号频率数据采集本程序通过外部中断,接收减频或加频按键,单片机内部对接受的值经过运算得出波形的输出延时,从而产生频率的改变。电路较为简单,成本较低。4.2 正弦波产生输入正弦波的采样点,计算出256个(一个周期内)正弦波信号值。然后通过输出的两点间的延时来实现调频。依次循环输出,可得出正弦波。采点值放在table2中,程序如下:void sin()/正弦波unsigned int i;for(i=0;i256;i+)DAC083

9、2=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(pinlv/64);输出波形如下:4.4 方波产生设个自变量i=0使之延时一段时间,再另i=255时在延时与i=0相同的时间,然后再重复上述过程。程序如下:void fang()/方波DAC0832=0;delay(pinlv/2);DAC0832=0x

10、ff;delay(pinlv/2);输出波形如下:4.5 锯齿波产生锯齿波中的斜线用一个个小台阶来逼近,在一个周期内从最小值开始逐步递增,当达到最大值后又回到最小值,如此循环,当台阶间隔很小时,波形基本上近似于直线。适当选择循环的时间,可以得到不同的周期锯齿波。锯齿波发生原理与方波类似,只是高低两个时延的常数不同,所以用延时法,来产生锯齿波,设个自变量i让它不断地自加1,直到叫到255,DAC0832可以又自动归0,然后再不断地重复上述过程。程序如下:void jvchi()/锯齿波unsigned char i;for(i=0;i255;i+)DAC0832=i;delay(pinlv/25

11、6);输出波形如下:5 波形发生器的调试与测试本系统是在protues下仿真,使用Keil C编程。从而实现其设计及仿真。在测试本系统是采用的是将设置的数值与示波器所测值进行对比,进而可以知道本系统的性能。频率测试数据: 设定频率(HZ)示波器测试频率(HZ) 相对误差%3.93.961.57.87.931.2815.6316.133.196 总结与提高6.1 课程设计总结本组设计的课题为:硬件综合课程设计波形发生器设计,由于以前做过类似简易的、单一的波形发生器,当时使用汇编语言编写源程序。对于本次课程设计总体认知不是非常的难。后来导师提出了设计相关要求,我们根据导师的要求,查阅资料,明确分工

12、,为了提高编程能力和开拓创新,我们最终决定使用C语言编写源程序,使用Keil C和Protues作为设计开发和仿真软件。6.2 开发中遇到的问题、解决方法以及对自己课程设计完成情况的评价对于本次的课程设计,在制作的过程中遇到了一些问题,比如正弦波的产生,有多种方法,在方法的选择上就产生了分歧,但是在几位同学的帮助和查找资料的努力下,最终达成了一致的思想,决定使用正弦波采点值和延时实现正选波的发生。但是让我们小组最为头疼的是人员分工协作情况,源程序的设计主要有张亚完成,仿真图主要由汪明景完成,但是我们个人知识差异较大,基本功不扎实,所以在程序设计的过程中难免出现很多的错误和争议,但是我们秉着合作

13、互让的态度把相关问题逐一解决,也增强了团队合作意识。本次课程设计,自我感觉良好,对于硬件课程设计也有了更加深入的了解,同时更激发个人对计算机硬件的学习兴趣,基本改变的以前计算机学习中硬件难学的思想。但是学习仍有很多的不足之处,如知识未能系统连贯化,对于技巧的应用仍然很匮乏,实践能力较弱,方法比较笨,效率不够高等,所以在以后的学习中会更注重知识的系统化、方法效率的提高和实践能力的培养上。虽然此次课程设计难度一般,但是对于同学们学习知识的自主性和实践锻炼能力有很大的帮助。6.3 硬件综合课程设计波形发生器设计课程设计的意见与建议本人认为,课程设计是一项学习比较集中和对知识要求比较高的课程,所以应该

14、重视团体合作的培养,也应重视成绩好和成绩相对不好的同学的协调搭配,这样可以让多人互相促进、互相学习。建议:希望系分管教学和科研的领导,让各位任课老师提供各门功课、各种类型的课程设计题目,组织对课程设计有兴趣的同学们选择各种课题,最好是每个方向、每门功课都有,通过假期带回家里做,通过网络等资源学习做课程设计。这种渠道也可以培养同学们对计算机的有效和健康的利用,对于人才素养有一定的帮助。7 参考文献1 张以和,王敏男.例说51单片机(C语言版).北京:人民邮电出版社,2009.2 王让定,朱莹.汇编语言与接口技术(第二版).北京:清华大学出版社,2007. 3 李朝青.单片机原理及接口技术(第三版

15、).北京:北京航空航天大学出版社,2009.8 附录:源程序#include#include#define DAC0832 XBYTE0x0fff /DAC0832端口int pinlv=256; /改变频率的时延自变量sbit 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 =0123456789msTIME: ;unsigned char code TAB1 =zhengxuanbofa

16、ngbo sanjiaobo juchibo ;unsigned char table4;float code table2= / 正弦波信号采点值 0x80,0x83,0x85,0x88,0x8A,0x8D,0x8F,0x92, 0x94,0x97,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,

17、0xDB,0xDC,0xDD,0xDE, 0xDF,0xE0,0xE1,0xE2,0xE3,0xE3,0xE4,0xE4, 0xE5,0xE5,0xE6,0xE6,0xE7,0xE7,0xE7,0xE7, 0xE7,0xE7,0xE7,0xE7,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,0xB

18、B,0xB9, 0xB7,0xB5,0xB3,0xB1,0xAE,0xAC,0xAA,0xA7, 0xA5,0xA3,0xA0,0x9E,0x9B,0x99,0x97,0x94, 0x92,0x8F,0x8D,0x8A,0x88,0x85,0x83,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,

19、0x34,0x32,0x30,0x2F,0x2D,0x2C,0x2A, 0x29,0x28,0x26,0x25,0x24,0x23,0x22,0x21, 0x20,0x1F,0x1E,0x1D,0x1D,0x1C,0x1C,0x1B, 0x1B,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,0x2

20、F,0x30,0x32,0x34,0x35, 0x37,0x39,0x3B,0x3D,0x3F,0x41,0x43,0x45, 0x47,0x49,0x4B,0x4D,0x4F,0x52,0x54,0x56, 0x59,0x5B,0x5D,0x60,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); / 液

21、晶写数据void LCD1602_init(void) /液晶初始化delay(15); write_com(0x38); delay(5); write_com(0x38);delay(5); write_com(0x38); write_com(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 =

22、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(unsigned 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;

23、i+)DAC0832=i;delay(pinlv/256);void tran()/三角波unsigned char i;for(i=0;i0;i-)DAC0832=i;delay(pinlv/256);void sin()/正弦波unsigned 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;table

24、2=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);/在周期后面加上“MS”write_data(TAB11);while(1)if(p20=0) /方波write_com(0x80); /写1602的第1行,写明产生的波形for(j=11;j22;j+)wri

25、te_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)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

26、);while(p23=0)sin(); void int0(void) interrupt 0 /中断0 减频pinlv=pinlv*2;/频率减半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 );delay(1);for(j=0;j4;j+)write_data(TABtable j );delay(1);write_data(TAB1

27、0);write_data(TAB11);void int1(void) interrupt 2 /中断2 加频pinlv=pinlv/2;table0=pinlv/1000;table1=pinlv%1000/100;table2=pinlv%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);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号