⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac0832.c

📁 基于DAC0832的多功能波形发生器,可以输出正弦波,方波,锯齿波,三角波
💻 C
字号:
#include"dac0832driver.h"
#include"LCD1602DRIVER.h"
#include"intrins.h"

uchar PWM,k,BChange,FChange;
uchar sin_flage,sanjiao_flage,fangbo_flage,any_flage;
uchar GBit,SBit,BBit,KBit;
uchar frequeh,frequel;
uint freque,Temp;
uchar Bit_Change;
uchar addflage;
code unsigned char sintable[]= 
 {0x7F,0x82,0x85,0x88,0x8C,0x8F,0x92,0x95,0x98,0x9B,
 0x9E,0xA1,0xA4,0xA7,0xAA,0xAD,0xB0,0xB3,0xB6,0xB9,
 0xBB,0xBE,0xC1,0xC3,0xC6,0xC9,0xCB,0xCE,0xD0,0xD3,
 0xD5,0xD7,0xDA,0xDC,0xDE,0xE0,0xE2,0xE4,0xE6,0xE8,
 0xE9,0xEB,0xED,0xEE,0xF0,0xF1,0xF3,0xF4,0xF5,0xF6,
 0xF8,0xF9,0xF9,0xFA,0xFB,0xFC,0xFD,0xFD,0xFE,0xFE,
 0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFE,
 0xFE,0xFD,0xFD,0xFC,0xFB,0xFA,0xF9,0xF9,0xF8,0xF6,
 0xF5,0xF4,0xF3,0xF1,0xF0,0xEE,0xED,0xEB,0xE9,0xE8,
 0xE6,0xE4,0xE2,0xE0,0xDE,0xDC,0xDA,0xD7,0xD5,0xD3,
 0xD0,0xCE,0xCB,0xC9,0xC6,0xC3,0xC1,0xBE,0xBB,0xB9,
 0xB6,0xB3,0xB0,0xAD,0xAA,0xA7,0xA4,0xA1,0x9E,0x9B,
 0x98,0x95,0x92,0x8F,0x8C,0x88,0x85,0x82,0x7F,0x7C,
 0x79,0x76,0x72,0x6F,0x6C,0x69,0x66,0x63,0x60,0x5D,
 0x5A,0x57,0x54,0x51,0x4E,0x4B,0x48,0x45,0x43,0x40,
 0x3D,0x3B,0x38,0x35,0x33,0x30,0x2E,0x2B,0x29,0x27,
 0x24,0x22,0x20,0x1E,0x1C,0x1A,0x18,0x16,0x15,0x13,
 0x11,0x10,0x0E,0x0D,0x0B,0x0A,0x09,0x08,0x06,0x05,
 0x05,0x04,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
 0x01,0x02,0x03,0x04,0x05,0x05,0x06,0x08,0x09,0x0A,
 0x0B,0x0D,0x0E,0x10,0x11,0x13,0x15,0x16,0x18,0x1A,
 0x1C,0x1E,0x20,0x22,0x24,0x27,0x29,0x2B,0x2E,0x30,
 0x33,0x35,0x38,0x3B,0x3D,0x40,0x43,0x45,0x48,0x4B,
 0x4E,0x51,0x54,0x57,0x5A,0x5D,0x60,0x63,0x66,0x69,
 0x6C,0x6F,0x72,0x76,0x79,0x7C	  };
 uchar code  squdata[]={
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
 0x00,0x00,0x00,0x00,0x00,0x00	  
};
uchar code  fridata[]={
 0x80,0x82,0x84,0x86,0x88,0x8a,0x8c,0x8e,0x90,0x92,
 0x94,0x96,0x98,0x9a,0x9c,0x9e,0xa0,0xa2,0xa4,0xa6,
 0xa8,0xaa,0xac,0xae,0xb0,0xb2,0xb4,0xb6,0xb8,0xba,
 0xbc,0xbe,0xc0,0xc2,0xc4,0xc6,0xc8,0xca,0xcc,0xce,
 0xd0,0xd2,0xd4,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2,
 0xe4,0xe6,0xe8,0xea,0xec,0xee,0xf0,0xf2,0xf4,0xf6,
 0xf8,0xfa,0xfc,0xfe,0xfe,0xfc,0xfa,0xf8,0xf6,0xf4,
 0xf2,0xf0,0xee,0xec,0xea,0xe8,0xe6,0xe4,0xe2,0xe0,
 0xde,0xdc,0xda,0xd8,0xd6,0xd4,0xd2,0xd0,0xce,0xcc,
 0xca,0xc8,0xc6,0xc4,0xc2,0xc0,0xbe,0xbc,0xba,0xb8,
 0xb6,0xb4,0xb2,0xb0,0xae,0xac,0xaa,0xa8,0xa6,0xa4,
 0xa2,0xa0,0x9e,0x9c,0x9a,0x98,0x96,0x94,0x92,0x90,
 0x8e,0x8c,0x8a,0x88,0x86,0x84,0x82,0x80,0x7e,0x7c,
 0x7a,0x78,0x76,0x74,0x72,0x70,0x6e,0x6c,0x6a,0x68,
 0x66,0x64,0x62,0x60,0x5e,0x5c,0x5a,0x58,0x56,0x54,
 0x52,0x50,0x4e,0x4c,0x4a,0x48,0x46,0x44,0x42,0x40,
 0x3e,0x3c,0x3a,0x38,0x36,0x34,0x32,0x30,0x2e,0x2c,
 0x2a,0x28,0x26,0x24,0x22,0x20,0x1e,0x1c,0x1a,0x18,
 0x16,0x14,0x12,0x10,0x0e,0x0c,0x0a,0x08,0x06,0x04,
 0x02,0x00,0x02,0x04,0x06,0x08,0x0a,0x0c,0x0e,0x10,
 0x12,0x14,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x24,
 0x26,0x28,0x2a,0x2c,0x2e,0x30,0x32,0x34,0x36,0x38,
 0x3a,0x3c,0x3e,0x40,0x42,0x44,0x46,0x48,0x4a,0x4c,
 0x4e,0x50,0x52,0x54,0x56,0x58,0x5a,0x5c,0x5e,0x60,
 0x62,0x64,0x66,0x68,0x6a,0x6c,0x6e,0x70,0x72,0x74,
 0x76,0x78,0x7a,0x7c,0x7e,0x7e
};
uchar code  sawdata[]={
 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
 0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x11,0x12,0x13,
 0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,
 0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,
 0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,0x30,0x31,
 0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,
 0x3c,0x3d,0x3e,0x3f,0x40,0x41,0x42,0x43,0x44,0x45,
 0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,
 0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,0x60,0x61,0x62,0x63,
 0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,
 0x6e,0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,
 0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,0x80,0x81,
 0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,
 0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,0x95,
 0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,
 0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,
 0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,
 0xbe,0xbf,0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,
 0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,
 0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,
 0xdc,0xdd,0xde,0xdf,0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,
 0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,
 0xfa,0xfb,0xfc,0xfd,0xfe,0xff
}; 
//uchar code  ar[7]={0x00,0x08,0x00,0x15,0x00,0x02,0x00};
uchar code  ar[8]={0x1f,0x11,0x11,0x11,0x11,0x11,0x11,0x1f};

			//								   8hz,4hz,2hz,1hz,0.5hz,0.25hz,0.125hz,0.0625hz
