📄 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 + -