单片机的函数信号发生器,输出4种波形,频率可调,原理图,仿真和C程序

设计要求

  1. 以MCS-51系列单片机为控制器件,用C语言进行程序开发,结合外围电子电路,设计一款函数信号发生器系统;

  2. 能够产生正弦波、方波、三角波和锯齿波4种波形;

  3. 扩展键盘输入电路,用于切换波形类型、设定频率大小和步进值;

  4. LCD1602显示电路实时显示当前波形类型、频率值等信息;

  5. 波形频率值调节范围:10~100Hz;

  6. 频率步进值调节范围:0.1~10Hz;

系统概述
本文基于51单片机设计的函数信号发生器系统,能够产生正弦波、方波、三角波和锯齿波4种波形,且波形频率可调,调节幅度为10~100Hz。

系统由5V供电模块、AT89C51单片机最小系统、DAC0832模数转换电路、LM358放大电路、LCD1602液晶显示电路、按键电路和LED指示灯电路组成。

系统框架如下所示:
在这里插入图片描述
工作原理为:单片机产生的数字信号,经DAC0832转换为模拟信号,再通过LM358运算电路放大后,输出4种频率可调的波形。

波形的类型和频率值由LCD液晶显示,波形的切换和频率的调节由按键控制。同时,4个不同色彩的LED分别作为不同波形的指示灯。

仿真电路图
在这里插入图片描述
在这里插入图片描述
原理图
在这里插入图片描述
仿真结果分析
打开函数信号发生器仿真文件,双击单片机加载Signal.hex文件(位于C程序文件夹内),运行仿真,结果如下。

LCD1602液晶第一行显示Wave:Sine,第二行显示Freq:10.0Hz。表示当前初始化波形为10Hz的正弦波,同时与正弦波相对应的绿色LED灯点亮。

此外,系统会自动弹出示波器窗口,显示该波形。本系统中,信号输出端接示波器的A通道。
在这里插入图片描述在这里插入图片描述
仿真运行时,如果不小心关闭示波器窗口或者未弹出示波器窗口,鼠标右击示波器,在下拉菜单中点击Digtal Oscilloscope即可恢复。

系统中,四个按键用于控制波形类型的切换、频率值的增减以及频率步进值的增减。

点击“切换”键,可实现正弦波、方波、三角波和锯齿波4种波形间的来回切换;

在波形频率显示模式下,“增加”和“减少”键用于增减当前波形的频率大小,系统默认频率步进值为0.1,即按下一次“增加”或“减少”键,频率的改变幅度为0.1Hz。

例如,我们将波形切换至方波,将其频率设定为14.5Hz,结果如下。此时,与方波对应的红色LED灯点亮。
在这里插入图片描述在这里插入图片描述
当按下“步进”键后,系统进入步进调节模式,如下图所示。LCD显示Step value:0.1,表示当前步进值为0.1Hz。此时,“增加”和“减少”键,用于改变步进值的大小。
在这里插入图片描述
例如,我们设定频率步进值为3Hz,结果如下所示。设定完成后,再次按下“步进”键,系统退出步进调节模式,返回频率显示模式。这时,按下“增加”或“减少”键,频率值的改变幅度就为3Hz。在这里插入图片描述
下面,我们设置系统输出频率为50Hz的三角波和80Hz的方波,结果如下。
在这里插入图片描述在这里插入图片描述

在这里插入图片描述在这里插入图片描述
综上所述,函数信号发生器仿真电路运行效果满足设计要求,验证成功。

部分C代码

void keyscan()					//按键扫描函数
{
	if(s1==0)					//频率加键是否被按下
	{	 
		EA=0;					//关闭中断
		delay(2);				//延时消抖
		if(s1==0)				//再次判断
		{
			while(!s1);			//按键松开
			pinlv+=bujin;		//频率以步进值增加
			if(pinlv>1000)		//频率值最大加到100Hz
			{
				pinlv=100;
			}
			display();
/*频率值最小是10Hz,pinlv的值是100(因为要显示小数点后一位),150000/100=1500,这个1500就是定时器需要计时的,单位是us,65536-1500得到的是定时器的初值,
先不管初值,先看定时时间,1500us,一个波形的周期是由64个定时组成的,所以,一个波形周期就是64*1500us=96000,也就是96ms,约等
于100ms,也就是10Hz的频率*/
			m=65536-(150000/pinlv);	  //计算频率
			a=m/256;				  //将定时器的初值赋值给变量
			b=m%256;
			EA=1;					  //打开中断总开关
		}
	}
	if(s2==0)					  //频率减键是否被按下
	{	 
		
		delay(5);
		if(s2==0)
		{
			EA=0;	
			while(!s2);
			pinlv-=bujin;
			if(pinlv<100)
			{
				pinlv=1000;
			}
			display();
			m=65536-(150000/pinlv);
			a=m/256;
			b=m%256;	
			EA=1;
		}
	}
	if(s3==0)					   //波形切换键是否被按下
	{	 
		delay(5);
		if(s3==0)
		{
			EA=0;
			while(!s3);
			boxing++;
			if(boxing>=4)
			{
				boxing=0;
			}
			display();
			EA=1;
		}
	}	
}

资源内容
(1)基于51单片机的函数信号发生器设计论文完整版;
(2)Keil C程序;
(3)Proteus仿真;
(4)原理图文件;
(5)Visio流程图文件;
(6)元器件清单;
(7)参考资料;

资源截图
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
重要的事情说一遍!!!

由于函数信号发生器设计是我的原创设计,获取全套资料,

请微信搜索关注我的公众号:交院小智

  • 19
    点赞
  • 223
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于STC89C51单片机函数信号发生器仿真图如下: STC89C51单片机是一经典的51系列单片机,具有8位数据总线和12MHz的工作频率。在函数信号发生器仿真图中,我们可以通过STC89C51单片机的IO口实现不同类型的信号波形输出。 首先,我们需要连接STC89C51单片机的IO口和信号发生器的输入端。通过编写相应的程序,可以实现方、正弦、三角等不同类型的信号输出。在程序中,我们可以定义相应的变量来控制信号的频率、占空比和幅值等参数。 对于方信号,我们可以使用STC89C51单片机的IO口输出高电平和低电平的方式来实现。通过控制高低电平的时间比例,我们可以调节方的占空比。同时,通过控制IO口的频率,可以调节方频率。 对于正弦信号,我们可以使用STC89C51单片机的IO口输出一系列模拟正弦的数字信号。通过对这些数字信号进行滤和数字模拟转换,可以得到一个接近真实正弦的模拟信号。 对于三角信号,我们可以使用STC89C51单片机的IO口以线性递增或递减的方式输出一系列数字信号。通过对这些数字信号进行滤和数字模拟转换,可以得到一个接近真实三角的模拟信号。 在仿真图中,我们可以看到STC89C51单片机通过IO口输出不同类型的信号波形,通过连接到信号发生器的输入端进行信号的输出。这样可以实现一个基于STC89C51单片机函数信号发生器

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值