单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 120|回复: 0
收起左侧

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

[复制链接]
jym 发表于 2019-12-3 23:15 | 显示全部楼层 |阅读模式
1、       查阅相关资料,完成原理图设计;
2、       编写软件,使该系统能输出方波、三角波、锯齿波和梯形波;波形频率均为1khz,双极性输出。
3、       用protel软件完成系统的硬件设计,并通过电器规则检查;
4、       仿真实现;
5、       画pcb图;

仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
3.png
1.png

电路原理图如下:
2.png


Altium Designer画的原理图和PCB图如下:(51hei附件中可下载工程文件)
51hei.png

单片机代码:
  1. #include <AT89X51.H>
  2. unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66}//  0 1 2 3 4  


  3. unsigned char time1;                              //////延时函数参数///////           
  4. /////////////////////////////变量说明//////////////////////////////////////                              
  5. unsigned char time2;
  6. unsigned char time3;
  7. unsigned char count;
  8. unsigned char ms;
  9. ////////////////////////////////////////函数说明////////////////////////////////

  10. void  initial(void);                                           ////初始化函数////
  11. //void  initial_time0(void);                                      //////定时器0初始化///////


  12. void  anjian(void);                                          ////////////按键函数////
  13. void  delay(unsigned char time1,time2,time3);                  ////延时函数////
  14. void  disp(unsigned char count);                              /////静态显示子函数/////
  15. void  delay1(char ms);

  16. void  fangbo(void);                                          //方波函数//
  17. void  sanjiaobo(void);                                    //三角波函数//
  18. void  juchibo(void);                                      //锯齿波函数//
  19. void  tixingbo(void);                                  //正弦波函数//



  20. void  main (void)
  21. {
  22.   initial();
  23.   while(1)
  24.   {
  25.      anjian();
  26.   }
  27. }
  28. /*************************************************************************
  29. //函数名称:void anjian(void)
  30. //函数说明:按键函数
  31. //函数功能:
  32. //    注意:
  33. *************************************************************************/
  34. void  anjian(void)
  35. {

  36.   if(P3_7==0)
  37.    {delay(1,50,248);
  38.     if(P3_7==0)
  39.      {count=1;
  40.       disp(count);
  41.     fangbo();
  42.      }
  43.    }
  44.    while(P3_7==0);
  45.   count=0;
  46.   disp(count);
  47.   anjian();
  48. }
  49. /*************************************************************************
  50. //函数名称:void fangbo(void)
  51. //函数说明:方波函数
  52. //函数功能:
  53. //    注意:
  54. *************************************************************************/
  55. void  fangbo(void)
  56. {
  57.   while(1)
  58.      {
  59.      unsigned char fangbo_1;
  60.          fangbo_1+=8;
  61.          if(fangbo_1>128&fangbo_1<256)   {P0=0x00;}            
  62.          if(fangbo_1<128)            {P0=0xff;}

  63.        if(P3_7==0)
  64.             {delay(1,50,248);
  65.          if(P3_7==0)
  66.              {  count=2;
  67.                 disp(count);
  68.                     sanjiaobo();

  69.              }
  70.             }
  71.             while(P3_7==0);
  72.   }   
  73. }
  74. /*************************************************************************
  75. //函数名称:voidsanjiaobo(void)
  76. //函数说明:三角波函数
  77. //函数功能:
  78. //    注意:
  79. *************************************************************************/
  80. void  sanjiaobo(void)
  81. {
  82.   while(1)
  83.   {
  84.          unsignedchar sanjiaobo_2;
  85.          if(sanjiaobo_2<=128)
  86.          {P0=sanjiaobo_2;}
  87.          else
  88.          {P0=255-sanjiaobo_2;}
  89.       sanjiaobo_2+=5;   
  90.          if(sanjiaobo_2>=255)
  91.          {sanjiaobo_2=0x00;}

  92.           if(P3_7==0)
  93.             {
  94.             delay(1,50,248);
  95.             if(P3_7==0)
  96.              {count=3;
  97.                 disp(count);
  98.                     juchibo();

  99.               }
  100.          }
  101.             while(P3_7==0);
  102.   }
  103. }
  104. /*************************************************************************
  105. //函数名称:voidjuchibo(void)
  106. //函数说明:锯齿波函数
  107. //函数功能:
  108. //    注意:
  109. *************************************************************************/
  110. void  juchibo(void)
  111. {
  112.   while(1)
  113.   {
  114.          unsignedchar juchibo_3;
  115.          if(juchibo_3<180) {P0=juchibo_3;}   
  116.          juchibo_3+=4;   
  117.          if(juchibo_3>=180)   {juchibo_3=0x00;}
  118.          if(P3_7==0)
  119.          {
  120.          delay(1,50,248);
  121.          if(P3_7==0)
  122.              {count=4;
  123.                 disp(count);
  124.                     tixingbo();
  125.             }
  126.           }
  127.         while(P3_7==0);
  128.   }   
  129. }
  130. /*************************************************************************
  131. //函数名称:voidtixingbo(void)
  132. //函数说明:梯形波函数
  133. //函数功能:
  134. //    注意:
  135. *************************************************************************/
  136. void tixingbo(void)
  137. {
  138.   while(1)
  139.   {
  140.      unsignedchar tixingbo_4;
  141.          if(tixingbo_4<120)
  142.          {P0=tixingbo_4;}
  143.          elseif(tixingbo_4==120)
  144.            delay1(1);
  145.         elseif(tixingbo_4<240)
  146.            {P0=240-tixingbo_4;}
  147.           if(tixingbo_4==240)
  148.            {delay1(1);}


  149.          if(tixingbo_4>240)
  150.          {
  151.          tixingbo_4=0x00;

  152.          }   

  153.              tixingbo_4+=10;
  154.          if(P3_7==0)
  155.             {delay(1,50,248);
  156.             if(P3_7==0)
  157.              {  count=0;
  158.                 disp(count);
  159.                     anjian();

  160.               }
  161.          }
  162.            while(P3_7==0);
  163.   }
  164. }
  165. /*************************************************************************
  166. //函数名称:voidinitial(void)
  167. //函数说明:初始化函数
  168. //函数功能:
  169. //    注意:
  170. *************************************************************************/
  171. void  initial(void)
  172.       {
  173.          P0=0xff;
  174.          P1=0xff;
  175.          P2=0xff;
  176.          P3=0xff;
  177.       }
  178. /*************************************************************************
  179. //函数名称:delay(unsignedchar time1,time2,time3)
  180. //函数说明:延时函数
  181. //函数功能:
  182. //入口参数:unsigned chartime1,time2,time3
  183. //出口参数:
  184. //    注意:延时时间的计算:(time1*time2*time3*8us)us   
  185.             time1,time2,time3可以不进行变量说明  
  186. *************************************************************************/
  187. void delay(unsigned char time1,time2,time3)
  188.        {
  189.          unsigned char i,j,k;
  190.           for(i=time1;i>0;i--)
  191.              { for(j=time2;j>0;j--)
  192.                   {
  193.                      for(k=time3;k>0;k--);
  194.                   }
  195.              }
  196.         }
  197. /*************************************************************************
  198. //函数名称:disp(unsignedchar count)
  199. //函数说明:静态显示子函数
  200. //函数功能:
  201. //入口参数:unsigned charcount
  202. //出口参数:
  203. //    注意:
  204. *************************************************************************/
  205. void  disp(unsigned char count)
  206.       {  
  207.          P2=table[count];
  208.          delay(1,5,248);
  209.       }

  210.    void delay1(char ms)
  211. {
  212. char ti;
  213. while(ms--)
  214. {
  215.   for(ti=0;ti<16;ti++){}
  216. }
  217. }
复制代码
51hei.png

全部资料51hei下载地址:
低频信号发生器.rar (1.53 MB, 下载次数: 4)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表