历史上的今天
今天是:2024年11月24日(星期日)
2021年11月24日 | 单片机控制直流电机从而实现各种运动组合
2021-11-24 来源:eefocus
项目描述:
用单片机(STC89C52RC)控制两个直流电机,从而实现各种运动形式。
本例中实现功能为:前进 后退 右转 左转。
C语言程序如下:
/*------------------------------------
FileName: main.c
Function: MCU控制两个直流电机组合运动
Description: 向前 向后 右转 左转
Author: Zhang Kaizhou
Date: 2019-6-9 17:28:42
------------------------------------*/
#include "ZKZ.h"
bit dirFlag = 0; // 前进方向标志 0-向前 1-向后
bit turnFlag = 0; // 转向方向标志 0-向右 1-向左
void main(){
while(1){
keyScan();
motorRun();
}
}
/*软件延时xms函数*/
void delay(uchar xms){
uchar i, j;
for(i = xms; i > 0; i--)
for(j = 110; j > 0; j--);
}
/*键盘扫描函数*/
void keyScan(){
if(!goAhead){
delay(5);
if(!goAhead){
while(!goAhead);
dirFlag = 0;
}
}
if(!goBack){
delay(5);
if(!goBack){
while(!goBack);
dirFlag = 1;
}
}
if(!turnRight){
delay(5);
if(!turnRight){
while(!turnRight);
turnFlag = 0;
}
}
if(!turnLeft){
delay(5);
if(!turnLeft){
while(!turnLeft);
turnFlag = 1;
}
}
}
/*直流电机运转函数*/
void motorRun(){
if(!dirFlag){
MLEn = 1;
ML1 = 1;
ML2 = 0;
MREn = 1;
MR1 = 1;
MR2 = 0;
}else{
MLEn = 1;
ML1 = 0;
ML2 = 1;
MREn = 1;
MR1 = 0;
MR2 = 1;
}
if(!turnFlag){
MLEn = 1;
MREn = 0;
}else{
MLEn = 0;
MREn = 1;
}
}
/*------------------------------------
FileName: ZKZ.h
Function: MCU控制两个直流电机组合运动
Description: 向前 向后 右转 左转
Author: Zhang Kaizhou
Date: 2019-6-9 17:28:42
------------------------------------*/
#include #define uchar unsigned char #define uint unsigned int /*直流电机驱动模块端口定义*/ sbit MLEn = P1^4; // 左边电机驱动端口 sbit ML1 = P1^2; sbit ML2 = P1^3; sbit MREn = P1^5; // 右边电机驱动端口 sbit MR1 = P1^6; sbit MR2 = P1^7; /*独立按键端口定义*/ sbit goAhead = P3^4; // 向前 sbit goBack = P3^5; // 向后 sbit turnRight = P3^6; // 向右转 sbit turnLeft = P3^7; // 向左转 /*主模块函数声明*/ void delay(uchar xms); void keyScan(); void motorRun();
上一篇:C51软件精确延时(us级)
下一篇:单片机PWM调光
史海拾趣
|
十年了,依然两手空空。回首一望,心里无比苍凉。 由于学历比较低吧,知名的企业进不了。也就一些小公司看在我经验丰富的份上要了我,工资老涨不上去;而且那些公司确确实实是要会干活的人。因此,差不多每进一家厂,都会有一些很难的项目等着我。 ...… 查看全部问答> |
|
数字信号处理器是一种特别适合于进行数字信号处理的微处理器,主要用于实时快速地实现各种数字信号处理算法 定点运算DSP数字信号处理器在应用中已取得了极大的成功,而且仍然是DSP应用的主体。然而,随着对DSP处理速度与精度、存储 ...… 查看全部问答> |
|
关于三级管的问题 有两个三极管(3DG6型号或3DG8型号放大倍数>=50;3A*31型号或3AX81型号放大倍数>=30。)可用现在市场上的哪种型号的三极管代替呀?望各位告知一下。… 查看全部问答> |
|
是WINCE5的SDK,用IImagingFactory IImage接口, 报错是 dcdvDlg.obj : error LNK2001: unresolved external symbol _CLSID_ImagingFactory dcdvDlg.obj : error LNK2001: unresolved external symbol _IID_IImagingFactory 我已 ...… 查看全部问答> |




