函数发生器.docx
《函数发生器.docx》由会员分享,可在线阅读,更多相关《函数发生器.docx(10页珍藏版)》请在冰豆网上搜索。
函数发生器
函数发生器报告
一.实验内容
用AT89C51为核心来设计的函数发生器,通过DA转换,软件编程和其他硬件辅助来产生不同波形,如三角波,正弦波等。
在一定范围内幅度和频率可随意转换。
二.实验原理
函数发生器一般是指能自动产生正弦波.三角波.方波及锯齿波等电压波形的电路或仪器,而单片机输出的是数字信号,要转换模拟信号,需要使用DA转换器,为了使实验简单,易于实现,本设计采用DAC0808为数模转换。
波形的产生是通过89c51执行某一波形发生程序,向D/A装换器的输出端按一定的规律发生数据,从而在D/A转换点路输出端得到相应的电压波形,在89c51的中断口接1个按键,通过软件编程来选择各种波形,通过调节D/A的模拟电压值范围来改变幅值,另接一按键通过编程改变延时时间来控制波形的频率调节。
三.实验设计图
图1
四.程序框图
图2主程序设计图3中断控制波形模块图4中断延时控制模块
五.软件程序
#include
#defineucharunsignedchar
#defineuintunsignedint
uchard,x1,i=0;
uinty2=1;
ucharcodesin_tab[]={0,0,0,0,1,1,2,3,4,5,6,8,9,11,13,15,17,19,22,24,
27,30,33,36,39,42,46,49,53,56,60,64,68,72,76,80,
84,88,92,97,101,105,110,114,119,123,128,132,136,141,145,150,
154,158,163,167,171,175,179,183,187,191,195,199,202,206,209,213,
216,219,222,225,228,231,233,236,238,240,242,244,246,247,249,250,251,252,253,254,254,255,255,255};
voiddelay(uintp)
{uinty;
while(p--)
{for(y=0;y<10;y++);}
}
voidfangbo()
{uchara;
for(a=0;a<127;a++)
{P0=0XFF;
delay(y2);
}
for(a=0;a<127;a++)
{P0=0;
delay(y2);
}
}
voidjuchi()
{uchara;
for(a=0;a<255;a++)
{P0=a;
delay(y2);
}
}
voidsanjiao()
{uchara;
for(a=0;a<254;a=a+2)
{P0=a;
delay(y2);
}
for(a;a>1;a=a-2)
{P0=a;
delay(y2);
}
}
voidtixing()
{uchara,b;
for(a=0;a<254;a=a+2)
{P0=a;
delay(y2);
}
for(b=0;b<100;b=b+1)
{P0=a;
delay(y2);
}
for(a;a>1;a=a-2)
{P0=a;
delay(y2);
}
for(b=0;b<100;b=b+1)
{P0=a;
delay(y2);
}
}
voidzhengxian()
{uchara;
for(a=0;a<92;a++)
{P0=sin_tab[a];
delay(y2);
}
for(a=a-1;a>0;a--)
{P0=sin_tab[a];
delay(y2);
}
}
voidmain()
{EA=1;
EX0=1;
IT0=1;
EX1=1;
IT1=1;
P0=0;
while
(1)
{
if(d==1)
{P1_0=0;
P1_7=1;
fangbo();
}
if(d==2)
{P1_1=0;
P1_0=1;
juchi();
}
if(d==3)
{P1_1=1;
P1_2=0;
sanjiao();
}
if(d==4)
{P1_2=1;
P1_3=0;
tixing();
}
if(d==5)
{P1_7=0;
P1_3=1;
zhengxian();
}
}
}
voidinto()interrupt0
{EX0=0;
d++;
if(d==6)
d=1;
EX0=1;
}
voidint1()interrupt2
{EX1=0;
y2++;
if(y2==9)
y2=1;
EX1=1;
}
六.元件清单
C51单片机1个
DAC08081个
阻排1个
UA741放大器1个
按键2个
电阻4个
滑动变阻器1个
电解电容30PF1个
七.实验波形