for(b=0;b<120;b++);
}
void delayx1ms(int x)
{
unsigned char a,b;
for(x;x>0;x--)
for(b=102;b>0;b--)
for(a=3;a>0;a--);
}
void delay1ms()
{
unsigned char a,b;
for(b=102;b>0;b--)
for(a=3;a>0;a--);
}
void delay500us()
{
unsigned char a,b;
for(b=1;b>0;b--)
for(a=227;a>0;a--);
}
void main() // 主函数
{
Init(); // 串口初始化函数调用
while (1)
{
if (RI==1) // 判断是否有数据
{
RI = 0; // 置0
Com = SBUF; // 暂时存放接收的数据
Cont(); // 调用数据处理函数
}
}
}
void Init() //串口初始化
{
ES=0; //中断关闭
SCON = 0x50; // 串行控制寄存器 01010000串口工作方式1并允许中断接收数据
TMOD = 0x20; // 定时器/计[color=rgb(34, 34, 34)][backcolor=rgb(248, 248, 248)][font=PingFang SC,Arial,5FAE软雅黑,5B8B体,simsun,sans-serif][size=0.48] [/font][/backcolor][/color]数器1设置为工作方式
TH1=TL1=0xFD; // 设置波特率9600=110592*1000000/12/(0x100-0xfd)/32 本次实验晶振(11.0592)
PCON &= 0x7f; // 波特率不倍增
TR1 = 1; // 开启定时器1
TI=0; // 发送中断位
RI=0; // 接收中断位
ES=1; // 开启串口中断
motor1=0;
motor2=0; // 电机初始化
motor3=0;
motor4=0;
}
void Send(uc a) //单字节数据发送
{
TI=0; // TI是串口接收标志位
SBUF=a; //SBUF---即串口数据缓冲寄存器 将数据存入
while (TI==0) ;//等待发送结束
TI=0; //清零
}
void qianjin() //前进功能函数
{
motor1=1;
motor2=0;
motor3=1;
motor4=0;
}
void zuozhuan() //原地左转功能函数
{
motor1=0;
motor2=1;
motor3=1;
motor4=0;
}
void youzhuan() //原地右转功能函数
{
motor1=1;
motor2=0;
motor3=0;
motor4=1;
}
void houtui() //后退功能函数
{
motor1=0;
motor2=1;
motor3=0;
motor4=1;
}
void ZUO() // 单独左转功能函数
{
motor1=0;
motor2=0;
motor3=1;
motor4=0;
}
void YOU() // 单独右转功能函数
{
motor1=1;
motor2=0;
motor3=0;
motor4=0;
}
void xunji() //寻迹模式切换 功能函数
{
// while(1)
{
if((blackorwhite1==1)&& (blackorwhite2==0)&&(blackorwhite3==1))
qianjin();
else if ((blackorwhite1==0&&blackorwhite2==0&&blackorwhite3==1)||(blackorwhite1==0&&blackorwhite2==1&&blackorwhite3==1))
zuozhuan();
else if((blackorwhite1==1&&blackorwhite2==1&&blackorwhite3==0)||(blackorwhite1==1&&blackorwhite2==0&&blackorwhite3==0))
youzhuan();
else if ((blackorwhite1==0)&&(blackorwhite2==0)&&(blackorwhite3==0))
qianjin();
else
houtui();
}
}
//void L2_0() SG90舵机0度函数 若需要可以解禁此功能
/{
// int i,j;
// for(j=0;j<43;j++)
// {
// PWM1=1;
// delay500us();
// // delay1ms();
// PWM1=0;
// for(i=0;i<19;i++)
// delay1ms();
// delay500us();
// PWM1=0;
// for(i=0;i<20;i++)
// delay1ms();
// }
//}
void L2_45() //舵机45度旋转函数
{
int i,j;
for(j=0;j<43;j++)
{
PWM1=1;
// delay500us();
delay1ms();
PWM1=0;
for(i=0;i<20;i++)
delay1ms();
// delay500us();
PWM1=0;
for(i=0;i<21;i++)
delay1ms();
}
}
void L2_90() //舵机90度旋转函数
{
int i,j;
for(j=0;j<43;j++)
{
PWM1=1;
delay1ms();
delay500us();
PWM1=0;
for(i=0;i<18;i++)
delay1ms();
delay500us();
PWM1=0;
for(i=0;i<20;i++)
delay1ms();
}
[1] [2]