基于单片机的波形发生器设计,C语言程序,有个很小的问题,求解决 10
这是用51单片机做的波形发生器,C语言实现,因为要求频率可调,所以设了一个延时函数dump()。对三角波和方波等都可以拿这个函数实现频率调节,不知道为什么正弦波不可以,请...
这是用51单片机做的波形发生器,C语言实现,因为要求频率可调,所以设了一个延时函数dump()。对三角波和方波等都可以拿这个函数实现频率调节,不知道为什么正弦波不可以,请教大神帮我看一下正弦波函数有什么错误,怎么改。
void juchi() //锯齿波函数
{ uchar i;
for(i=0;i<255;i++)
{DAC0832=i;
dump(10+p);} //延时实现频率可调,p是变量
i=0x00; }
void zhengxian()
{
for(i=0;i<256;i++)
{DAC0832=sin[i];//查表取值
dump(2+p);
}
i=0;
}
这个正弦波的函数要怎么改一下实现频率调节啊,我觉得跟锯齿波那个写得一样啊,为什么前一个可调后一个不可以
这是截图,像方波、三角波和锯齿波的频率可以调节,正弦波的不管我调大还是调小波形都不变 展开
void juchi() //锯齿波函数
{ uchar i;
for(i=0;i<255;i++)
{DAC0832=i;
dump(10+p);} //延时实现频率可调,p是变量
i=0x00; }
void zhengxian()
{
for(i=0;i<256;i++)
{DAC0832=sin[i];//查表取值
dump(2+p);
}
i=0;
}
这个正弦波的函数要怎么改一下实现频率调节啊,我觉得跟锯齿波那个写得一样啊,为什么前一个可调后一个不可以
这是截图,像方波、三角波和锯齿波的频率可以调节,正弦波的不管我调大还是调小波形都不变 展开
5个回答
展开全部
void juchi() //锯齿波函数
{ uchar i;
for(i=0;i<255;i++)
{DAC0832=i;
dump(10+p);} //延时实现频率可调,p是变量
i=0x00; }
void zhengxian()
{
for(i=0;i<256;i++)//i没有声明 上面那个程序都有uchar i; uchar类型的最大值也只有255
{DAC0832=sin[i];//查表取值
dump(2+p);
}
i=0;
}
//最简单的方法就是复制juchi这个函数
//把DAC0832=i;改成DAC832=sin[i];就能看到效果了
void zhengxian() //正弦波函数
{ uchar i;
for(i=0;i<255;i++)
{DAC0832=sin[i];
dump(10+p);} //延时实现频率可调,p是变量
i=0x00; }
{ uchar i;
for(i=0;i<255;i++)
{DAC0832=i;
dump(10+p);} //延时实现频率可调,p是变量
i=0x00; }
void zhengxian()
{
for(i=0;i<256;i++)//i没有声明 上面那个程序都有uchar i; uchar类型的最大值也只有255
{DAC0832=sin[i];//查表取值
dump(2+p);
}
i=0;
}
//最简单的方法就是复制juchi这个函数
//把DAC0832=i;改成DAC832=sin[i];就能看到效果了
void zhengxian() //正弦波函数
{ uchar i;
for(i=0;i<255;i++)
{DAC0832=sin[i];
dump(10+p);} //延时实现频率可调,p是变量
i=0x00; }
追问
依然没有变化呀。。我还写了三角波和方波,这些都可以,就正弦的不行。。
展开全部
void zhengxian()
{
for(i=0;i<256;i++)
{DAC0832=sin[i];//查表取值
dump(2+p);
}
i=0;
}
这个函数你写的有问题吧,第一 没有 i 变量的声明,第二 如果 i 是uchar的 那么它永远都小于256的,没病不死人,程序这东西是不会撒谎的,仔细点就好了
{
for(i=0;i<256;i++)
{DAC0832=sin[i];//查表取值
dump(2+p);
}
i=0;
}
这个函数你写的有问题吧,第一 没有 i 变量的声明,第二 如果 i 是uchar的 那么它永远都小于256的,没病不死人,程序这东西是不会撒谎的,仔细点就好了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
锯齿波是从0到255的一个线性周期函数,每次跳转的时候波形达到最大值了,真是正值;
而正弦波在0到255之间的取值不是这样的,有正负之分,它是0-pi之间是正值,你考虑把i设置在该范围或0-pi/2范围内试试,步长取0.01,当然i不能是整行了。
而正弦波在0到255之间的取值不是这样的,有正负之分,它是0-pi之间是正值,你考虑把i设置在该范围或0-pi/2范围内试试,步长取0.01,当然i不能是整行了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
for循环里sin[i] 就算你查表取值 还是在变
DAC0832在一次for 循环里至少该是固定的值吧
DAC0832=sin【p】
就你现在那函数输出时什么样的波形
DAC0832在一次for 循环里至少该是固定的值吧
DAC0832=sin【p】
就你现在那函数输出时什么样的波形
更多追问追答
追问
现在的输出是正弦波 只是频率不能变大也不能变小
追答
void zhengxian()
{
uchar i,j;
for(i=0;i<256;i++)
{
for(j=0;j<20;j++)//改变20的取值===此为再延时每一次的脉冲
{
DAC0832=sin[i];//查表取值
dump(2+p);
}
}
i=0x00;
}
试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可能是你的正弦波已经达到最大,不能往大了!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询