基于51单片机的四种波形信号发生器仿真设计(仿真+程序源码+设计说明书+讲解视频)

这篇具有很好参考价值的文章主要介绍了基于51单片机的四种波形信号发生器仿真设计(仿真+程序源码+设计说明书+讲解视频)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本设计

基于51单片机信号发生器仿真设计

(仿真+程序源码+设计说明书+讲解视频)

仿真原版本:proteus 7.8

程序编译器:keil 4/keil 5

编程语言:C语言

设计编号:S0015

1 设计说明:

1、本设计采用AT89C51单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、运放电路(LM324)、按键和LCD1602液晶显示电路。

2、电路采用单片机和一片DAC0832数模转换器组成数字式低频信号发生器,可产生正弦波、矩形波、锯齿波和三角波四种波形。

3、通过键盘来控制四种波形的类型选择、频率变化,并通过液晶1602显示其各自的波形类型以及频率数值。

本设计硬件电路简单,软件功能完善,控制系统可靠,性价比较高,具有一定的实用价值和参考价值

2 讲解视频:

包含程序讲解和代码讲解

51单片机数字多种波形信号发生器仿真设计(程序+仿真+报告+代码讲解)

3 仿真电路:

单片机产生波形程序,51单片机,音视频,嵌入式硬件单片机产生波形程序,51单片机,音视频,嵌入式硬件单片机产生波形程序,51单片机,音视频,嵌入式硬件单片机产生波形程序,51单片机,音视频,嵌入式硬件

程序

单片机产生波形程序,51单片机,音视频,嵌入式硬件

程序设计流程图

单片机产生波形程序,51单片机,音视频,嵌入式硬件

LCD1602显示

//----------------------------
//写LCD命令
//---------------------------------
void Write_LCD_Command(uchar cmd)
{
	   while((Busy_Check()&0x80)==0x80);   //忙等待
	   RS=0;  //选择命令寄存器
	   RW=0;  //写
	   EN=0;
	   P1=cmd;EN=1;DelayMS(1);EN=0;
}										  
//--------------------------------------
//发送数据
//---------------------------------------
void Write_LCD_Data(uchar dat)
{
	 while((Busy_Check()&0x80)==0x80);   //忙等待	
	  RS=1;  RW=0; EN=0; P1=dat;EN=1;DelayMS(1);EN=0;	
}
//------------------------------------
//LCD初始化			   
//-----------------------------------------
void Init_LCD()
{		
	Write_LCD_Command(0x38);
	DelayMS(1);
	Write_LCD_Command(0x01); //清屏
	DelayMS(1);
	Write_LCD_Command(0x06); //字符进入模式:屏幕不动,字符后移
	DelayMS(1);
	Write_LCD_Command(0x0C); //显示开、关光标
	DelayMS(1);
}

//--向LCD写频率值
void Write_freq(uint k)
{
	uchar qian,bai,shi,ge;
	qian=k/1000;
	bai=k/100%10;
	shi=k/10%10;
	ge=k%10;
	Write_LCD_Command(0x86+0x40);
	Write_LCD_Data(0x30+qian);
	Write_LCD_Data(0x30+bai);
	Write_LCD_Data(0x30+shi);
	Write_LCD_Data(0x30+ge);
	Write_LCD_Data(0x48);
	Write_LCD_Data(0x5a);
}

 //--LCD上显示不同波形频率
  void Xianshi_f()		   
{
  if(WaveChoice==1)
  {
     freq=(10000000/(50000+2860*ys));
	 Write_freq(freq);
  }
  if(WaveChoice==2)
  {
     freq=(10000000/(50000+2300*ys));
	 Write_freq(freq);
  }
   if(WaveChoice==3)
  {
     freq=(10000000/(14000+2300*ys));
	 Write_freq(freq);
  }
    if(WaveChoice==4)
  {
     freq=(10000000/(15000+2300*ys));
	 Write_freq(freq);
  }
}
//--LCD上写波形类型
void Write_wave(uchar  t )
{
	switch(t)
	{
		case 0:
				//-- 无输出
				 Write_LCD_Command(0x86);
  				 DelayMS(5);
   				 for (i=0;i<sizeof(No)-1;i++)
					{
						Write_LCD_Data(No[i]);
						DelayMS(5);
					}
					break;
		case 1:
				//--正弦波
				ys=25;
				Write_LCD_Command(0x86);
  				 DelayMS(5);
   				 for (i=0;i<sizeof(Sin)-1;i++)
					{
						Write_LCD_Data(Sin[i]);
						DelayMS(5);
					}
				break;
		case 2:
				//---矩形波
				ys=30;
				Write_LCD_Command(0x86);
  				 DelayMS(5);
   				 for (i=0;i<sizeof(Squ)-1;i++)
					{
						Write_LCD_Data(Squ[i]);
						DelayMS(5);
					 }
			
				break;
		case 3:
				//---三角波
				ys=30;
				Write_LCD_Command(0x86);
  				 DelayMS(5);
   				 for (i=0;i<sizeof(Tri)-1;i++)
					{
						Write_LCD_Data(Tri[i]);
						DelayMS(5);
					}
				break;
		case 4:
				//----锯齿波
				ys=30;
			  	 Write_LCD_Command(0x86);//液晶显示位置
  				 DelayMS(5);
   				 for (i=0;i<sizeof(Saw)-1;i++)
					{
						Write_LCD_Data(Saw[i]);
						DelayMS(5);
					 }
				break;
	}
}

