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

发布者:MysticalDreamer最新更新时间:2019-12-04 来源: elecfans关键字:单片机  低频信号发生器  Proteus仿真 手机看文章 扫描二维码
随时随地手机看文章

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

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

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

4、仿真实现;

5、画pcb图;


仿真原理图如下
3.png
1.png
电路原理图如下:
2.png
Altium Designer画的原理图和PCB图如下:
51hei.png

单片机代码:

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

                  }

             }

        }

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

//函数名称:disp(unsignedchar count)

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

//函数功能:

//入口参数:unsigned charcount

//出口参数:

//    注意:

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

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++){}

}

}


关键字:单片机  低频信号发生器  Proteus仿真 引用地址:单片机低频信号发生器Proteus仿真程序

上一篇:AT89C51单片机十字路口交通灯设计
下一篇:单片机定时器占空比按键调整Proteus仿真程序

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved