基于51单片机的波形发生器(三相,调幅)原理图、流程图、物料清单、仿真图、源代码
三相信号发生器
1、产生三相正弦波,相位差120度
2、频率50HZ
3、振幅可调
#include<reg51.h>
#include"absacc.h"
#include"intrins.h"
#include "lcd1602.h"
#define uchar unsigned char
#define uint unsigned int
#define XDAT XBYTE[0XFEFF]
#define YDAT XBYTE[0XFDFF]
#define ZDAT XBYTE[0XFBFF]
sbit k1=P3^0;//按钮
sbit k2=P3^1;
uint amp=50;//振幅
uchar time=0;//计时
//波形Triangle wave.sine wave.sine wave
uchar one[]="0000mV";
uchar code zhengx[256]={//正弦编码
128,131,134,137,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,188,191,194,
196,199,202,204,207,209,212,214,216,219,221,223,225,227,229,231,233,234,236,238,239,241,242,244,245,246,247,249,
250,250,251,252,253,254,254,255,255,255,255,255,255,255,255,255,255,255,255,255,254,254,253,252,251,250,250,249,247,
246,245,244,242,241,239,238,236,234,233,231,229,227,225,223,221,219,216,214,212,209,207,204,202,199,196,194,191,
188,186,183,180,177,174,171,168,165,162,159,156,153,150,147,144,141,137,134,131,128,125,122,119,115,112,109,106,
103,100,97,94,91,88,85,82,79,76,73,70,68,65,62,60,57,54,52,49,47,44,42,40,37,35,33,31,29,27,25,23,22,20,18,17,15,
14,12,11,10,9,7,6,6,5,4,3,2,2,1,1,1,0,0,0,0,0,0,0,1,1,1,2,2,3,4,5,6,6,7,9,10,11,12,14,15,17,18,20,22,23,25,27,29,
31,33,35,37,40,42,44,47,49,52,54,57,60,62,65,68,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,119,122,125};
void disp()//显示
{
one[0]=amp/100+0x30;//振幅
one[1]=amp%100/10+0x30;
one[2]=amp%10+0x30;
one[3]='0';
write_string(1,5,one);
}
void main()
{
TMOD=0X22; //设置计数器工作方式2
TH0=178;//给定时器赋初值
TL0=178;
ET0=1;//打开定时器0中断允许
TR0=0;//打开定时器
EA=1;//打开总中断
init_1602();//初始化LCD
disp();
while(1)
{
if(!k1)//振幅加
{
if(amp<100)
amp+=5;
disp();
while(!k1);
}
if(!k2)//振幅减
{
if(amp>5)
amp-=5;
disp();
while(!k2);
}
}
}
void Timer0() interrupt 1//定时器中断
{
uint i;
uchar j=0;
time++;
TR0=0;
i=zhengx[time]*amp;
XDAT=i/500;//X相
j=time+170;
i=zhengx[j]*amp;
YDAT=i/500;//X相
j=time+85;
i=zhengx[j]*amp;
ZDAT=i/500;//X相
TR0=1;
}