按键扫描

//----按键扫描
void keyscanf()
{	
	if(K2==0)
	{
		DelayMS(5);
		if(K2==0)
		{
			while(!K2);
			ys--;
			if(ys==0)
			ys=20;
		}
	}
	if(K3==0)
	{
		DelayMS(5);
		if(K3==0)
		{
			while(!K3);
			ys++;
			if(ys>22)
			ys=20;
		}
	}
	if(K4==0)
	{
		DelayMS(5);
		if(K4==0)
		{
			while(!K4);
			if(WaveChoice==2)
			sqar_num=sqar_num+2;
			if(sqar_num==238)
				sqar_num=128;
		}
	}
	if(K5==0)
	{
		DelayMS(5);
		if(K5==0)
		{
			while(!K5);
			if(WaveChoice==2)
			sqar_num=sqar_num-2;
			if(sqar_num==18)
				sqar_num=128;			
		}
	}
} 

主函数

//----主程序--- 
void main()
{
	Init_LCD();
	IE=0X81;
	IT0=1;
	Write_LCD_Command(0x80);//--显示wave:
   	DelayMS(5);	 	
   for (i=0;i<sizeof(Wave)-1;i++)
		{
			Write_LCD_Data(Wave[i]);
			DelayMS(5);
		}
   	 Write_LCD_Command(0x80+0X40);//----显示freq:
     DelayMS(5);
    for (i=0;i<sizeof(Fre)-1;i++)
		{
			Write_LCD_Data(Fre[i]);
			DelayMS(5);
		}
	   Write_wave(WaveChoice);
	while (1)
	{
			 keyscanf();
		Out_Wave(WaveChoice);
		if(!(K1&K2&K3))
				Xianshi_f();
	}	  
}

本系统采用编程的方法,来输出四种不同的波形即正弦波、矩形波、三角波、锯齿波。各种波形的产生方法如下。

正弦波发生子程序

正弦波的产生比较特殊,它不能由单片机直接产生,只能由如图17所示的阶梯波来向正弦波逼近。很显然,在一个周期内阶梯波的阶梯数目越多,单片机输出的波形也就越接近正弦波。

单片机产生波形程序,51单片机,音视频,嵌入式硬件

图17 正弦波信号的产生

先假定正弦波的振幅是2.56 V,则波谷对应的数字量为最小值00H,波峰对应的数字量为最大值FFH。将正弦波的第一个周期的波形按角度均分为若干等份,并计算出各点对应的电压值,电压值计算方法:Vx=2.5·(1+sinθ),因为00H~FFH对应的数字量为0~255,所以根据算出的电压就可直接写出各点所对应的数字量。单片机将一个周期的数字量存入一定的存储区域中,然后依次循环取出这些数字量,并送D/A电路转换成阶梯波,即近似的正弦波输出。图18为正弦波产生的流程图。

单片机产生波形程序,51单片机,音视频,嵌入式硬件

图18 正弦波产生的流程图

矩形波发生子程序