//code frequeh[]={0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfc,0xf8,0xf0,0xe1,0xd2,0xc2,0xb3};
//code frequel[]={0xf9,0xf1,0xe2,0xc3,0x86,0x0c,0x18,0x30,0x5f,0xbe,0x7c,0x3a,0xf8,0xb6};
void DisplaHz(uchar addr,uchar G,uchar S,uchar B,uchar K)
{
	uchar Disput_Data[8]={0x20,0x20,0x20,0x20,0x20,'H','z',0};
	Disput_Data[0] = K+0x30;
	Disput_Data[1] = B+0x30;
	Disput_Data[2] = S+0x30;
	Disput_Data[3] = G+0x30;
	Disput_ALineChar(addr,Disput_Data);
}
void Delays(unsigned int i)
{
	while(i--);
}
unsigned char KeyScan()
{
	unsigned char Temp,Key;
	Key=Key_Port;
	Key=~Key;
	Key&=0x3f;
	if(Key!=0)
	{
		Delays(1000);
		Temp=Key_Port;
		Temp=~Temp;
		Temp&=0x3f;
		if(Temp==Key)
		return Key;
		else
		return 0;
	}
	else
	return 0;

}
void initTimer(void)
{
 TMOD=0x01;
 TH0=frequeh;
 TL0=frequel;
}

