寻迹小车
#include <reg52.h>/*電機驅動信號引腳定義*/
sbit IN1=P2^7;
sbit IN2=P2^6;
//sbit ENA=P2^5;
sbit IN3=P2^4;
sbit IN4=P2^3;
//sbit ENB=P2^2;/*光電對管輸入信號引腳定義*/
sbit left1=P0^0;
sbit left2=P0^1;
sbit right1=P0^2;
sbit right2=P0^3;/*電機PWM信號輸出引腳定義*/
sbit left_moto_pwm=P2^5;
sbit right_moto_pwm=P2^2;/*附加引腳定義*/
sbit z=P1^1;//聲控非接觸式啟動
sbit f=P1^2;//蜂鳴器
sbit b=P0^4;//紅外避障識別/*電機運動簡便定義*/
#define left_moto_go {IN1=1,IN2=0;}
#define left_moto_back {IN1=0,IN2=1;}
#define right_moto_go {IN3=0,IN4=1;}
#define right_moto_back {IN3=1,IN4=0;}/*相關變量定義*/
unsigned char pwm_val_left=0;//valid
unsigned char push_val_left=0;
unsigned char pwm_val_right=0;
unsigned char push_val_right=0;/*延時函數*/
void delay(unsigned int k)
{
unsigned int x,y;
for(x=0;x<k;x++);
for(y=0;y<110;y++);
}/*電機控制函數*/
void run(void)
{push_val_left=20;
push_val_right=20;
left_moto_go;
right_moto_go;}//直行void stop(void)
{push_val_left=0;
push_val_right=0;
left_moto_go;
right_moto_go;}//停止void leftturn1(void)
{
push_val_left=10;
push_val_right=15;
left_moto_back;
right_moto_go;}//小左轉void rightturn1(void)
{ push_val_left=15;
push_val_right=10;
left_moto_go;
right_moto_back;}//小右轉void leftturn2(void)
{
push_val_left=10;push_val_right=20;
left_moto_back;
right_moto_go;}//大左轉void rightturn2(void)
{
push_val_left=20;
push_val_right=10;
left_moto_go;right_moto_back;}//大右轉/*電機PWM生成函數*/
void pwm_out_left_moto(void)
{if(pwm_val_left<=push_val_left)left_moto_pwm=1;
else
left_moto_pwm=0;
if(pwm_val_left>=20)
pwm_val_left=0;
}void pwm_out_right_moto(void)
{
if(pwm_val_right<=push_val_right)
right_moto_pwm=1;
else
right_moto_pwm=0;
if(pwm_val_right>=20)
pwm_val_right=0;}/*定時器中斷服務函數*/
void timer0()interrupt 1 using 2
{
TH0=(65536-92)/256;
TL0=(65536-92)%256;
pwm_val_left++;
pwm_val_right++;
pwm_out_left_moto();
pwm_out_right_moto();}/*蜂鳴器函數*/void fmq(void)
{
f=1;
delay(20);
f=0;}/*運動控制函數*/
void xunji()
{
if(left2==1&&left1==1&&right1==1&&right2==1){
run();delay(1);}//直行if(left2==0&&left1==1&&right1==1&&right2==1){
leftturn1();delay(1);}//小左轉if(left2==1&&left1==0&&right1==1&&right2==1){
leftturn2();
delay(1);
}//大左轉if(left2==0&&left1==0&&right1==1&&right2==1)
{
leftturn2();
delay(185);
run();delay(100);
}//左轉直行if(left2==1&&left1==1&&right1==0&&right2==1){rightturn1();delay(1);
}//小右轉if(left2==1&&left1==1&&right1==1&&right2==0){
rightturn2();
delay(1);}//大右轉if(left2==1&&left1==1&&right1==0&&right2==0){
rightturn2();delay(185);
run();delay(100);
}//右轉直行if(left2==0&&left1==0&&right1==0&&right2==0)
{
stop();fmq();} //停止if(b==1)
{
fmq();
}//避障
}void main() {/*定時器初始化*/TMOD=0x01;
TH0=(65536-92)/256;
TL0=(65536-92)%256;
EA=1;
ET0=1;
TR0=1;
if(z==0){
/*循環檢測狀態*/
while(1){xunji();}}}
總結
- 上一篇: 支付对接常用:关于asp rsa加密
- 下一篇: html上绑定回车事件,js/jquer