多功能波形发生器

上传人:ni****g 文档编号:494299428 上传时间:2022-09-13 格式:DOC 页数:12 大小:376.50KB
返回 下载 相关 举报
多功能波形发生器_第1页
第1页 / 共12页
多功能波形发生器_第2页
第2页 / 共12页
多功能波形发生器_第3页
第3页 / 共12页
多功能波形发生器_第4页
第4页 / 共12页
多功能波形发生器_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《多功能波形发生器》由会员分享,可在线阅读,更多相关《多功能波形发生器(12页珍藏版)》请在金锄头文库上搜索。

1、. . . 1设计选题与任务设计题目:多功能波形发生器 任务与要求:设计一个由单片机控制的波形发生器。运用单片机系统控制产生多种波形,这些波形包括方波、三角波、锯齿波、正弦波等。信号发生器所产生的波形的频率、幅度均可调节。并可通过软件任意改变信号的波形。基本要求:1.产生方波、三角波、锯齿波、正弦波可通过开关选择2.波形幅值调围80HFFH,两档。周期两档 3.有波形指示幅值周期档显示功能。 2系统概述与硬件简介随着科技的发展和现代科研的需要,信号发生器已经成为了很多行业进行研究测试不可或缺的工具,但目前使用波形发生器大部分体积大,可靠性差,准确度低。因此为了实验研究方便,研制一种体积小、可靠

2、性强、准确性高的波形发生器显得尤为重要。方案总体设计框图 图2.1总体电路图见附录2。由于proteus单片机已默认连接复位电路、晶振电路、以与电源,所以本设计中没有这几个模块的具体电路。3.软件的实现系统软件由主程序和外部中断程序,定时器中断程序以与键值判断子程序,显示子程序子程序组成,波形的产生主要通过定时器中断来完成。波形的转换通过改变波形标志位实现。周期的改变可通过定时器的初值改变的方法来实现。幅值可通过初始值的改变而方法来实现,由LCD1602完成显示部分。具体如下所述3.1波形的产生原理将各种波形的每个周期平均分成255份,把每份的值依次发给P0口,每份的时间间隔通过开启定时器0来

3、控制,当定时时间到时单片机就产生中断,在中断服务程序里面通过P0口将每份的值发出去,这个值通过DAC0832转换为模拟量。如图3.1图3.13.2波形的产生过程3.2.1正弦波的产生过程对正弦波的一个周期进行等间隔的采样,采样次数为255次,将所采样的数值转化为8位二进制数存放在数组tosin255里面。然后定义一个无符号型变量b,当定时器产生一次中断,单片机就将tosinb值赋予P0引脚,同时变量b自加1,并且当b加到255时会自动变为0,因为无符号型变量的围是0255。程序如下:switch(fun)case0: /fun=0正弦波 P0=tosinb ;b+; break;3.2.2三角

4、波的产生过程 定义一个无符号变量c,每当定时器定时时间到达时,如果c值大于0而小于128,c自加1,将c值赋予P0口;如果c值大于128,则用255减去c值赋予P0口;程序如下:case1: / fun=1三角波 if(c128) P0=2*c; else P0=2*(255-c); c+; break;给赋值结果乘以2,因为不乘2的话,锯齿波中的变量e最大可以加到255,但三角波中赋予P0口的最大值只有128,为了让输出电压幅值统一期间,我们对其乘以2。图3.33.2.3方波的产生过程方波较其它波的产生原理较简单,它也是定义一个无符号字符变量d,当定时器产生一次中断则d自动加1。当d小于12

5、8时,将0xff赋予P0口;当d大于128时,将0x00赋予P0口;程序如下:case2: /fun=2 方波 d+; if(d=128) P0=0x00; else P0=0xff; break;图 图3.43.2.4锯齿波的产生过程锯齿波的产生是定义一个变量e,每当定时器中断一次,则把n值赋予P0口。同时n自加1。在此处当e加到255时则会自动溢出变为0。程序如下:case3: /fun=3锯齿波 if(n255) P0=n; n+; break; 图3.53.3波形的选择与调频调幅的实现 波形的选择与调频调幅通过P1口按键选择来实现,具体如下所述3.3.1波形的选择在本方案中,我们通过1

6、#按键进行波形选择。具体方法是定义一个变量fun,当1#按键按下一次时,其就自动加1。其不同的数值代表不同的波形。具体如下:fun=0代表正弦波fun=1代表三角波fun=2代表方波fun=3代表锯齿波3.3.2调幅功能的实现 本方案对波形的幅值可以调节为5V、4V、3V、2V、1V;在这里我们定义一个变量“chu”,并且将赋予P0端口的值5等分,也就是把那个值先除以5,再乘以变量“chu”,所以在这里只要改变变量“chu的值就可以改变输出波形的幅值。在方案中是通过2#按键改变变量的。void key2(void) /选择幅值 chu+;if(chu=11)chu=0x01;具体的调压方式以正

7、弦波说明如下: case0: /fun=0正弦波 P0=tosinb/5*chu; b+; break;也就是说,调压功能把将要赋给P0口的值除以5乘以“chu”即可实现。3.3.3调频功能的实现由于波形的输出时通过将一个周期的完整波形平均分成255份,每等份的时间是由定时器0初值来确定的。故在这里改变定时器0的初值就可以改变输出波形的频率。本方案是通过3#按键来调频的,定义一个变量fre,每按一下fre加1,则定时器初值改变,频率改变。3.4按键中断方式的介绍与程序本方案采用独立式按键中断来控制单片机的,相比较键盘扫描方式而言大大的节省了CPU运行时间,因为扫描方式单片机不停的忙于扫描键盘,

8、而中断方式不需要,只要键盘有按键按下,硬件就会给单片机一次中断,单片机收到外部中断后采取扫面键盘一次,所以无需不停地扫描。void exinto(void) interrupt0EA=0;TR0=1;key_value=(P1&0Xff);EA=1;void judge(void) /键值判断程序 uchar line; line=key_value;if(line=0xfe)key1();if(line=0xfd)key2();if(line=0xfb)key3();key_value=0; 4.仿真与调试分析 本次实验我们是在proteus仿真软件下完成的。 系统的仿真波形如下: 正弦波

9、三角波方波锯齿波#include #define uchar unsigned char #define uint unsigned intsbit rs=P37;sbit rw=P36;sbit e=P35;uchar fun=0,chu=5,key_value=0,fre=0,b=0,c=0,d=0,n=0,pinlu,tl,th; uchar code table1= sin ;uchar code table2=sawtooth;uchar code table3= square ;uchar code table4= train ;uchar codefe2=0xa9,0xfc;uc

10、har code tosin256=0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5 ,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,0xf5 ,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,

11、0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd ,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda ,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa

12、5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51 ,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13,0x11,0x10,0x0e,0x0d,0x0b,

13、0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00 ,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 ; void delay(uint t) while(t-);void delay1(uint z) uint x,y; for(x=z;x0;x-) /1毫秒延时 for(y=110;y0;y-); void write_(uchar ) rs=0; P2=;

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

当前位置:首页 > 办公文档 > 模板/表格 > 财务表格

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号