找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机人体红外传感器驱动步进电机源程序 带详细的注释

[复制链接]
ID:512281 发表于 2019-5-21 19:59 | 显示全部楼层 |阅读模式
本人刚学没多久,求各位大佬帮忙看一下,看看有没有错误,欢迎大家指正
步进电机驱动模块为ULN2003,人体红外传感器为HC-SR501

单片机源程序如下(有注释):
  1. #include <reg52.h>
  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. /*********************
  5. +  ----  +4.5-20v  //正极输入电压在+4.5v到20v之间
  6. out ---  P10       //输出接到P10端口
  7. -   ---  GND       //负极接地
  8. IN1 ---- P00       //IN1接 P00端口 (电机驱动模块)
  9. IN2 ---- P01       //IN2接 P01端口 (电机驱动模块)
  10. IN3 ---- P02       //IN3接 P02端口 (电机驱动模块)
  11. IN4 ---- P03       //IN4接 P03端口 (电机驱动模块)
  12. +   ---- +5V       //正极接正5v
  13. -   ---- GND       //负极接地
  14. *********************/
  15. sbit out=P2^0 ;        //对输出out进行位定义,定义单片机I/O口 P1.0的伪名称叫out
  16. sbit led1=P1^3;
  17. sbit led2=P1^7;
  18. #define MotorData P0    //对步进电机的控制接口进行定义
  19. #define time 500        //控制正反转的角度'

  20. uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A
  21. uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D

  22. //ms 延时函数封装
  23. void Delay_xms(uint x)         //定义一个无符号整数 x (x是什么?)  带参函数
  24. {
  25.   uint i,j;                     //uint等价于unsigned int,无符号整数 ;定义两个无符号整数 i和 j  
  26.   for(i=0;i<x;i++)              //令 i的初始值为 0,当 i<x的时候,i=i+1
  27.   for(j=0;j<112;j++);           //令 j的初始值为 0,当 i<112的时候,j=j+1
  28. }

  29. //顺时针转动函数封装
  30. void MotorCW(void)             //void MotorCW(void) 不能输入参数
  31. {
  32.   uchar i;                      //定义一个无符号字符型 i
  33.   for(i=0;i<4;i++)              //令 i的初始值为 0,当 i<4的时候,执行{}内的程序段,然后进行 i=i+1再禁入循环
  34.    {
  35.     MotorData=phasecw[i];       //步进电机的控制接口输出正转且电机导通相序 D-C-B-A 的信号驱动步进电机工作
  36.     Delay_xms(4);               //延时函数,调节转速 (意思是延时4毫秒吗?)
  37.    }
  38. }

  39. //逆时针转动函数封装
  40. void MotorCCW(void)
  41. {
  42.   uchar i;                      //定义一个无符号字符型 i
  43.   for(i=0;i<4;i++)              //令 i的初始值为 0,当 i<4的时候,执行{}内的程序段,然后进行 i=i+1再禁入循环
  44.    {
  45.     MotorData=phaseccw[i];      //步进电机的控制接口输出反转且电机导通相序 A-B-C-D 的信号驱动步进电机工作
  46.     Delay_xms(4);               //延时函数,调节转速(意思是延时4毫秒吗?)
  47.    }
  48. }

  49. //停止转动函数封装
  50. void MotorStop(void)
  51. {
  52.   MotorData=0x00;               //步进电机的控制接口输出置 0信号 ,使步进电机停止工作
  53. }

  54. //程序主函数
  55. void main(void)
  56. {
  57.   uint i;                       //定义一个无符号整型 i
  58.   Delay_xms(50);                //延时函数(意思是延时4s吗?)(目的是啥?等系统稳定是吗?)
  59.   while(1)                      // 不断循环
  60. {
  61.       led1=1;
  62.       led2=1;
  63.    if(out == 1)                       //如果out等于1的话,那么执行{}内的程序
  64.   {   
  65.        for(i=0;i<time;i++)        //对于i=0,当i<time值时,执行顺时针转动函数,然后i=i+1后重新进入循环           
  66.    {
  67.           led1=0;
  68.     MotorCW();            //顺时针转动函数,驱动步进电机顺时针转动,直到i等于time值时结束循环
  69.          
  70.       }
  71.        MotorStop();               //停止转动函数,是步进电机停止转动
  72.      
  73.     Delay_xms(1000);           //延时函数,延时1000毫秒的意思是吗?
  74.   
  75.     if(out == 0)               //如果out等于0的话,那么执行{}内的程序
  76.           {
  77.          for(i=0;i<time;i++)   //对于i=0,当i<time值时,执行逆时针转动函数,然后i=i+1后重新进入循环
  78.            {
  79.              led2=0;
  80.        MotorCCW();       //逆时针转动函数,驱动步进电机逆时针转动,直到i等于time值时结束循环
  81.               }
  82.          MotorStop();          //停止转动函数,使步进电机停止转动  
  83.        }
  84.         }
  85.    }
  86. }
复制代码


回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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