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

单片机低频信号发生器Proteus仿真程序

发布时间:2020-06-17 发布时间:
|

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

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

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

4、仿真实现;

5、画pcb图;


仿真原理图如下


电路原理图如下:

Altium Designer画的原理图和PCB图如下:


单片机代码:

#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);

  }   

}

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

//函数名称:voidsanjiaobo(void)

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

//函数功能:

//    注意:

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

void  sanjiaobo(void)

{

  while(1)

  {

         unsignedchar 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);

  }

}

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

//函数名称:voidjuchibo(void)

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

//函数功能:

//    注意:

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

void  juchibo(void)

{

  while(1)

  {

         unsignedchar 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);

  }   

}

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

//函数名称:voidtixingbo(void)

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

//函数功能:

//    注意:

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

void tixingbo(void)

{

  while(1)

  {

     unsignedchar tixingbo_4;

         if(tixingbo_4<120)

         {P0=tixingbo_4;}

         elseif(tixingbo_4==120)

           delay1(1);

        elseif(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);

  }

}

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

//函数名称:voidinitial(void)

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

//函数功能:

//    注意:

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

void  initial(void)

      {

         P0=0xff;

         P1=0xff;

         P2=0xff;

         P3=0xff;

      }

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

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

//函数说明:延时函数

//函数功能:

//入口参数:unsigned chartime1,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--);

                  }

             }

        }

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



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

热门文章 更多
单片机中高阻态的实质及意义