多功能波形发生器_第1页
多功能波形发生器_第2页
多功能波形发生器_第3页
多功能波形发生器_第4页
多功能波形发生器_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

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,0x4

14、0,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=; e=1; delay(5); e=0;void write_date(uchar date) rs=1; P2=dat

15、e; e=1; delay1(5); e=0; void write_f(uint date) /写频率/uchar qian,bai,shi,ge;if(fre=0)date=25;else if(fre=1)date=40;qian=date/1000;bai=date/100%10;shi=date/10%10;ge=date%10;write_(0x80+0x45);write_date(0x30+qian);write_date(0x30+bai);write_date(0x30+shi);write_date(0x30+ge);write_date(0x48);write_date

16、(0x5a);void write_h(uint date1)/写幅值 uchar high; high=date1%10; write_(0x80+0x40); write_date(0x30+high); void display() /显示 uchar num,fuzhi; write_(0x80); switch(fun) case0: for(num=0;num9;num+)write_date(table1num);break; case1: / for(num=0;num9;num+)write_date(table2num); break;case2: for(num=0;nu

17、m9;num+) write_date(table3num); break; case3:for(num=0;num9;num+)write_date(table4num); break; fuzhi=chu; write_h(chu); write_f(fre);void key1(void) /选择波形 fun+; if(fun=4) fun=0x00; void key2(void) /选择幅值 chu+;if(chu=6)chu=0x01; void key3(void)/选择频率 fre+;if(fre=2)fre=0x00;th=0xff;tl=fefre; void exinto

18、(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; void time0_int(void) interrupt 1 /中断服务程序 TH0=th; TL0=tl; TR0=0; switch(fun) case0: P0=tosinb/5*chu; /正弦波 b+; break; case1:/三角波 if(c128) P0=2*c/5*chu; else P0=2*(255-c)/5*chu; c+; break;case2:/方波 d+; if(d=128)

温馨提示

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

评论

0/150

提交评论