找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2473|回复: 2
收起左侧

我的单片机按键控制电机转动时间转向的源码(有注释)

[复制链接]
ID:319321 发表于 2018-4-30 13:22 | 显示全部楼层 |阅读模式
这是我们做机械创新比赛时编写的按键电机控制程序
简单易懂,按不同的按键电机会正转或反转,且时间不同
可以直接带入自己的程序进行调试

单片机源程序如下:
  1. #include<reg52.h>
  2. typedef unsigned int u16;
  3. typedef unsigned char u8;

  4. sbit k1=P3^0;       
  5. sbit k2=P3^1;
  6. sbit k3=P3^2;
  7. sbit k4=P3^3;
  8. sbit k5=P3^4;


  9. sbit ENA=P2^0;
  10. sbit IN1=P2^1;
  11. sbit IN2=P2^2;
  12. sbit IN3=P2^3;
  13. sbit IN4=P2^4;
  14. sbit ENB=P2^5;

  15. void delayed(unsigned int x); //延时xms
  16. void revolve1();//车位转动60
  17. void revolve11();//反转60
  18. void revolve2();
  19. void revolve22();
  20. void revolve3();
  21. void clockwise();//顺时针
  22. void delayed (unsigned int x)//延时xms
  23. {
  24.         unsigned int i,j;
  25.         for(i=x; i>0; i--)
  26.   {
  27.       for(j=113;j>0;j--);
  28.         }
  29. }

  30. void revolve1()//正转60度
  31. {
  32.         ENB=1;
  33.         IN3=0;
  34.         IN4=1;
  35. }
  36. void revolve11()//反转60度
  37. {
  38.         ENB=1;
  39.         IN3=1;
  40.         IN4=0;
  41. }       
  42. void revolve2()//正转120度
  43. {
  44.         ENB=1;
  45.         IN3=0;
  46.         IN4=1;
  47. }
  48. void revolve22()//反转120度
  49. {
  50.         ENB=1;
  51.         IN3=1;
  52.         IN4=0;
  53. }
  54. void revolve3()//正转180度
  55. {
  56.         ENB=1;
  57.         IN3=0;
  58.         IN4=1;
  59. }
  60. void main()
  61. {

  62.         int i;
  63.         if(k1==0)                  //检测按键K1是否按下
  64.         {       
  65.                 delayed(10);   //消除抖动 一般大约10ms
  66.                 if(k1==0)         //再次判断按键是否按下
  67.                 {
  68.                         revolve1();
  69.                         for(i=6;i>0;i--)   //延时5s
  70.                           {
  71.                       delayed(1000);
  72.               }
  73.                                 IN3=0;
  74.                                 IN4=0;
  75.                                 while(1);//
  76.                 }
  77.         }       
  78.   if(k2==0)                  //检测按键K2是否按下
  79.         {       
  80.                 delayed(10);   //消除抖动 一般大约10ms
  81.                 if(k2==0)         //再次判断按键是否按下
  82.                 {
  83.                         revolve2();
  84.                         for(i=12;i>0;i--)   //延时10s
  85.                           {
  86.                       delayed(1000);
  87.               }
  88.             IN3=0;
  89.             IN4=0;
  90.             while(1);
  91.                 }
  92.         }       
  93.           if(k3==0)                  //检测按键K3是否按下
  94.         {       
  95.                 delayed(10);   //消除抖动 一般大约10ms
  96.                 if(k3==0)         //再次判断按键是否按下
  97.                 {
  98.                         revolve11();
  99.                         for(i=6;i>0;i--)   //延时5s
  100.                           {
  101.                       delayed(1000);
  102.               }
  103.             IN3=0;
  104.             IN4=0;
  105.             while(1);
  106.                 }
  107.         }       
  108.         if(k4==0)                  //检测按键K4是否按下
  109.         {       
  110.                 delayed(10);   //消除抖动 一般大约10ms
  111.                 if(k4==0)         //再次判断按键是否按下
  112.                 {
  113.                         revolve22();
  114.                         for(i=12;i>0;i--)   //延时10s
  115.                           {
  116.                       delayed(1000);
  117.               }
  118.             IN3=0;
  119.             IN4=0;
  120.             while(1);
  121.                 }
  122.         }       
  123.         if(k5==0)                  //检测按键K5是否按下
  124.         {       
  125.                 delayed(10);   //消除抖动 一般大约10ms
  126.                 if(k5==0)         //再次判断按键是否按下
  127.                 {
  128.                         revolve3();
  129.                         for(i=18;i>0;i--)   //延时15s
  130.                           {
  131.                       delayed(1000);
  132.               }
  133.             IN3=0;
  134.             IN4=0;
  135.             while(1);
  136.                 }
  137.         }
  138. }
复制代码

所有资料51hei提供下载:
KEY.zip (761 Bytes, 下载次数: 20)

评分

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

查看全部评分

回复

使用道具 举报

ID:130231 发表于 2018-4-30 18:10 | 显示全部楼层
可以分享有电路图吗。我想学一下。
回复

使用道具 举报

ID:470843 发表于 2019-1-21 12:59 | 显示全部楼层
有没有原理图啊,想学一下
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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