51循迹小车(PWM)

五路循迹小车
#include "reg51.h"
sbit l1=P1^1;//左电机
sbit l2=P1^2;
sbit r1=P1^3;//右电机
sbit r2=P1^4;

sbit g1=P3^1;//五路传感器
sbit g2=P3^2;
sbit g3=P3^3;
sbit g4=P3^4;
sbit g5=P3^5;
int l=0;
int r=0;
int t=0;
void init(){
	EA=1; //开总中断
	TMOD=0x01; //设置定时器0位工作模式1(M1,M0位0,1)
	TH0=(65536-9)/256; //装初值11.0592M晶振定时50ms数为45872
	TL0=(65536-9)%256;
	ET0=1; //开定时器0中断
	TR0=1; //启动定时器0			
}
void main(){
	init();
	while(1){
		if(g1==1&&g2==1&&g3==0&&g4==1&&g5==1){
			l=20;
			r=20;	
		}else if(g1==1&&g2==1&&g3==1&&g4==0&&g5==1){
			l=20+10;
			r=20-10;
		}else if(g1==1&&g2==0&&g3==1&&g4==1&&g5==1){
			l=20-10;
			r=20+10;
		}else if(g1==1&&g2==1&&g3==1&&(g4==0||g5==0)){
			l=20+20;
			r=20-20;
		}else if((g1==0||g2==0)&&g3==1&&g4==1&&g5==1){
			l=20-20;
			r=20+20;
		}
	}
}
void time_()interrupt 1
{
	TH0=(65536-9)/256; 
	TL0=(65536-9)%256;
	t++;
	if(l<0&&-t>=l){
		l1=0;
		l2=1;	
	}else if(l>0&&t<=l){
		l1=1;
		l2=0;
	}else{
		l1=0;
		l2=0;
	}
	if(r<0&&-t>=r){
		r1=0;
		r2=1;	
	}else if(r>0&&t<=r){
		r1=1;
		r2=0;
	}else{
		r1=0;
		r2=0;
	}
	if(t>=60){
		t=0;
	} 
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值