简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx

上传人:b****2 文档编号:13367626 上传时间:2022-10-10 格式:DOCX 页数:31 大小:5.24MB
下载 相关 举报
简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx_第1页
第1页 / 共31页
简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx_第2页
第2页 / 共31页
简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx_第3页
第3页 / 共31页
简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx_第4页
第4页 / 共31页
简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx

《简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。

简易信号发生器及其测试仪设计与制作Word文档下载推荐.docx

设计任务:

(一)利用单片机(AT89C52)及DA转换器(AD7520)作为主要元件设计并制作一信号发生装置,其原理框图如图1所示。

图1:

简易信号发生器原理示意图

(二)利用单片机(AT89C52)及AD转换器(MAX157)作为主要元件设计一信号测试仪测量

(一)中所产生信号的频率、信号幅度等参数,其原理框图如图2所示。

图2:

信号测试仪原理示意图

设计要求:

(一)基本要求

1.信号发生器至少要能够产生正弦波、方波、三角波和锯齿波等四种波形;

2.信号发生器所能产生信号的最高频率不得低于100HZ;

3.信号发生器所能产生信号的最高幅度不得小于5V;

4.信号发生器的所有参数均能通过键盘设置,并用数码管循环显示所设置得各个参数、也可用键盘选择所需要显示的参数;

5.信号测试仪能利用键盘选择在数码管上显示所测得参数;

6.自制系统所需电源。

(二)扩展要求

1.利用计算机设置信号波形、幅度、频率等;

2.利用计算机显示所测得的信号参数;

3.其他(如扫频等)。

四、设计思路

使用C语言进行编程,控制按下键盘中某个键实现特定的功能,通过单片机的I/O口进行输出,产生的信号通过DA转换器变换为模拟信号,并使用数码管进行波形种类和频率、幅度的显示。

五、设计内容

(一)软件部分

1、幅度、频率调节模块

本次实验中,我们所作出的信号发生器需要实现幅度、频率可调,对于幅度,我们可取默认值1V,当按键检测到按下时执行加或减的命令。

而频率的调节可以通过运用中断时间的调节来实现。

elseif(keyboard_status==5)//幅值加1,最大为5

{Asign=Asign+1;

xianshi();

if(Asign>

=5)

{Asign=5;

}}

elseif(keyboard_status==6)//幅值减1,最小为1

{Asign=Asign-1;

if(Asign<

=1)

{Asign=1;

}xianshi();

}

elseif(keyboard_status==7)//频率加1,最大为10ms

{count=count+1000;

if(count>

=10000)

{count=10000;

elseif(keyboard_status==8)//频率减1,最小为1ms

{count=count-1000;

if(count<

=1000)

{count=1000;

2、波形的输出模块

信号发生器需要实现的是方波,三角波,锯齿波和正弦波四种波形,我们采用的是取点法,在一个周期内选择64个点,并将其转化为10位数字量送到DA转换器中。

voidtime(void)interrupt1

{

TH0=(65536-count)/256;

TL0=(65536-count)%256;

if(lx==0)

{

for(m=0;

m<

64;

m++)

{CP=0;

qudian[m]=Asign*1024/5;

P3=qudian[m];

D1=qudian[m]>

>

8;

D2=qudian[m]>

9;

CP=1;

if(m>

=32)

{CP=0;

qudian[m]=0x00;

elseif(lx==1)

32;

m++)

{qudian[m]=Asign*1024*m/64/5;

CP=0;

CP=1}

for(m=32;

m>

=1;

m--)

elseif(lx==2)

elseif(lx==3)

for(m=0;

{qudian[m]=Asign*1024*sin(0.09817477*m)/5;

}

}

voidmain()

EA=1;

ET0=1;

TR0=1;

TMOD=0x00;

while

(1)

{TH0=(65536-count)/256;

TL0=(65536-count)%256;

KeyDown();

//读取按键

a1=0;

a2=0;

a3=0;

a4=0;

a5=0;

if(keyboard_status==0)//复位

count=1000;

Asign=1;

lx=0;

}

elseif(keyboard_status==1)//显示方波

{lx=0;

Squarevalue();

elseif(keyboard_status==2)//显示三角波

{lx=1;

Trianglevalue();

elseif(keyboard_status==3)//显示锯齿波

{lx=2;

Sawtoothvalue();

elseif(keyboard_status==4)//显示正弦波

{lx=3;

Sinvalue();

3.键盘扫描模块

利用键盘扫描来读取键值,检测到按键按下时,会进行相应的操作。

voidKeyDown()//按键检测函数的定义

{

chara=0;

KEY=0x0f;

if(KEY!

=0x0f)//读取按键是否按下

Delay10ms();

//延时10ms进行消抖

=0x0f)//再次检测键盘是否按下

{

//测试列

KEY=0X0F;

switch(KEY)

case(0X07):

keyboard_status=0;

break;

case(0X0b):

keyboard_status;

case(0X0d):

case(0X0e):

//测试行

KEY=0XF0;

case(0X70):

keyboard_status=keyboard_status;

case(0Xb0):

keyboard_status=keyboard_status+4;

case(0Xd0):

keyboard_status=keyboard_status+8;

case(0Xe0):

keyboard_status=keyboard_status+12;

while((a<

50)&

&

(KEY!

=0xf0))//检测按键松手检测

a++;

}}}}

4.延时函数

voidDelay10ms(void)//10ms延时函数定义

unsignedchara,b,c;

for(c=1;

c>

0;

c--)

for(b=38;

b>

b--)

for(a=130;

a>

a--);

5.计算各个波形的有效值

显示时显示的为周期与有效值,因此需要将幅值进行转化,利用的为公式,定义的有效值为全局变量。

voidSinvalue()//正弦波有效值

{floatsum1=0,sum2=0;

for(i=0;

i<

i++)

sum1=Asign*Asign*qudian[i]*qudian[i]+sum1;

sum2=sum1/64;

sum3=sqrt(sum2);

a1=1,a2=0,a3=0,a4=0,a5=0;

LED=LED_tab[1];

shu=10;

while(shu--);

LED=0x00;

voidSquarevalue()//方波有效值

sum2=sum1/64;

sum3=sqrt(sum2);

a1=1,a2=0,a3=0,a4=0,a5=0;

LED=LED_tab[2];

shu=10;

while(shu--);

LED=0x00

voidTrianglevalue()//三角波有效值

LED=LED_tab[3];

voidSawtoothvalue()//锯齿波有效值

sum1=Asign*Asign*qudian[i]*qudian[i]+sum1;

LED=LED_tab[4];

LED=0x00;

}

6.显示模块

通过5位数码管进行显示。

第一

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

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1