diff --git a/car.c b/car.c new file mode 100644 index 0000000000000000000000000000000000000000..09f5c52f266a3b86f2f7b153fd795e86428dd813 --- /dev/null +++ b/car.c @@ -0,0 +1,129 @@ +/************小车移动方向*************/ +/* 向前直行【四电机正转】 */ +/* 向后直行【四电机反转】 */ +/* 向前左拐【右电机正转,左电机停止】*/ +/* 向前右拐【右电机停止,左电机正转】*/ +/* 向后左拐【右电机反转,左电机停止】*/ +/* 向后右拐【右电机停止,左电机反转】*/ +/* 停 止【四电机停止】 */ +/************小车移动方向*************/ + +#include +#include "motor.h" + +sbit EN1A = P0^7;//左前 +sbit EN1B = P0^2;//右前 +sbit EN2A = P3^7;//左后 +sbit EN2B = P3^2;//右后 + +unsigned char counter1,speed; //计数值和比较值,用于输出PWM + +void Timer0_Init() //100微秒@11.0592MHz +{ + TMOD = 0x11; //设置定时器模式 + TL0 = 0xA4; //设置定时初始值 + TH0 = 0xFF; //设置定时初始值 + TF0 = 0; //清除TF0标志 + TR0 = 1; //定时器0开始计时 + ET0 = 1; //定时器0的中端允许开关 + EA = 1; //定时器总开关 + PT0 = 1; //设置定时器为高低控制优先级,1为高优先级,0为低优先级 +} +void Timer0_Routine() interrupt 1 //中断函数 +{ + + TL0 = 0xA4; //设置定时初始值 + TH0 = 0xFF; //设置定时初始值 + + counter1++; + if (counter1 >= 100) + { + counter1 = 0; + } + if (counter1 < speed) + { + EN1A = 1; + EN1B = 1; + EN2A = 1; + EN2B = 1; + } + else + { + EN1A = 0; + EN1B = 0; + EN2A = 0; + EN2B = 0; + } +} +void car_go () //小车向前直行 +{ + speed = 20; + LF_motor_go (); + RF_motor_go (); + LR_motor_go (); + RR_motor_go (); +} +void car_back () //小车向后直行 +{ + speed = 18; + LF_motor_back (); + RF_motor_back (); + LR_motor_back (); + RR_motor_back (); +} +void car_stop () //小车停止 +{ + speed = 0; + RR_motor_stop (); + LR_motor_stop (); + RF_motor_stop (); + LF_motor_stop (); +} +void car_leftgo () //小车向前左拐 +{ + speed = 18; + RF_motor_go (); + RR_motor_go (); + LF_motor_stop (); + LR_motor_stop (); +} +void car_rightgo () //小车向前右拐 +{ + speed = 18; + LF_motor_go (); + LR_motor_go (); + RF_motor_stop (); + RR_motor_stop (); +} +void car_leftback () //小车向后左拐 +{ + speed = 18; + RR_motor_back (); + RF_motor_back (); + LF_motor_stop (); + LR_motor_stop (); +} +void car_rightback () //小车向后右拐 +{ + speed = 18; + LF_motor_back (); + LR_motor_back (); + RF_motor_stop (); + RR_motor_stop (); +} +void car_rightstop () //小车原地右拐 +{ + speed = 20; + LF_motor_go (); + LR_motor_go (); + RF_motor_back (); + RR_motor_back (); +} +void car_leftstop () //小车原地左拐 +{ + speed = 20; + LF_motor_back (); + LR_motor_back (); + RF_motor_go (); + RR_motor_go (); +} \ No newline at end of file diff --git a/car.h b/car.h new file mode 100644 index 0000000000000000000000000000000000000000..8f0e8a8511f496d8e98e1dd25806615fc58dad1d --- /dev/null +++ b/car.h @@ -0,0 +1,14 @@ +#ifndef __CAR_H_ +#define __CAR_H_ + +void car_go (); //小车向前直行 +void car_back (); //小车向后直行 +void car_stop (); //小车停止 +void car_leftgo (); //小车向前左拐 +void car_rightgo (); //小车向前右拐 +void car_leftback (); //小车向后左拐 +void car_rightback (); //小车向后右拐 +void car_leftstop (); //小车原地左拐 +void car_rightstop (); //小车原地右拐 + +#endif \ No newline at end of file diff --git a/main(2).c b/main(2).c new file mode 100644 index 0000000000000000000000000000000000000000..2b415f3d42816a4745391ad30e0f7d576685b638 --- /dev/null +++ b/main(2).c @@ -0,0 +1,11 @@ +#include "car.h" + +void main () +{ + Timer0_Init(); + + while (1) + { + car_go (); + } +} \ No newline at end of file diff --git a/motor.c b/motor.c new file mode 100644 index 0000000000000000000000000000000000000000..7ee1609aa1c2fe9295ded462f69c4a211e1abbc9 --- /dev/null +++ b/motor.c @@ -0,0 +1,44 @@ +/**********电机的正反转**********/ +/* */ +/*LF左前 RF右前 LR左后 RR右后*/ +/* */ +/**********电机的正反转**********/ + +#include +//位定义 +sbit IN11 = P0^5;//左前 +sbit IN12 = P0^6; +sbit IN13 = P0^3;//右前 +sbit IN14 = P0^4; +sbit IN21 = P3^5;//左后 +sbit IN22 = P3^6; +sbit IN23 = P3^3;//右后 +sbit IN24 = P3^4; + +void LF_motor_go () //左前电机正转 +{IN11 = 0;IN12 = 1;} +void LF_motor_back () //左前电机反转 +{IN11 = 1;IN12 = 0;} +void LF_motor_stop () //左前电机停止 +{IN11 = 1;IN12 = 1;} +void RF_motor_go () //右前电机正转 +{IN13 = 0;IN14 = 1;} +void RF_motor_back () //右前电机反转 +{IN13 = 1;IN14 = 0;} +void RF_motor_stop () //右前电机停止 +{IN13 = 1;IN14 = 1;} +void LR_motor_go () //左后电机正转 +{IN21 = 1;IN22 = 0;} +void LR_motor_back () //左后电机反转 +{IN21 = 0;IN22 = 1;} +void LR_motor_stop () //左后电机停止 +{IN21 = 1;IN22 = 1;} +void RR_motor_go () //右后电机正转 +{IN23 = 1;IN24 = 0;} +void RR_motor_back () //右后电机反转 +{IN23 = 0;IN24 = 1;} +void RR_motor_stop () //右后电机停止 +{IN23 = 1;IN24 = 1;} + + + diff --git a/motor.h b/motor.h new file mode 100644 index 0000000000000000000000000000000000000000..a7b0521dc831b4ddbf7343f279ad65a646f6bb9b --- /dev/null +++ b/motor.h @@ -0,0 +1,17 @@ +#ifndef __MOTOR_H_ +#define __MOTOR_H_ + +void LF_motor_go (); //左前电机正转 +void LF_motor_back (); //左前电机反转 +void RF_motor_go (); //右前电机正转 +void RF_motor_back (); //右前电机反转 +void LR_motor_go (); //左后电机正转 +void LR_motor_back (); //左后电机反转 +void RR_motor_go (); //右后电机正转 +void RR_motor_back (); //右后电机反转 +void LF_motor_stop (); //左前电机停止 +void RF_motor_stop (); //右前电机停止 +void LR_motor_stop (); //左后电机停止 +void RR_motor_stop (); //右后电机停止 + +#endif \ No newline at end of file