基于51单片机的函数信号发生器

函数信号发生器和函数信号识别器是一直想做的两个项目,但是一直苦于没时间才做的拖拖拉拉。
这一次的项目是个第一版项目,总共可以产生四种波形,分别为方波、三角波、锯齿波及梯形波。每种波形可以通过按键改变占空比。
预计第二版会加入正弦波余弦波等更加有曲线的波形。

这次的发生器选用了DAC0832作为转化芯片,LM358作为放大芯片。其他的电路组成都是很基础很基础的部分。
原理图

在设计中,总共用了四个按键来调节。分别为:K0:复位按键(RST) K1:选择波形(P33) K2:占空比增大(P34) K3:占空比减小(P35)。示波器连接了OUT和RFB是为了对比波形的峰值,主要是体现出LM358的放大作用。

这一次PCB设计用的过孔较少,但是还是受困于20mil的走线没法钻过芯片的引脚,还是把电源线扯的老长了。

PCB

部分代码如下:

int main(void)
{
    unsigned char model=0;//0-方波 1-三角波 2-锯齿波 3-正弦波
    unsigned int count=0;//计数器
    unsigned int squ_per=256;
    unsigned int tri_per=256;
    unsigned int saw_per=256;
    unsigned int sin_per=256;
    init();
    while(1)
    {
        while(model==0)
        {    
            square_wave(squ_per,&count);
            count+=4;
            squ_per=key_plus(squ_per);
            squ_per=key_subc(squ_per);
            model=key_model(model,&squ_per,&count);//每次退出当前while时记得复原Period和Count的数据
        }    
        while(model==1)
        {
            triangle_wave(tri_per,&count);
            count+=4;
            tri_per=key_plus(tri_per);
            tri_per=key_subc(tri_per);
            model=key_model(model,&tri_per,&count);
        }
        while(model==2)
        {
            sawtooth_wave(saw_per,&count);
            count+=4;
            saw_per=key_plus(saw_per);
            saw_per=key_subc(saw_per);
            model=key_model(model,&saw_per,&count);
        }
        while(model==3)
        {
            sin_wave(sin_per,&count);
            count+=4;
            sin_per=key_plus(sin_per);
            sin_per=key_subc(sin_per);
            model=key_model(model,&sin_per,&count);
        }
    }
     return 0;
}

这一次把代码弄成库函数形式了,感觉比以前一股脑塞进mian.c里舒服多了,以后还是打算全部整库函数,维护性强太多了。

这一次资源链接下载链接,欢迎下载共同学习。

——————————————————强行分割线———————————————————

更新了edge,再一次上手markdown就舒服多了,新版的edge和以往体验差不多,但是貌似更卡了。

主要的优化点:1、插入图片后,打字不会在自动回到最顶端了,以前都是编辑界面来回跳。
2、插入代码块貌似没有bug了,但是还是不敢插入100行以上的代码,生怕卡死。
3、多了类似于Word里面的自动识错。

目前遇到的bug问题:1、上传图片有时候不会成功,本文的原理图上传了两次,PCB上传了三次,还是希望CSDN优化一下吧
2、自动识错duck不必识别图片里网址中的错误,显得跟S13一样(当然,这个S13也标红了)

-----------------------------------------------再分割一下----------------------------------------------------

飘红好像是所有输入对话框的地方都有,属实无语。

猜你喜欢

转载自blog.csdn.net/toyjis/article/details/105886632