|
#include
#include
#include
#define dac0832 XBYTE[0x7fff]
#define uchar unsigned char
uchar code to_sin[256]
uchar b=0,c=0,d=0,e=0,i,k,tl,th;
int bw=10;//bw为频率百位变量
int t,f,m,choice=1,zk=50;// t为时间变量,f为频率变量,choice为波形类型选择变量,zk为占空比变量,默认占空比为50%
void delay10ms() //延时10ms程序
/*1键选择发波类型,1为正弦波,2为三角波,3为方波*/
void key1(void)
/*百位频率调整+*/
void key2(void)
/*百位频率调整-*/
void key3(void)
/*方波占空比加大*/
void key4(void)
/*方波占空比减小*/
void key5(void)
void judge(void)
{
{
unsigned char X;
P1=0xff;
if(P1!=0xff) //判断是否有键按下
{delay10ms(); //延时,软件去干扰
if(P1!=0xff) //确认按键按下X = P1;
{ X=P1 ;
switch (X) //判断键值(那一个键按下)
{case 0xfe: key1(); break;
case 0xfd: key2(); break; //对键值赋值
case 0xfb: key3(); break;
case 0xf7: key4(); break;
case 0xef: key5(); break;
} }
}}
}
void main(void)
{
TMOD=0X01;
TR0=1;
th=-t/256;
tl=-t%256;
TH0=th;
TL0=tl;
ET0=1;
EA=1;
while(1)
{jisuan();
for(i=0;i<=50;i++);
judge();
} }
void time0_int(void) interrupt 1 //中断服务程序
{
TR0=0;
if(choice==1)
{ dac0832=to_sin; //正弦波
b++; }
else if(choice==2) //三角波
{if(c<=128) dac0832=c;
else dac0832=255-c;
c++;
}
else if(choice==3) // 方波
{k=zk*256/100;
d++;
if(d<=k) dac0832=0x00;
else dac0832=0xff;}
else if(choice==4) //锯齿波
{if(e<=255)dac0832=255-e;
else dac0832=0;
e++;
}
TH0=th;
TL0=tl;
TR0=1;
}
|
|