本帖最后由 11hyliang1 于 2014-9-23 17:01 编辑
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit D1=P1^1;
sbit D2=P1^2;
sbit D3=P1^3;
sbit D4=P1^4;
sbit ENA=P1^5;
sbit ENB=P1^6;
uchar c,a,b,temp,flag,flag1;
void rec_data();
void delay(uint);void qianjin();
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SCON=0X50;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
PCON=0x00;
P1=0XFF;
flag=0;
while(1)
{
if(flag1==1)
{
switch(a)
{
case 0x11: qianjin();break;
// case 0x22: D1=1;D2=0;D3=0;D4=1;break;
// case 0x33: D1=0;D2=1;D3=0;D4=1;break;
// case 0x44: D1=1;D2=0;D3=1;D4=0;break;
// case 0x00: D1=0;D2=0;D3=0;D4=0;break;
default: break;
}
flag1=0;
}
}
}
void rec_data()
{
uchar c;
c=SBUF;
switch(flag)
{
case 0:if(c==0xfc){flag=1;} else flag=0;break;
case 1:if(c!=0xff){flag=2;a=SBUF;} else flag=0;break;
case 2:if(c==0xfc||c==0x0d||c==0x1e||c==0x2f||c==0x41){flag=3;flag1=1;flag=0;} else flag=0;break;
default: break;
}
}
void serial() interrupt 4
{
ES=0;
if(RI==1)
{
RI=0;
rec_data();
}
ES=1;
}
void qianjin()
{
uint cycle=0,T=500;
D1=1;
D2=0;
while(cycle!=T)
{
ENA=1;
delay(cycle++);
ENA=0;
delay(T-cycle);
}
}
void delay(unsigned int z)
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
如何才能控制电机处于一个较慢的速度转动,太快了,不需要精确具体速度是多少,就尽量减慢转速就行,像我那样写不太理想,因为好像慢慢加速完了就会停止了,我希望进入qianjin函数后,如果我没有发送任何信号,电机能一直恒速、低速前进,另外在不大改动我的代码的情况下,应该怎么写代码
忘记说了,是用的L298驱动模块驱动的
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
延长可以,不过转弯就不知怎么弄了,电机一个正,一个反,只会在原地打圈,还是说转太快了就会原地打圈,想用两个定时器,但上面波特率设置已经用了定时器了,而且有时开着开着就停了,发送什么指令都没用,去手动弄一下轮子又可以跑,不知是摩擦太大还是怎么回事,电池我测了一下,电力很足
一周热门 更多>