51单片机实现直流电机简易驱动
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);
}
}