以后程序记得写清楚点,规范化一点,还有,需要有必要的注释好不好,不然人家怎么知道你的d1是干嘛的?
这里我当做是你的笔误吧
“
// duoji1();
”
前面的“//”应该没有的吧
你的意思应该是:
不断执行duoji1();
同时不断检测按键之类的。
你想想,你进入了duoji1();
当你按下d1后,它怎么能停下来呢,因为d1放在了duoji1();的后面
而且你想要实现及时反应的话,你的算法本身就有问题。
想过另外一个算法吧。
要不就把问题补充详细点,我帮你想一个。
对了我这里有个自己以前做巡线小车的程序,拿去看看吧
#include<reg52h> //头文件
#define uchar unsigned char //宏定义
#define uint unsigned int
sbit infl1=P3^4; //inf代表红外对管,1为外,2为内。
sbit infl2=P3^5;
sbit infr2=P3^6;
sbit infr1=P3^7;
sbit pwm=P1^0; //信号线
uchar jd,count;
void time_init() //中断初始化
{
TMOD=0x01;
TH0=0xff; //高电平单位脉冲时间定为方式1,晶振频率为110592,01ms
TL0=0xa3;
IE=0x82;
TR0=1;
}
void time_ini()interrupt 1 //中断函数
{
TH0=0xff; //重新赋新值
TL0=0xa3;
if(count<jd)
pwm=1;
else pwm=0;
count++;
count=count%200; //脉冲周期20ms
}
void keyscan() //按键扫描
{
if(infr1==0)
{
jd=11;
count=0;
while(infr1==0);
}
if(infr2==0)
{
jd=13;
count=0;
while(infr2==0);
}
if(infl1==0)
{
jd=19;
count=0;
while(infl1==0);
}
if(infl2==0)
{
jd=17;
count=0;
while(infl2==0);
}
}
void main()
{
count=0;
time_init();
while(1)
{
keyscan();
}
}
舵机响应速度有要求,空载情况一般03秒以下,越快越好。如果嫌它转得太快,可以减少其转动角度,多持续一会儿可以达到同样效果,也可以一点点加大角度,如一次改变10度,保持1秒再增加角度。但某些舵机误差比较大,小角度下动作不准确且缓慢,因此一次调整角度不能太小。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)