Bootstrap

【Proteus仿真】基于51单片机的五种信号发生器(梯形波、正弦波、三角波、方波、锯齿波)

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

该项目旨在基于51单片机,采用Proteus设计一款多波形发生器,能够产生正弦波、方波、三角波、梯形波、锯齿波等不同波形。通过五个开关(K1-K5)的选择,用户可以灵活切换并观察各种波形的输出。项目融合了硬件设计和嵌入式系统开发,具备可扩展性,便于后续优化和升级。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

1、51单片机最小系统

2、按键模块

3、DAC0832模块

4、信号发生器

三、程序编程

#include "reg51.h" 
#include <data.h>
#define uchar unsigned char   
#define uint unsigned int   
#define key P1   
#define dataout P3   
uchar fre\[5\] ="001Hz";
uint data THHL=65536-3906;
uchar data keyword,n=0;   
uchar data Signal_chose = 0; 
uchar data div = 1; 
void keyscan()   
{    
 keyword=key&0x3f;   
 if(keyword!=0x3f)   
 {   
  while((key&0x3f)!=0x3f);	//等待按键松开   
  switch(keyword)   
  {   
		case 62: {Signal_chose=4;TR1=0;TR1=1; break;}  	//梯形波			
		case 59: {Signal_chose=0;TR1=0;TR1=1; break;}  	//正弦波
		case 55: {Signal_chose=1;TR1=0;TR1=1; break;}		//三角波	
		case 47: {Signal_chose=2;TR1=0;TR1=1; break;}		//方波
		case 31: {Signal_chose=3;TR1=0;TR1=1; break;}		//锯齿波
		default:{break;}   
   }   
 }   
}   
   
void main()   
{   
	init();
	while(1)   
	{   
		keyscan(); 
		switch(Signal_chose)   
			{   
				case 0: {dataout=sin_tab\[n\]; break;}  //正弦波
				case 1: {dataout=thr_tab\[n\]; break;}  //三角波
				case 2: {dataout=squ_tab\[n\]; break;}  //方波
				case 3: {dataout=255-n;break;}		//锯齿波
				case 4: {dataout=squ\_tab\_with\_trapezoidal\_wave\[n\];break;}		 //梯形波
				default:{break;}   
			 }   		
	}   
}   
   
void time_intt1(void) interrupt 3   
{   
	TL1=THHL%256;TH1=THHL/256;   
	n++;
}

四、实现现象

4.1 初始状态

编辑

4.2 梯形波发生器

编辑

4.3 正弦波发生器

编辑

4.3 三角波发生器

编辑

4.4 方波发生器

编辑

4.5 锯齿波发生器

编辑

具体动态效果看B站演示视频:

基于51单片机的信号发生器仿真_哔哩哔哩_bilibili

源程序和仿真文件:

链接:https://pan.baidu.com/s/1RGQKnsRRTzOu6ZhCeMgtgA 
提取码:dfk1 
–来自百度网盘超级会员V4的分享

;