51单片机实现直流电机简易驱动

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

/*

本程序主要实现让直流电机正反转,没有其他特殊功能,没有使用定时器中断全速运行直流电机不可调速

程序可以在keil2中调试出来

*/

#include

//定义所有需要使用的引脚

sbit BT0=P2^0;

sbit BT1=P2^1;

sbit BT2=P2^2;

sbit PW1=P1^0;

sbit PW2=P1^1;

sbit left=P0^0;

sbit right=P0^1;

sbit stop=P0^2;

void motor(); // 功能函数,实现大部分功能

void leftM(); // 电机左转

void rightM(); // 电机右转

void stopM(); // 电机停止

//延时函数

void DelayUs2x(unsigned char t);

void DelayMs(unsigned char t);

void main()

{

motor();

}

void motor()

{

while(1) //死循环一直让电机转动

{

//一次防抖动,下面按键这边

if(!BT0) // 判断是否按下

{

DelayMs(10); //延时一段时间防抖动

if(!BT0) //确定按下按键了

{

while(!BT0);// 如果手一直为松开,这边则死循环一直等待松开

leftM();

left = 0;

right = 1;

stop = 1;

}

}

//同上

if(!BT1)

{

DelayMs(10);

if(!BT1)

{

while(!BT1);

rightM();

left = 1;

right = 0;

stop =1;

}

}

//同上

if(!BT2)

{

DelayMs(10);

if(!BT2)

{

stopM();

left = 1;

right = 1;

stop = 0;

}

}

}

}

//电机左转

void leftM()

{

PW1 = 0;

PW2 = 1;

}

//电机右转

void rightM()

{

PW1 = 1;

PW2 = 0;

}

//电机停止函数

void stopM()

{

PW1 = 0;

PW2 = 0;

}

//延时防抖动

void DelayUs2x(unsigned char t) {

while(--t);

}

void DelayMs(unsigned char t) {

//延时1ms

while(t--)

{

DelayUs2x(245);

DelayUs2x(245);

}

}

相关文档
最新文档