楼上说法差已~~~
没有AVR年代难道就没有调频出现?传统51虽然同有PWM模块,但可以用软件模拟来做,无非是输出一定频率的方波嘛;
言归正传,可能你的程序架构有问题;1HZ~400HZ,如空比50%的话,那么同期分别为:1S~2.5MS,对应半周期分别是:500MS~125MS;关于架构:按键可以放主程序,用软件纯延时来去抖都可,注意哦,按键如果一直按下时的响应你得处理哦,作长按或不响应;方波产生可以放定时中断,定时:1MS,或其它,定义一个unsigned int counter_max,有’+‘或'-'按下时counter_max分别对应'-'和'+',另定义一个unsigned int counter,一直减,减到0时输出翻转,然后将counter_max附给counter;这样做可以有效防止不同频率切换时所产生的毛刺;
if(有频率增加按键)
counter_max--;//注意counter_max的越界问题
else if(有频率在咸小按键)
counter_max++;//注意counter_max的越界问题
if(--counter==0)
{
counter=counter_max;
}
你的程序在哪里啊,如你所说你的程序肯定有问题啊,51单片机的话最好是用定时器中断做。
我建议你用AVR的单片机,配置定时器工作在比较匹配输出CTC模式(非PWM模式),能够产生高效高精度的方波信号,而且是由定时器独立产生,不用CPU参与也就不占用CPU的执行时间,做方波信号发生器是很好的,你如果要用键盘无级调节方波频率也很简单,你只需要在每按一次按键之后给定时器的比较匹配输出寄存器赋新的值就可以了。
程序有问题
按键到等到释放才执行 加一或减一操作的
按键最好在中断里扫描
程序问题
把程序上传上来让大家帮你分析分析