单片机与DAC0832设计一个低频信号发生器,能产生正弦波方波锯齿波三角波。波形按键选择,频率幅度可调。

急需,先感谢您啦!

//0832各种波型输出演示
//P1.1P1.0 = 00时 正弦波
//P1.1P1.0 = 01时 锯齿波
//P1.1P1.0 = 10时 方波
//P1.1P1.0 = 11时 三角波
//需要连接的导线:
//(1)译码器Y0接DAC0832的CS
//(2)P3.6即XWR插孔接DAC0832的WR
//(3)8芯的排线连接8排针的P0口和DAC0832的D7-D0
//(4)串并转换区的+5v接DAC0832的参考电压Vref插孔
#include <reg51.h>
#include <ABSACC.H>//absacc.h是C51中绝对地址访问函数的头文件
#define daport XBYTE[0x8000]//将daport定义为外部I/O口,地址为8000H,则74ls138的Y0有效
sbit P1_1=P1^1;
sbit P1_0=P1^0;
unsigned char i,j,k; bit updown; //三角波的上升/下降
unsigned char code sinn[64]={
198,204,210,216,222,228,233,237,242,245,249,251,253,255,255,255,
255,254,252,250,247,243,239,235,230,224,219,213,207,201,194,188,
181,175,169,163,158,152,147,143,139,136,133,131,129,128,128,128,
129,130,132,135,138,142,146,151,156,162,168,174,180,186,193,199
}; //正弦的数值在128-255之间,所以输出的正弦幅值在0-5v
void main(void)
{
updown=0;
i=128;
j=0;
while(1)
{
if (P1_1==1)
{
if (P1_0==0) //输出占空比为25%的方波
{
if (j<=40) i=255;//i=255时输出的电压为+5v
else if(j<=160) i=0;//i=0时输出的电压为-5v
else j=0;
}
else //输出-5v—+5v的三角波
{
if (updown==0) //上升
{
if (i==255) updown=1;
else i=i+5;//i++;
}
else //下降
{
if (i==0) updown=0;//if(i==128) updown=0;i=128输出的电压为0
else i=i-5;//i--;
}
}
}
else{
if (P1_0==0) //正弦波
{
i=sinn[j];
if (j>=63) j=0;
}
else //锯齿波
{
if (i==255) i=128;
else i++;
}
}
daport=i;
for (k=0;k<2;k++);
j++;
}
}
温馨提示:答案为网友推荐,仅供参考
相似回答