目录
一、主要功能
该项目旨在基于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站演示视频:
源程序和仿真文件:
链接:https://pan.baidu.com/s/1RGQKnsRRTzOu6ZhCeMgtgA
提取码:dfk1
–来自百度网盘超级会员V4的分享