找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2990|回复: 0
打印 上一主题 下一主题
收起左侧

绕丝设备第2代机设计-带单片机源程序-供参考

[复制链接]
跳转到指定楼层
楼主
基础不是很好,程序写的不简洁,但是实现了功能,希望会继续努力,写的更简单点

视频:




51单片机源程序:
  1. #include <STC12C2052AD.H> //头文件
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. volatile uint M1=0;//皮带轮电机所转脉冲计数。
  6. volatile uint M2=0;//绕丝电机所转脉冲计数。
  7. uchar a=0,b=0,c=13;//a:皮带轮电机中断频率计数、b:绕丝电机中断频率计数、c:设置绕丝电机速度台阶,以实现多段加速
  8. bit flag1=0,flag2=0,flag3=0,flag4=0,flag5=0,flag6=0,flag7=0;  //标志位

  9. sbit k1=P3^2;//启动键
  10. sbit k2=P3^3;//复位键

  11. sbit EN1=P1^7;//皮带轮电机使能控制线。
  12. sbit fangxiang1=P1^6;//皮带轮电机正反转控制线。
  13. sbit PWM1=P1^5;//皮带轮电机脉冲信号。

  14. sbit EN2=P1^4;//绕丝电机使能控制线。
  15. sbit fangxiang2=P1^3;//绕丝电机正反转控制线。
  16. sbit PWM2=P1^2;//绕丝电机脉冲信号。

  17. void delay(unsigned char i)//延时函数
  18. {
  19.         unsigned x,y;
  20.         for(x=i;x>0;x--)
  21.                 for(y=110;y>0;y--);
  22. }

  23. void keyscan()
  24. {                                                       
  25.         if(flag4==1)                  //在正转完成后,复位功能才起效,在正转期间,复位按键不起作用。
  26.                 {       
  27.                         if(k2==0)          
  28.                                 delay(15);
  29.                                 if(k2==0)
  30.                                 {
  31.                                         while(!k2);
  32.                                         {
  33.                                                 M1=0;
  34.                                                 M2=0;
  35.                                                 EN1=1;//关闭皮带轮电机使能控制
  36.                                                 EN2=1;
  37.                                                 TR1=1;//启动定时器1,进行复位动作。
  38.                                         }          
  39.                         }
  40.                 }
  41.         if(flag4==0)
  42.         {       
  43.         if(k1==0)
  44.                 delay(15);
  45.                 if(k1==0)
  46.                 {
  47.                         while(!k1);
  48.                         EN1=1;//关闭皮带轮电机使能控制
  49.                         EN2=1;//关闭绕丝电机使能控制
  50.                         fangxiang1=0;//起始给皮带轮电机一个方向
  51.                         fangxiang2=0;//起始给绕丝电机一个方向
  52.                         TR0=1;//启动定时器0
  53.                 }
  54.         }
  55. }
  56. void main()
  57. {  
  58.         TMOD=0x11;//设置T0为模式1
  59.         TH0=0xFF; //0.1ms中断一次
  60.         TL0=0x9C;
  61.         TH1=0xFC; //0.8ms中断一次
  62.         TL1=0xE0;  
  63.         EA=1;
  64.         ET0=1;
  65.         ET1=1;
  66.         EN1=0;//起始打开皮带轮电机使能端
  67.         EN2=0;//起始打开皮带轮电机使能端
  68.         while(1)
  69.         {
  70.                 keyscan();
  71.                 if(flag1==1)
  72.                 {
  73.                                 flag1=0;
  74.                                 if(a==20)
  75.                                         {                                               
  76.                                                 a=0;
  77.                                                 M1++;
  78.                                                 PWM1=~PWM1;          //皮带轮电机脉冲频率--定速250HZ
  79.                                                 if(M1==1245)  //正转3圈后,方向取反,设置标志4=1,复位键才起作用。20*0.1*1245=2.49秒
  80.                                                 {
  81.                                                         M1=0;
  82.                                                         EN1=0;                                                       
  83.                                                 }
  84.                                         }
  85.                         if(c==5)                                   //转至最高速度后,停机
  86.                         {
  87.                                         TR0=0;                          //关定时器T0
  88.                                         TF0=0;                          //以下所有标志清零
  89.                                         M1=0;
  90.                                         M2=0;
  91.                                         EN1=0;                          //打开皮带轮电机使能。(皮带轮电机驱动板停机时有噪音)
  92.                                         EN2=1;                                                                                                       
  93.                                         fangxiang1=1;        //两电机方向取反
  94.                                         fangxiang2=1;        //
  95.                                         a=0;
  96.                                         b=0;
  97.                                         c=13;                        //重新赋值
  98.                                         flag4=1;                //标志4置1,复位按键开始起作用
  99.                                         flag3=0;                //标志3清零                               
  100.                         }
  101.                         else   
  102.                         {         
  103.                          if(b>=c)             //设置8段速度:第一段:
  104.                          {
  105.                                  b=0;
  106.                                 PWM2=~PWM2;
  107.                                 M2++;
  108.                                 if(M2==325)         //每325个脉冲后,调一次速
  109.                                 {
  110.                                         M2=0;
  111.                                         b=0;
  112.                                         c--;         //绕丝电机台阶数减1。
  113.                                 }  
  114.                          }
  115.                    }
  116.                 }       
  117.         }
  118. }
  119. void timer0() interrupt 1         //绕丝中断程序       
  120. {
  121.         TH0=0xFF; //0.1ms中断一次
  122.         TL0=0x9C;
  123.         a++;//更改皮带轮电机脉冲频率。
  124.         b++;//更改绕丝电机脉冲频率。
  125.         flag1=1;//设置标志位,使进入主程序,节省中断程序处理时间。                       
  126. }

  127. void timer1() interrupt 3          //复位中断程序
  128. {
  129.         TH1=0xFC; //0.8ms中断一次
  130.         TL1=0xE0;
  131.         PWM1=~PWM1;
  132.                 M1++;
  133.                 if(M1==1245)  //复位脉冲计数,完成后,清零M1; 0.9秒完成
  134.                 {
  135.                         M1=0;
  136.                         EN1=0;          //打开皮带轮电机使能控制
  137.                 }
  138.         PWM2=~PWM2;
  139.         M2++;
  140.                 if(M2==2600)         //半步运行 就是2600个脉冲        2.08秒完成
  141.                 {
  142.                                   TR1=0;         //等待绕丝电机复位完毕后,将所有数据清零。
  143.                                 略……………………
复制代码



完整资料下载:
2代机.rar (2.53 MB, 下载次数: 10)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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