如图19所示,矩形波的实现比较简单。首先定义一个无符号字符型变量i=0,使自变量i不断的自动加1,若i的值小于squa_num,将P0口赋值为0xFF;若i的值大于squa_num,则将P0口赋值为0x00。当i自加到256后又自动变为0,以此循环,即可得到矩形波。当squa_num=128时,此时输出的为方波。调节squa_num的大小,即可实现矩形波占空比的调节;调节延时时间的大小,即可实现矩形波频率的改变。

单片机产生波形程序,51单片机,音视频,嵌入式硬件

图19 矩形波产生流程图

三角波发生子程序

三角波中的斜线用一个个小台阶来逼近,当台阶间隔很小时,波形基本上近似一直线。首先定义一个无符号字符型变量i=0,使自变量i不断的自动加1,若i的值小于128,将P0口赋值为i;若i的值大于128,则将P0口赋值为256-i。当i自加到256后又自动变为0,以此循环,从而P0口实现了周期性的数字量变换,在经过数模转换后转变成模拟信号,经运算放大电路后就得到了周期性的三角波。三角波产生流程图如图20所示。

单片机产生波形程序,51单片机,音视频,嵌入式硬件

​ 图20 三角波发生流程图

锯齿波发生子程序

锯齿波的实现过程与三角波类似,也是定义一个变量i=0,并使P0=i,自变量i不断的自动加1,直到加到255,然后i又可以自动归为0,再不断的重复上过程。在此过程中,P0口的值也随着i一样变化,经数模转换DAC0832后,周期性逐一变化的数字量就转换为锯齿波输出了。通过调节P0口每相邻两个值之间的延迟时间,就可以改变锯齿波的频率。图21为锯齿波发生流程图。

单片机产生波形程序,51单片机,音视频,嵌入式硬件

图21 锯齿波发生流程图

设计说明书

单片机产生波形程序,51单片机,音视频,嵌入式硬件

信号发生器是一种常用的信号源,广泛地应用于电子电路、自动控制系统和教学实验等领域。 本设计采用AT89C51单片机作为控制核心,外围采用数字/模拟转换电路(DAC0832)、运放电路(LM324)、按键和LCD液晶显示电路。电路采用单片机和一片DAC0832数模转换器组成数字式低频信号发生器,可产生正弦波、矩形波、锯齿波和三角波四种波形。系统通过单片机产生数字信号,通过DAC0832转换为模拟信号,再通过放大器LM324就可以得到双极性的各种波形,最终由示波器显示出来。通过键盘来控制四种波形的类型选择、频率变化,并通过液晶1602显示其各自的波形类型以及频率数值。

本设计硬件电路简单,软件功能完善,控制系统可靠,性价比较高,具有一定的实用价值和参考价值。

关键词: AT89C51 单片机; 函数信号发生器;DAC0832;LCD液晶显示

资料清单

0、常见问题 必读!!!!
1、源程序
2、proteus仿真
3、开题报告
4、论文报告
5、讲解视频
Altium Designer 安装破解
filename.bat
KEIL+proteus 单片机仿真设计教程
KEIL安装破解
Proteus元器件查找
Proteus安装
Proteus简易使用教程
单片机学习资料
相关数据手册
答辩技巧
设计报告常用描述
鼠标双击打开查找嘉盛单片机51 STM32单片机课程毕业设计.url

单片机产生波形程序,51单片机,音视频,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-754646.html

资料下载链接

