单片机
返回首页

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

2019-12-04 来源:elecfans

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

}

}


进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 用NE555制作定时器

  • 带有短路保护系统的5V直流稳压电源电路图

    相关电子头条文章