×
单片机 > 单片机程序设计 > 详情

C51 单片机_波形发生器

发布时间:2020-08-25 发布时间:
|
课程设计内容与要求:

任务:使用单片机和DAC0832芯片生成锯齿拨波和方波,并在数码管上显示所生成波的频率.

设计要求:

1、电子仿真、测试电路。

2、独立完成课程设计报告,严禁报告内容雷同;

3、电路图中的图形符号必须符合国家或国际标准;

4、所有电路图的制作应采用电子CAD正确绘制;

5、报告内容完整,格式正确,A4纸张打印,字数不少于5000字。

说明:※符号表示提高要求。

 

课程设计内容与要求:

任务:使用单片机和DAC0832芯片生成锯齿拨波和方波,并在数码管上显示所生成波的频率

基本图:

 

0832的图解:

 

0032电路接法:

程序:

#include 
unsigned char flag=0;
bit time;
sbit P32=P3^2;
unsigned char sin(unsigned char x){
unsigned  char code sin_tab[]={
                               125,128,131,134,138,141,144,147,150, 153,156,159,162,165,168,171,174,177,180,182,
                               185,188,191,193,196,198,201,203,206,208,211,213,215,217,219,221,223,225,227,229,
          231,232,234,235,237,238,239,241,242,243,244,245,246,246,247,248,248,249,249,250,
          250,250,250,250,250,250,250,249,249,248,248,247,246,246,245,244,243,242,241,239,
          238,237,235,234,232,231,229,227,225,223,221,219,217,215,213,211,208,206,203,201,
          198,196,193,191,188,185,182,180,177,174,171,168,165,162,159,156,153,150,147,144,
          141,138,134,131,128,125,122,119,116,112,109,106,103,100,97,94,91,88,85,82,79,76,
          73,70,68,65,62,59,57,54,52,49,47,44,42,39,37,35,33,31,29,27,25,23,21,19,18,16,15,
          13,12,11,9,8,7,6,5,4,4,3,2,2,1,1,0,0,0,0,0,0,0,0,1,1,2,2,3,4,4,5,6,7,8,9,11,12,13,
          15,16,18,19,21,23,25,27,29,31,33,35,37,39,42,44,47,49,52,54,57,59,62,65,68,70,73,
          76,79,82,85,88,91,94,97,100,103,106,109,112,116,119,122}; //正弦波一个周期,按250个点取值。
  return sin_tab[x];  //直接查表,并返回对应的正弦值
                               }
void delaynms(int n)
{
 unsigned char i,k;
 while(n--)
   {
   for(i=2;i>0;i--)
   for(k=250;k>0;k--);
   }
                                  }

void DAC0832(unsigned char x)
{
   P2=x;
}

void main()
{
  unsigned char i;
  TMOD=0X02;
  TH0=256-50;          //  晶振为12MHz时,定时为40us。
  ET0=1;

  IT0=1;
  IT1=1;
      EX0=1;
  EX1=1;

  EA=1;

  TR0=1;
  flag=1;
  i=0;

  while(1)
{
    if(time==1)        // 时间到了
  {
    time=0;
    if (i>249) i=0; else i++;  //指向下一个点
    switch(flag)     // 判断标志
{   
      case 1:   
              DAC0832(0);  // 状态1:输出之直波
     P1=0X06;
    break;
   case 2:        // 状态2:输出三角波
           if(i>125) DAC0832(250-i);
              else DAC0832(i);
     P1=0X5B;
              break;
   case 3:         // 状态3:输出正弦波
           DAC0832(sin(i));
     P1=0X4F;
     break;
         case 4:         // 状态4:输出方波
           DAC0832(0);
        delaynms(5);
        DAC0832(sin(43)); 
     delaynms(5);
     P1=0X66;
     break;
     }
     
  }
  }
}

void time0() interrupt 1
{
  time=1;                // 时间标志
}

void int0() interrupt 0
{
  delaynms(5);         
  if(INT0==0)
   flag++;
   if(flag>4)   
   flag=1;            
                       
}


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32 USB HID 键盘