设计一个低频信号发生器

描述

一、实验目的

1、学习和运用keilC的C语言;

2、学习通过proteus软件画原理图,并利用keilC软件形成的HEX文件运行;

3、实现利用单片机AT98C51和8位D/A转换芯片DAC0832共同实现方波、三角波、锯齿波、梯形波这四种常见波形的发生。

4、进一步学习和利用protel软件,画出实验原理图,并生成PCB图;

5、AT89S51为核心的单片机系统的软硬件开发过程;

6、基本信号的产生原理及函数发生器系统的设计流程 

二、实验要求

设计一个低频信号发生器:

1、查阅相关资料,完成原理图设计;

2、编写软件,使该系统能输出方波、三角波、锯齿波和梯形波;波形频率均为1khz,双极性输出。

3、用protel软件完成系统的硬件设计,并通过电器规则检查;

4、仿真实现;

5、画pcb图;

6、写综合课程设计报告。   

三、器件清单

1、AT80C51一个;

2、DAC0832一个;

3、OPAMP两个;

4、数码管一个;

5、按键开关一个;

6、电阻、电感若干;

四、实验原理    

#include

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66}//  0 1 2 3 4  

unsigned char time1;                              //////延时函数参数///////          

/////////////////////////////变量说明//////////////////////////////////////                             

unsigned char time2;

unsigned char time3;

unsigned char count;

unsigned char ms;

////////////////////////////////////////函数说明////////////////////////////////

void  initial(void);                                           ////初始化函数////

//void  initial_time0(void);                                      //////定时器0初始化///////

void  anjian(void);                                    ////////////按键函数////    

void  delay(unsigned char time1,time2,time3);                  ////延时函数////

void  disp(unsigned char count);                              /////静态显示子函数/////

void  delay1(char ms);

void  fangbo(void);                                    //方波函数//

void  sanjiaobo(void);                                 //三角波函数//

void  juchibo(void);                                 //锯齿波函数//

void  tixingbo(void);                              //正弦波函数//

void  main (void)

{

   initial();

   while(1)    

   {

      anjian();

  }

}

/*************************************************************************

//函数名称:void anjian(void)

//函数说明:按键函数

//函数功能:

//    注意:

*************************************************************************/

void  anjian(void)

{

  if(P3_7==0)

   {delay(1,50,248);

    if(P3_7==0)

     {count=1;

      disp(count);

     fangbo();

     }    

   }

   while(P3_7==0);

   count=0;

   disp(count);

   anjian();

}

/*************************************************************************

//函数名称:void fangbo(void)

//函数说明:方波函数

//函数功能:

//    注意:

*************************************************************************/

void  fangbo(void)

{

   while(1)

     {

      unsigned char fangbo_1;

        fangbo_1+=8; 

        if(fangbo_1>128&fangbo_1<256)   {P0=0x00;}             

        if(fangbo_1<128)            {P0=0xff;}    

        if(P3_7==0)

            {delay(1,50,248);

          if(P3_7==0)

              {   count=2;

               disp(count);

                  sanjiaobo();

              }

            }

            while(P3_7==0);

   }  

}

/*************************************************************************

//函数名称:void sanjiaobo(void)

//函数说明:三角波函数

//函数功能:

//    注意:

*************************************************************************/

void  sanjiaobo(void)    

{

   while(1)

   {

        unsigned char sanjiaobo_2;

        if(sanjiaobo_2<=128)

         {P0=sanjiaobo_2;}

        else

         {P0=255-sanjiaobo_2;}

        sanjiaobo_2+=5;   

        if(sanjiaobo_2>=255)

         {sanjiaobo_2=0x00;}

         if(P3_7==0)

            {

            delay(1,50,248);

             if(P3_7==0)

              {count=3;

               disp(count);

                  juchibo();

              }

         }    

            while(P3_7==0);

    }

}

/*************************************************************************

//函数名称:void juchibo(void)

//函数说明:锯齿波函数

//函数功能:

//    注意:

*************************************************************************/

void  juchibo(void)

{

   while(1)

   {

        unsigned char juchibo_3;

        if(juchibo_3<180)   {P0=juchibo_3;}  

        juchibo_3+=4;   

        if(juchibo_3>=180)   {juchibo_3=0x00;}

         if(P3_7==0)

         {

         delay(1,50,248);    

          if(P3_7==0)

              {count=4;

               disp(count);

                  tixingbo();

            }

         }

        while(P3_7==0);

   }  

}

/*************************************************************************

//函数名称:void tixingbo(void)

//函数说明:梯形波函数

//函数功能:

//    注意:

*************************************************************************/

void tixingbo(void)

{

   while(1)

   {

       unsigned char tixingbo_4;    

        if(tixingbo_4<120)

         {P0=tixingbo_4;}

        else if(tixingbo_4==120)

            delay1(1);

         else if(tixingbo_4<240)

           {P0=240-tixingbo_4;}

         if(tixingbo_4==240)

           {delay1(1);}

        if(tixingbo_4>240)

         {

         tixingbo_4=0x00;

         }  

              tixingbo_4+=10;

         if(P3_7==0)

            {delay(1,50,248);

             if(P3_7==0)

              {   count=0;

               disp(count);    

                  anjian();

              }

         }

           while(P3_7==0);

   }

}

/*************************************************************************

//函数名称:void initial(void)

//函数说明:初始化函数

//函数功能:

//    注意:

*************************************************************************/

void  initial(void)

      { 

         P0=0xff;

         P1=0xff;

         P2=0xff;

         P3=0xff;

      }    

/*************************************************************************

//函数名称:delay(unsigned char time1,time2,time3)

//函数说明:延时函数

//函数功能:

//入口参数:unsigned char time1,time2,time3

//出口参数:

//    注意:延时时间的计算:(time1*time2*time3*8us)us  

            time1,time2,time3可以不进行变量说明 

*************************************************************************/

 void  delay(unsigned char time1,time2,time3)

       {

         unsigned char i,j,k;

          for(i=time1;i>0;i--) 

             {  for(j=time2;j>0;j--) 

                  { 

                     for(k=time3;k>0;k--); 

                  } 

             }

        }

/*************************************************************************    

//函数名称:disp(unsigned char count)

//函数说明:静态显示子函数

//函数功能:

//入口参数:unsigned char count

//出口参数:

//    注意:

*************************************************************************/

void  disp(unsigned char count)

      { 

         P2=table[count];

         delay(1,5,248);

      }

   void delay1(char ms)

{

char ti;

 while(ms--)

 {

  for(ti=0;ti<16;ti++){}

 }    

}

单片机

单片机    

单片机

单片机    

单片机

单片机

单片机

单片机

单片机

单片机    

单片机

单片机

单片机

单片机

单片机

单片机    

单片机

单片机

单片机

单片机

单片机

单片机

单片机

单片机    

实验心得

通过该课题的设计掌握以AT89S51为核心的单片机系统的软硬件开发过程和基本信号的产生原理、测量及误差分析方法,同时掌握函数发生器系统的设计流程;培养我们综合运用所学的基本知识、基本理论和基本技能的能力,学习解决一般工程技术和有关专业问题的能力,学习工程设计和科学研究的基本方法,完成对所学知识的综合训练。    

  审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分