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

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

                  }

             }

        }

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

[1] [2]
关键字:单片机  低频信号发生器  Proteus仿真 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic481938.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

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

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

ARM小记
ARM何物  ARM(Advanced RISC Machines,进阶精简指令集机器),如果你一直把这个单词读成“A”-“R”-“M”,那么将有一个好消息和一个坏消息要告诉你。好消息是:你 这是初次接触到ARM技术相关的文章,而本文内容正是专为你量身打造的,无论你是嵌入式系统的门外汉还是单片机技术的初学者,都可以通过本文轻松地了解ARM技术。 请相信我,这并不困难!坏消息是:我很抱歉的告诉你, 它的正确读法应该是“arm”,是手臂、胳膊的英文发音。 很出丑是不是?但除非你是在大声朗读,不然没人会知道 的。你又多了一个知识和一个不可告人的秘密。调整一下心态,我们的故事就从这里开始吧!  
发表于 2019-12-02
ARM小记
AVR单片机教程——烧写HEX文件
每一次build项目,编译器都会生成多个文件,其中有一个就是hex文件。之前在IDE中配置的external tools,就是把这个hex文件烧写到单片机中去的。然而,有些时候你想运行别人的程序,但拿不到别人的源码,只能拿到一个hex文件。比如,我现在就把明天作业的答案(没错,明天有作业)以hex文件的形式(平台不让上传hex文件,所以我就打了个包,使用前请先解压)给你,让你抢先体验一下。这时,你就需要用AVRDUDESS来烧写hex文件。初次打开AVRDUDESS,界面上所有选项都是默认的。在左上角下拉框中选择USBasp(在最后的位置)。点击右上角Detect,会自动选择好单片机型号。在Flash框中选择要烧写的文件。点击Go
发表于 2019-12-02
AVR单片机教程——烧写HEX文件
AVR单片机教程——随机点亮LED
;led_set 的第一个参数只有在 [0, 3] 范围内才有效,因此我们把 rand() 的返回值对4取模。srand(1) 被打上注释,是因为这行调用没有必要。把这段代码编译并烧写进单片机,你会发现LED闪烁的时间是不等长的,这是因为可能存在连续两次亮相同灯的情况。为了解决这个问题,我们引入一个变量,保存当前亮的LED,并让下一个亮的LED与当前的不同。代码如下: 1 #include <ee1/led.h> 2 #include <ee1/delay.h> 3  4 #include
发表于 2019-12-02
AVR单片机教程——按键状态
今天我们来讲按键。开发板的右下角有4个按键,按下会有明显的“咔嗒”声。如何检测按键是否被按下呢?首先要把按键或直接或间接地连接到单片机上。与之前使用的4个LED不同,4个按键没有全部连接到单片机上——左边2个是连接的,右边2个通过按键上方标有B2、B3的接口引出(从左到右分别为B0、B1、B2和B3)。如果要使用B2、B3,要用杜邦线连接到16个单片机引出针脚上。开发板库中与按键相关的函数定义在 <ee1/button.h> ,这里是库函数手册。值得一提的是1.1版本的库中,换用枚举类型表示按键等设备,不再使用整数与宏定义(但用整数也是兼容的)。在Atmel Studio 7.0中写代码时,编辑器
发表于 2019-12-02
AVR单片机教程——按键动作
,因为博客园代码着色是按照C#的规则,bool 是其中一个关键字。但是应当注意,C语言中没有 bool 这个关键字,而是 _Bool ;bool 与 true 和 false 都在 <stdbool.h> 中定义。我们还没有解释过第一段代码中的 delay(40) 。如果你把它去掉,你会发现判定经常出错,往往在抬起的时候被多判定了一次,在按得不是很用力时很不稳定。这是按键内部的机械结构决定的,当处于连通和不连通位置的交界处时,单片机检测到的电平会迅速跳变(按键的原理,以及单片机如何检测按键
发表于 2019-12-02
AVR单片机教程——拨动开关
;   if (switch_changed(SWITCH_0))12             led_flip(LED_GREEN);13         delay(40);14     }15 }如果把按键拨到关(即下)再复位单片机,一切安好,但是如果一开始是开的状态,LED的状态会总是与开关相反。为什么呢?因为开关可以保存状态,这是第一个差别。所以,我们可以每次得知开关状态改变后读取开关状态,并传给LED: 1 #include <ee1/led.h> 
发表于 2019-12-02
小广播
何立民专栏 单片机及嵌入式宝典

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

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