以下能驱动两相四线步进电机正转反转
按键1正转 键2反转 功能正常
我想让按键按下后能转且持续2秒转动后停止。最好两键能互锁。
小白能力有限 望各位高手不吝赐教。 特此感谢了
#include <reg52.h>
sbit EN=P1^6; //使能
sbit A1=P1^7;
sbit B1=P1^5;
sbit Key1=P3^7; //按键!
sbit Key2=P3^5; //按键!
void D_MS(void){
unsigned int i=80; //速度
for(;i>0;i--)
;
}
void RRM(void){ //正转
EN=1;
A1=1;
D_MS();
B1=1;
D_MS();
A1=0;
D_MS();
B1=0;
D_MS();
EN=0;
}
void LLM(void){ //反转
EN=1;
B1=0;
D_MS();
A1=0;
D_MS();
B1=1;
D_MS();
A1=1;
D_MS();
EN=0;
}
void main(void){
A1=0;
B1=0;
EN=0;
while(1){
if(Key1==0){
D_MS();
while(Key1==0){
RRM();
}
}
if(Key2==0){
D_MS();
while(Key2==0){
LLM();
}
}
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
谢谢大家的热情帮助 已经搞定了,原来可以这么用,现在把我写的贴出来请大家优化优化,现在都能正常使用了。
双键控制正反转且维持1秒左右:
#include <reg52.h>
sbit EN=P1^6; //使能
sbit A1=P1^7;
sbit B1=P1^5;
sbit Key1=P3^7; //按键!
sbit Key2=P3^5; //按键!
void D_MS(void){
unsigned int i=80; //速度
for(;i>0;i--)
;
}
void RRM(void){ //正转
EN=1;
A1=1;
D_MS();
B1=1;
D_MS();
A1=0;
D_MS();
B1=0;
D_MS();
EN=0;
}
void LLM(void){ //反转
EN=1;
B1=0;
D_MS();
A1=0;
D_MS();
B1=1;
D_MS();
A1=1;
D_MS();
EN=0;
}
void main(void){
int j=80; //持续时间改目前我的板上大概一秒钟足够了
A1=0;
B1=0;
EN=0;
while(1) {
if(Key1==0){
D_MS();
if(Key1==0){
{
for(;j>0;j--)
LLM();
if(j==0)
j=80;
else
{
j=j--;
}
}
}
}
if(Key2==0){
D_MS();
if(Key2==0){
{
for(;j>0;j--)
RRM();
if(j==0)
j=80;
else
{
j--;
}
}
}
}
}
}
下面的是单键控制正反转的按一下正转 再按一下反转
#include <reg52.h>
sbit EN=P1^6; //使能
sbit A1=P1^7;
sbit B1=P1^5;
sbit Key1=P3^7; //按键!
sbit Key2=P3^5; //按键!
void D_MS(void){
unsigned int i=80; //速度
for(;i>0;i--)
;
}
void RRM(void){ //正转
EN=1;
A1=1;
D_MS();
B1=1;
D_MS();
A1=0;
D_MS();
B1=0;
D_MS();
EN=0;
}
void LLM(void){ //反转
EN=1;
B1=0;
D_MS();
A1=0;
D_MS();
B1=1;
D_MS();
A1=1;
D_MS();
EN=0;
}
void main(void){
int j=80,count=0; ///持续循环及按键计数
A1=0;
B1=0;
EN=0;
while(1) {
if(Key1==0){
D_MS();
if(Key1==0){
count = (count+1)%2;
switch(count)
{
case 0:;
{
for(;j>0;j--)
RRM();
if(j==0)
j=80;
else
{
j--;
}
}
break;
case 1:
{
for(;j>0;j--)
LLM();
if(j==0)
j=80;
else
{
j=j--;
}
}
break;
count=0;
} }
} }}
现在暂时没有按键互锁,大家再支支招帮忙出出主意
一周热门 更多>