void timer0(void) interrupt 1
{
 TH0=frequeh;
 TL0=frequel;
 PWM++;
 if(PWM>=256)
 PWM=0;
 if(sin_flage==1)
 DAC0832_Port = sintable[PWM];
 else if(sanjiao_flage==1)
 DAC0832_Port = fridata[PWM];
 else if(fangbo_flage==1)
 DAC0832_Port = squdata[PWM];
 else
 DAC0832_Port = sawdata[PWM];
 WR1=0;
 _nop_();
 WR1=1;
}
uchar JZNum(uchar num,uchar jnum)
{
	if(num>=jnum)
		num = 0;
	return num;
}
uchar JFNum(uchar fnum,uchar fjnum)
{
	if(fnum==0)
		fnum = fjnum;
	return fnum;

}
void main(void)
{
  uchar Keys = 0;
  sin_flage=1;
  BChange = 1;
  addflage=1;
  Bit_Change = 0;
  freque  = 8;
  GBit = 8;
  frequel = 0x18;
  frequeh = 0xfe; 
  LCD1602_Init();
  Delays(1000);
  LCD1602_Init();
  Delays(1000);
  LCD1602_Init();
  Delays(1000);
  Disput_ALineChar(0x80,"Waveform:");
  Disput_ALineChar(0xC0,"Freque:");
  DisplaHz(0xC7,8,SBit,BBit,KBit);
  initTimer();
  TR0=1;
  ET0=1;
  EA=1; 
  PWM=0;
  while(1)
  {
  	Keys=KeyScan();
	if(Keys!=0)
	{
		
		switch(Keys)
		{
			case 0x01:		//正弦波选择,频率位设置选择
			{
				if(BChange==1)
					{
						sin_flage=1;sanjiao_flage=0;fangbo_flage=0;any_flage=0;
						sin_signal=1;sanjiao_signal=0;fangbo_signal=0;any_signal=0;
						Disput_ALineChar(0x8a,"Sin");	
					}
				else
					{
						Bit_Change++;
						if(Bit_Change>=5)
							Bit_Change = 0;
		
					}			
			 }break;
			case 0x02:		  //矩形波选择,频率加减
					{
					   if(BChange==1)
					{
						sin_flage=0;sanjiao_flage=1;fangbo_flage=0;any_flage=0;
						sin_signal=0;sanjiao_signal=1;fangbo_signal=0;any_signal=0;
						Disput_ALineChar(0x8a,"Tri");	
					}
				else
					{
						switch(Bit_Change)
						{
							case 0: 
							{
							    if(addflage==1)
								{
									GBit++;
									GBit=JZNum(GBit,10);
								}
								else
								{
									GBit=JFNum(GBit,9);
									GBit--;	
								 }
							}break;
							case 1: 
							{
							    if(addflage==1)
								{
									SBit++;
									SBit=JZNum(SBit,10);
								}
								else
								{
									SBit=JFNum(SBit,9);
									SBit--;	
								 }
							}break;
							case 2: 
							{
							    if(addflage==1)
								{
									BBit++;
									BBit=JZNum(BBit,10);
								}
								else
								{
									BBit=JFNum(BBit,9);
									BBit--;	
								 }
							} break;
							case 3: 
							{
							    if(addflage==1)
								{
									KBit++;
									KBit=JZNum(KBit,4);
								}
								else
								{
									KBit=JFNum(KBit,9);
									KBit--;	
								 }
							} break;
							default: break;

						}
				
					}		
					}break;
			case 0x04:			//三角波选择,频率加减选择
					{
						if(BChange==1)
					{
						sin_flage=0;sanjiao_flage=0;fangbo_flage=1;any_flage=0;
						sin_signal=0;sanjiao_signal=0;fangbo_signal=1;any_signal=0;
						Disput_ALineChar(0x8a,"Squ");	
					}
					}break;
			case 0x08:		   //锯齿波选择,矩形波占空比调整
					{
						if(BChange==1)
						{
							sin_flage=0;sanjiao_flage=0;fangbo_flage=0;any_flage=1;
							sin_signal=0;sanjiao_signal=0;fangbo_signal=0;any_signal=1;	
							Disput_ALineChar(0x8a,"Saw");
						}
						
					}break;
		    case 0x10:
					{
						TR0=0;
						EA=0;
						BChange = (~BChange)&0x01;
						FChange = (~FChange)&0x01;
					}break;
			case 0x20:
					{
						if(FChange == 1)
						{
							freque	= GBit+SBit*10+BBit*100+KBit*1000;
						    Temp	= 65536-(3906/freque);
						//	Temp	= Temp*256;
							frequel = Temp%256;
							frequeh	= Temp/256;	
						}
						TR0=1; EA=1;
						
				    }break;
			default:{ sin_flage=1;sanjiao_flage=0;fangbo_flage=0;any_flage=0;}break;
		}
			while(Keys==KeyScan());
			DisplaHz(0xC7,GBit,SBit,BBit,KBit);
	}

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -