本人刚学没多久,求各位大佬帮忙看一下,看看有没有错误,欢迎大家指正
步进电机驱动模块为ULN2003,人体红外传感器为HC-SR501
单片机源程序如下(有注释):
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- /*********************
- + ---- +4.5-20v //正极输入电压在+4.5v到20v之间
- out --- P10 //输出接到P10端口
- - --- GND //负极接地
- IN1 ---- P00 //IN1接 P00端口 (电机驱动模块)
- IN2 ---- P01 //IN2接 P01端口 (电机驱动模块)
- IN3 ---- P02 //IN3接 P02端口 (电机驱动模块)
- IN4 ---- P03 //IN4接 P03端口 (电机驱动模块)
- + ---- +5V //正极接正5v
- - ---- GND //负极接地
- *********************/
- sbit out=P2^0 ; //对输出out进行位定义,定义单片机I/O口 P1.0的伪名称叫out
- sbit led1=P1^3;
- sbit led2=P1^7;
- #define MotorData P0 //对步进电机的控制接口进行定义
- #define time 500 //控制正反转的角度'
-
- uchar phasecw[4] ={0x08,0x04,0x02,0x01};//正转 电机导通相序 D-C-B-A
- uchar phaseccw[4]={0x01,0x02,0x04,0x08};//反转 电机导通相序 A-B-C-D
- //ms 延时函数封装
- void Delay_xms(uint x) //定义一个无符号整数 x (x是什么?) 带参函数
- {
- uint i,j; //uint等价于unsigned int,无符号整数 ;定义两个无符号整数 i和 j
- for(i=0;i<x;i++) //令 i的初始值为 0,当 i<x的时候,i=i+1
- for(j=0;j<112;j++); //令 j的初始值为 0,当 i<112的时候,j=j+1
- }
- //顺时针转动函数封装
- void MotorCW(void) //void MotorCW(void) 不能输入参数
- {
- uchar i; //定义一个无符号字符型 i
- for(i=0;i<4;i++) //令 i的初始值为 0,当 i<4的时候,执行{}内的程序段,然后进行 i=i+1再禁入循环
- {
- MotorData=phasecw[i]; //步进电机的控制接口输出正转且电机导通相序 D-C-B-A 的信号驱动步进电机工作
- Delay_xms(4); //延时函数,调节转速 (意思是延时4毫秒吗?)
- }
- }
- //逆时针转动函数封装
- void MotorCCW(void)
- {
- uchar i; //定义一个无符号字符型 i
- for(i=0;i<4;i++) //令 i的初始值为 0,当 i<4的时候,执行{}内的程序段,然后进行 i=i+1再禁入循环
- {
- MotorData=phaseccw[i]; //步进电机的控制接口输出反转且电机导通相序 A-B-C-D 的信号驱动步进电机工作
- Delay_xms(4); //延时函数,调节转速(意思是延时4毫秒吗?)
- }
- }
- //停止转动函数封装
- void MotorStop(void)
- {
- MotorData=0x00; //步进电机的控制接口输出置 0信号 ,使步进电机停止工作
- }
- //程序主函数
- void main(void)
- {
- uint i; //定义一个无符号整型 i
- Delay_xms(50); //延时函数(意思是延时4s吗?)(目的是啥?等系统稳定是吗?)
- while(1) // 不断循环
- {
- led1=1;
- led2=1;
- if(out == 1) //如果out等于1的话,那么执行{}内的程序
- {
- for(i=0;i<time;i++) //对于i=0,当i<time值时,执行顺时针转动函数,然后i=i+1后重新进入循环
- {
- led1=0;
- MotorCW(); //顺时针转动函数,驱动步进电机顺时针转动,直到i等于time值时结束循环
-
- }
- MotorStop(); //停止转动函数,是步进电机停止转动
-
- Delay_xms(1000); //延时函数,延时1000毫秒的意思是吗?
-
- if(out == 0) //如果out等于0的话,那么执行{}内的程序
- {
- for(i=0;i<time;i++) //对于i=0,当i<time值时,执行逆时针转动函数,然后i=i+1后重新进入循环
- {
- led2=0;
- MotorCCW(); //逆时针转动函数,驱动步进电机逆时针转动,直到i等于time值时结束循环
- }
- MotorStop(); //停止转动函数,使步进电机停止转动
- }
- }
- }
- }
复制代码
|