📄 freq.c
字号:
#include <reg52.h>
#include <absacc.h>
#include <math.h>
#define dac XBYTE[0xa000]
#define pi 3.14
sbit set =P3^3;
sbit add =P3^4;
sbit dec =P3^5;
unsigned int current[2]={127,127};
unsigned int dot=127;
unsigned char TS=100;
unsigned char KT=0;
unsigned char ms=0;
unsigned char xdata dacval[500];
void Delayms(unsigned int t)
{
unsigned char i;
while(--t)
for(i=0;i<125;i++)
{ ; }
}
void Sin_val(void) reentrant
{
unsigned char i;
for(i=0;i<dot;i++)
{
dacval[i]=(unsigned char)(127.5*sin(2*pi*(i/dot))+127.5);
}
}
void Sin_wave(void)
{
static unsigned int i=0;
if(++i>dot) i=0;
else dac=dacval[i];
}
void set_(void)
{
KT++;
if(KT>=3)KT=0;
}
void add_(void)
{
switch(KT)
{
case 1:if(TS>250)TS=10;
else TS=TS+10;
break;
case 2:if(dot>=500)dot=128;
else dot=dot+5;
current[0]=dot;
if(current[1]!=current[0])
Sin_val();
current[1]=current[0];
break;
default:break;
}
}
void dec_(void)
{
switch(KT)
{
case 1:if(TS<10)TS=10;
else TS=TS-10;
break;
case 2:if(dot<128)dot=128;
else dot=dot-5;
current[0]=dot;
if(current[1]!=current[0])
Sin_val();
current[1]=current[0];
break;
default:break;
}
}
void Key_Scan(void)
{
if(set==0)
{
Delayms(20);
if(set==0)
{ set_(); }
}while(set==0);
if(add==0)
{
Delayms(20);
if(add==0)
{ add_(); }
}while(add==0);
if(dec==0)
{
Delayms(20);
if(dec==0)
{ dec_(); }
}while(dec==0);
}
void Time_init(void)
{
TMOD=0x12;
PT0 =1;
TH0 =(-TS);
TH1 =(-10000)>>8;
TL1 =(-10000);
ET0=1;
ET1=1;
TR0=1;
TR1=1;
}
void main(void)
{
Time_init();
EA=1;
Sin_val();
while(1)
{ ; }
}
void Time_int0(void) interrupt 1
{
ET0=0;TR0=0;TH0 =(-TS);TR0=1;
Sin_wave();
ET0=1;
}
void Time_int1(void) interrupt 3
{
TL1 =(-10000);
TH1 =(-10000)>>8;
ms++;
if(ms==15)
{
ms=0;
Key_Scan();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -