标题:
有没有大神用l9110s控制四个直流电机,遇到过这种问题,如下正文
[打印本页]
作者:
ahandsomeboy
时间:
2018-8-13 10:30
标题:
有没有大神用l9110s控制四个直流电机,遇到过这种问题,如下正文
已经写好的前进后退,在一个函数中调用正常,到了另外一个地方就会反向,本人用一个l9110s模块控制四个直流电机,左侧两个接到一个马达端口,右侧接一个马达端口,效果与用两个驱动模块相同。双电源供电,开发板P2口前四位控制马达,有独立按键和定时器两部分。代码如下:问题是,分别将定时器和按键扫描注释,相同的函数出现的现象不同
#include<reg51.h>
#include<reg51.h>
typedef unsigned int u16; //对数据类型进行重新声明定义
typedef unsigned char u8;
#define motor P2//p2口控制四个马达,01口控制左侧,23口控制右侧
sbit k1=P3^0;//通过按键控制运动
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P3^3;
void delay(u16 j)
{
while(j--);
}
void qj()//前进
{
motor=0xfa; //0000 1010
}
void ht()//后退
{
motor=0xf5;//0000 0101
}
void yz()//右转弯
{
motor=0x09;//0000 1001
}
void zz()//左转弯
{
motor=0x06;//0000 0110
}
void Timer0Init()//定时50ms秒,完成后进行中断
{
TMOD|=0X01;//0000 0001方式一
TH0=0x3C;//50ms
TL0=0xB0;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;
}
void keyscan()
{
if(k1==0) //检测按键K1是否按下
{
delay(1000); //消除抖动 一般大约10ms
if(k1==0) //再次判断按键是否按下
{
qj();
}
while(!k1); //检测按键是否松开
}
if(k2==0)
{
delay(1000);
if(k2==0)
{
ht();
}
while(!k2);
}
if(k3==0)
{
delay(1000);
if(k3==0)
{
zz();
}
while(!k3);
}
if(k4==0)
{
delay(1000);
if(k4==0)
{
yz();
}
while(!k4);
}
}
void main()
{
Timer0Init();
while(1)
{
keyscan();
}
}
void Timer0() interrupt 1//interrupt后面无括号
{
static u16 i=0;
TH0=0x3C;//50ms
TL0=0xB0;
i++;
if(i==20)
{
qj();
}
if(i==60)
{
i=0;
ht();
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1