51循迹小车(PWM)

mac2026-04-16  1

五路循迹小车
#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; } }
最新回复(0)