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

📄 波形发生器.c

📁 用C51单片机设计多波形发生器
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#define DAC0832 XBYTE[0xfffe]
#define DAC0832R XBYTE[0xfffd]
#define uchar unsigned char
#define uint unsigned int
sbit P10=P1^0;
sbit P11=P1^1;
sbit P12=P1^2;
sbit P13=P1^3;
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
sbit P17=P1^7;
sbit P33=P3^3;
uchar regi,freq=1;
uchar code tab1[128]={
64,67,70,73,76,79,82,85,88,91,94,96,99,102,104,106,
109,111,113,115,117,118,120,121,123,124,125,126,126,
127,127,127,127,127,127,127,126,126,125,124,123,121,
120,118,117,115,113,111,109,106,104,102,99,96,94,91,
88,85,82,79,76,73,70,67,64,60,57,54,51,48,45,42,39,
36,33,31,28,25,23,21,18,16,14,12,10,9,7,6,4,3,2,1,
1,0,0,0,0,0,0,0,1,1,2,3,4,6,7,9,10,12,14,16,18,21,23,
25,28,31,33,36,39,42,45,48,51,54,57,60};

uchar code tab3[2]={0,1};

void delay2()      /* 延时2us函数 */
{           
    TF1=0;
    TMOD=0x10;
    TH1=0xff;
    TL1=0xfe;
    TR1=1;
    while(TF1==0){}
    TF1=0; 
}

void delay(uchar t)	 /*延迟函数*/
{while(t--);}

void square()          /* 方波发生函数 */
{
  uint i,j;
  while(1)
   {
   for(i=0;i<=63;i++)
   { DAC0832=0x00;
     for(j=freq;j>0;j--)delay2();
	}
   for(i=0;i<=63;i++)
   { DAC0832=0xff;
     for(j=freq;j>0;j--)delay2();
    }
   if(P12==0){while(P12==0);break;}	
   }
}

void saw()                 /* 锯齿波发生函数 */
{
  while(1)
  { uchar i,j;
    for (i=0;i<=128;i++)
    { DAC0832=i; for(j=freq;j>0;j--)delay2();}
	if(P11==0){while(P11==0);break;}
   }
}

void sin( )    /*正弦波*/
{
  unsigned int  i,j;
   while(1)
  {	
   if(i==128)i=0;
   DAC0832=tab1[i++];
   for(j=freq;j>0;j--)delay2();
   if(P10==0){while(P10==0);break;}
   }  
}

void tran(void)  /*三角波*/
{
 uchar i,j;
 while(1)
 {
  for(i=0;i<=63;i++)
  { for(j=freq;j>0;j--)delay2();DAC0832=i;}
  for(i=63;i>=0;i--)
  { for(j=freq;j>0;j--)delay2();DAC0832=i;}
  if(P13==0){while(P13==0);break;}
  }
}


void main()	  /*主函数*/
{ 
  EA=1;EX0=1;EX1=1;	regi=102;
  while(1)
  	{  DAC0832R=regi;
	   if(P10==0){delay(3);while(P10==0);sin();}
	   if(P11==0){delay(3);while(P11==0);saw();}
	   if(P12==0){delay(3);while(P12==0);square();}
	   if(P13==0){delay(3);while(P13==0);tran();}
	   if(P14==0){delay(3);while(P14==0);regi=regi+25.5;}
	   if(P15==0){delay(3);while(P15==0);regi=regi-25.5;}
	   if(P16==0){delay(3);while(P16==0);freq=freq+1;}
	   if(P17==0){delay(3);while(P17==0);freq=freq-1;}
    }
 }

⌨️ 快捷键说明

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