到了这里,关于基于51单片机的四种波形信号发生器仿真设计(仿真+程序源码+设计说明书+讲解视频)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【单片机基础】使用51单片机制作函数信号发生器(DAC0832使用仿真)

    单片机作为一个数字电路系统,当需要采集外界模拟量的使用需要进行AD转换,将模拟量转换成数字量,供单片机使用。51单片机需要外部配置一个AD转换芯片来进行模拟量的采集,如我之前写了一篇ADC0832的使用。高级的单片机如STC12和STM32已经集成了AD转换功能,只需简单配置

    2024年02月08日
    浏览(45)
  • 【51毕业设计案例】【006】波形发生器(正弦波、矩形波、三角波、锯齿波)-基于51单片机

    功能介绍: 1.输出 正弦波、矩形波、三角波、锯齿波 波形 2.设定波形输出频率 3.设定修改频率的步进值 整体功能简述: 通过按键可以修改输出的波形,一共可以输出四种波形,分别是:正弦波、矩形波、三角波、锯齿波 ;波形也可以修改频率,频率范围为50Hz~0.1Hz。并且可

    2024年02月09日
    浏览(66)
  • 基于51单片机的波形发生器proteus仿真数码管LCD12864显示

    仿真图1简介: 本系统采用51单片机作为系统的MCU(具体型号见下图),该系统显示器为四位数码管,可实时显示波形的参数情况 可显示四种波形,分别是方波、正弦波、三角波、锯齿波。 该设计具有电压表功能,可显示当前所测电压参数,其中ADC芯片采用的是PCF8591 该设计

    2023年04月08日
    浏览(44)
  • 基于51单片机的波形发生器(PCF8591、正弦波、三角波、锯齿波、方波)

            正弦波、三角波、锯齿波和方波是我们平时最常见的四种波形,那么学会使用单片机产生这四种波就很重要了。但学过51单片机就知道,其IO引脚只能输出高电平或低电平,单靠其引脚生成以上波形,好像不大可能,因此我们需要配合使用另一个很重要的芯片,DAC芯片

    2024年02月09日
    浏览(89)
  • 【51单片机】DAC0832制作信号发生器(方波,三角波,锯齿波)

    将模拟量转换为数字量称为模数转换(A/D转换), 模拟量是连续的 ,比如电压、电流等,可以连续变化的量; 数字量是离散的 ,对应于计算机中的位,每一个位只能是0或1,是不存在中间状态的。通过模数转换原件将模拟量转化为数字量输入计算机,以便计算机进行计算、

    2024年02月06日
    浏览(39)
  • 51单片机入门教程(4)——波形发生器

    目录 1、总述 2、系统硬件设计  3、系统软件设计思路  3、测试与分析 (1)Proteus仿真测试 (2)直流稳压电源测试 (3)实物测试 该篇为51单片机入门教程的实战篇 ,本篇介绍了以51单片机和DAC0832数模转换芯片为核心的波形发生器,并对DAC0832和UA741的结构和工作原理以及电

    2024年02月08日
    浏览(50)
  • 【51单片机】点亮LED灯(四种形式)

    💖作者简介:大家好,我是泽奀。全栈领域新星创作者🥇  📝个人主页:weixin_52632755的博客_泽奀_CSDN博客 🎉点赞➕评论➕收藏 == 养成习惯 😋 💬本系列哔哩哔哩江科大51单片机的视频为主以及自己的总结梳理📚  https://blog.csdn.net/weixin_52632755/category_11316267.html 介绍两个比

    2023年04月13日
    浏览(41)
  • 【微机原理课设protues-汇编】基于8086四种波形发生器仿真设计-基于8086数码管矩阵键盘控制设计-基于8086微机原理直流电机控制系统-基于单片机PWM直流电机控制系统设计汇编

    文章转自电设屋,资料百度网盘下载地址  https://www.aiesst.cn/share.html 目录 1207基于8086四种波形发生器仿真设计-微机原理汇编仿真资料 1202基于8086数码管矩阵键盘控制设计-全套资料 1218基于8086智能汽车控制系统设计-微机原理课设 1209基于8086微机原理直流电机控制系统-设计资料

    2024年02月12日
    浏览(65)
  • 基于STM32单片机和AD9850的智能DDS函数信号发生器

    CSDN话题挑战赛第2期 参赛话题:学习笔记 有一天,我在浏览CSDN时看到一篇关于 AD9850 的帖子。AD9850是一款可以产生1hz到40mhz左右正弦波的芯片。淘宝的产品经销商能够将芯片与提供 TTL 电平控制的小板配对,然后以令人难以置信的 60元(或更低!)的价格出售。 要控制 AD985

    2024年02月13日
    浏览(46)
  • 【51单片机入门】实现流水灯的原理及四种方法(详细易上手型)

    初学单片机,流水灯的实现是必不可少的,下面将介绍流水灯的原理及使用STC-ISP软件延时计算器生成的延时代码实现流水灯的四种方法,最后介绍如何将延时函数模块化。 目录  一、流水灯原理  二、循环 三、移位运算符 四、库函数 五、数组          六、延时函数模块

    2024年02月05日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包