Design of Intelligent Waveform Generator Based on Single Chip Computer

[Resource download] The download address is as follows:
https://docs.qq.com/doc/DTlRSd01BZXNpRUxl

Signal generator is a commonly used signal source, widely used in electronic circuits, automatic control systems and teaching experiments and other fields. This design uses AT89C51 single-chip microcomputer as the control core, and the peripheral uses digital / analog conversion circuit ( DAC0832 ), operational amplifier circuit ( LM324 ), keys and LCD liquid crystal display circuit. The circuit uses a single-chip microcomputer and a DAC0832 digital-to-analog converter to form a digital low-frequency signal generator , which can generate four waveforms: sine wave, rectangular wave, sawtooth wave and triangular wave. The system generates digital signals through the single-chip microcomputer, converts them into analog signals through the DAC0832 , and then obtains various bipolar waveforms through the amplifier LM324 , and finally displays them on the oscilloscope. The type selection and frequency change of the four waveforms are controlled through the keyboard, and the respective waveform types and frequency values ​​are displayed through the LCD 1602 .

The hardware circuit of this design is simple, the software function is perfect, the control system is reliable, the cost performance is high, and it has certain practical value and reference value.

Keywords: AT89C51 single-chip microcomputer; function signal generator; DAC0832; LCD liquid crystal display

#include <reg51.h>
#include<string.h>
#define uchar unsigned char
#define uint unsigned int

  uchar code tosin[256]=
{0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,
0xae,0xb1,0xb4,0xb7,0xba,0xbc,0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,
0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec,0xee,0xef,0xf1,0xf2,0xf4,
0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,
0xf4,0xf2,0xf1,0xef,0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,
0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2,0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,
0xa8,0xa5,0xa2,0x9f,0x9c,0x99,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80,
0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,
0x51,0x4e,0x4c,0x48,0x45,0x43,0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,
0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16,0x15,0x13,0x11,0x10,0x0e,
0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,
0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10,0x11,0x13,0x15,0x16,0x18,
0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,
0x3d,0x40,0x43,0x45,0x48,0x4c,0x4e ,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,
0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80 }; //正弦波码

//--按键
sbit K1=P2^0;
sbit K2=P2^1; 
sbit K3=P2^2;
sbit K4=P2^3;
sbit K5=P2^4;

uchar WaveChoice=0;
uchar ys=30;
uchar i,a=0;
uchar sqar_num=128;


//--延时MS          输入一个确切的值用于键盘输入时消除按键抖动
void DelayMS(uchar ms)
{
	uchar i;
	while(ms--) for(i=0;i<120;i++);
}
//--延时y*9us    改变ys的值进而利用该函数达到调频率的目的
 void Delay1(uint y)
 {
 	uint i;
	for(i=y;i>0;i--);
 }


//---输出波形
void Out_Wave(uchar i)
{	 uchar j;	
	switch(i)
	{
		case 0:	P0=0x00;break;
		case 1:
				//---正弦波
				for (j=0;j<255;j++)
				{
					P0=tosin[j];
					Delay1(ys);
				} 
				 break;
		case 2:
				//----矩形波
				{
					if(a<sqar_num)
						{
							P0=0xff;
							Delay1(ys);
						}
					else  
						{
							P0=0x00;
							Delay1(ys);
						}
						a++;
				}  break;
		case 3:
				//----三角波
				{
					if(a<128)
						{
							P0=a;
							Delay1(ys);
						}
					else  
						{
							P0=255-a;
							Delay1(ys);
						}
						a++;
				}   break;
		case 4:
			   //----锯齿波
				{
		 			if(a<255)
					{
						P0=a;
						Delay1(ys);
					}
				

Guess you like

Origin blog.csdn.net/AuroraFaye/article/details/115053505