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

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

时间:2024-09-20 11:55:13浏览次数:10  
标签:case chose 梯形波 Signal 51 发生器 break 单片机 TR1

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

该项目旨在基于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的分享

标签:case,chose,梯形波,Signal,51,发生器,break,单片机,TR1
From: https://blog.csdn.net/szq0419/article/details/142360370

相关文章

  • 【Proteus仿真】基于51单片机的简易电压表制作(可串口远程调控)
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能基于51单片机,设计一个简易电压表:采用3位LED数码管显示被测电压值:基本测量范围是0-5V;测量误差为士0.02V。开机或复位后,在LED最右端显示“P”,以提示系统正常:正常运行时,不断采集电压值并送显示。......
  • 15【Proteus仿真】基于51单片机的智能车位锁系统(电流检测、电压检测、红外检测、灯光
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能基于STC89C51单片机,具有复位电路和晶振电路;1.按下升起的按键后,然后用GP2D12红外传感器判断车辆是否在位,若不在位,升降杆高度为0,L298N驱动电机顺时针运转,升降杆起升,高度慢慢提高;假设提高到10,电机停......
  • 单片机与PLC的区别:一场弱电与强电的对话
    单片机与PLC的区别:一场弱电与强电的对话引言单片机和PLC(可编程逻辑控制器)是工业自动化和电子设备控制中的两大“主角”。虽然它们的功能看起来相似,都是控制器,但它们的使用环境、设计理念和性能却大不相同。简单来说,单片机常用于小型电子设备,属于弱电项目,而PLC则用于工业生......
  • 从0开始的stm32单片机学习之旅 第三章
    查看原理图(以最小系统原理图为例)1通过看引脚名称来判断电路是属于哪个功能的1.1电源管脚:引脚图中的VDD、VSS、VREF+、VREF-、VSSA、VDDA等都属于电源引脚。VDD:VDD是单片机的正电源引脚,用于提供单片机的工作电压。它通常连接到电源供应器的正极。VSS:VSS是单片机的地(GN......
  • 基于单片机设计的激光测距仪(采用XKC-Kl200模块)
    一、前言随着科技的不断进步和应用需求的增加,测距仪成为了许多领域必备的工具之一。传统的测距仪价格昂贵、体积庞大,使用起来不够方便。本项目采用STC89C52单片机作为主控芯片,结合XKC-KL200激光测距模块和LCD1602显示器,实现了一个简易且高效的激光测距仪。这个测距仪可以帮助用户快......
  • 51c视觉~YOLO~合集1
    1、Yolo8(一)YOLOv8和OpenCV实现货架上的物体计数们将根据检测到的物体的坐标数据获得的见解确定货架的数量以及货架上的物体数量。    我们使用SKU110K数据集来构建我的目标检测模型。此数据集包含商店货架上对象的边界框注释,并且由一个名为“object”的类组成。    由于......
  • Day51.后端框架初认及补充
    1.后端框架初认及补充_flask框架初识启动框2.后端框架初认及补充_flask框架的路由格式,请求方式,返回格式3.后端框架初认及补充_form表单使用name标签可以获取用户输入的内容4.后端框架初认及补充_form表单get请求会将用户的输入拼接在url后,且密码的密文变成明文形式5.后端框架初......
  • 51c视觉~合集30
    #SaRA修改一行代码就能实现高效微调!上海交大&腾讯开源:兼顾原始生成和下游任务仅修改一行训练代码即可实现微调过程。文章链接:https://arxiv.org/pdf/2409.06633项目链接:https://sjtuplayer.github.io/projects/SaRA/1.引言SaRA是一种针对预训练扩散模型的高效微调方法。通过微调预......
  • P2051 [AHOI2009] 中国象棋 题解
    DP好题?首先确定,每一行/列只能放至多两个棋子,这么少,所以我们的状态肯定和棋子数有关。由于我们不关注具体的方案数,所以我们不妨只关心对应棋子数量的行/列的数量。同时,由于考虑行和列都是一样的,所以我们不妨用行递推。所以我们设$\dp_{i,j,k}\$表示当前放到第\(i\)行,有\(......
  • 01 [51单片机 PROTEUS仿真设计]基于温度传感器的恒温控制系统
    目录一、主要功能二、硬件资源三、程序编程四、实现现象一、主要功能基于51单片机,具有晶振电路、复位电路、DS18B20温度传感器、LED灯和蜂鸣器灯光报警模块、LCD1602显示模块、L298N驱动电机散热模块和按键模块。主要功能:系统开始运行,显示屏显示最大温度阈值和最小......