标题: PWM控制小车 [打印本页]
作者: CrushC 时间: 2021-10-24 14:42
标题: PWM控制小车
#include<reg52.h>
sbitrs=P0^0;
sbitrw=P0^1;
sbiten=P0^2;
sbitsensera=P1^0;
sbitsenserb=P1^1;
sbitsenserc=P1^2;
sbitsenserd=P1^3;
sbitin1=P1^4;
sbitin2=P1^5;
sbitin3=P1^6;
sbitin4=P1^7;
intleft_low,left_high,right_low,right_high;
unsignedchar leftsign,rightsign;
unsignedchar leftback,rightback;
voidtimer0init()
{
TMOD=0x01;
TH0=0x00;
TL0=0x00;
EA=1;
ET0=1;
TR0=1;
}
voidtimer0(void) interrupt 1
{
if(leftback)
{
leftsign=!leftsign;
if(!leftsign)
{
TH0 =(65536-left_low)/256;
TL0 =(65536-left_low)%256;
in1=0;
in2=0;
}
if(leftsign)
{
TH0=(65536-left_high)/256;
TL0=(65536-left_high)%256;;
in1=1; //μ1×a
in2=0;
}
}
else
{
leftsign=!leftsign;
if(!leftsign)
{
TH0=(65536-left_low)/256;
TL0=(65536-left_low)%256;
in1=0;
in2=0;
}
if(leftsign)
{
TH0=(65536-left_high)/256;
TL0=(65536-left_high)%256;;
in1=0;
in2=1;
}
}
}
voidtimer1init()
{
TMOD=0x10;
TH1=0x00;
TL1=0x00;
EA=1;
ET1=1;
TR1=1;
}
voidtimer1(void) interrupt 3
{if(rightback)
{
rightsign=!rightsign;
if(!rightsign)
{
TH1=(65536-right_low)/256;
TL1=(65536-right_low)%256;
in3=0;
in4=0;
}
if(rightsign)
{
TH1=(65536-right_high)/256;
TL1=(65536-right_high)%256;
in3=1;
in4=0;
}
}
else
{
rightsign=!rightsign;
if(!rightsign)
{
TH1=(65536-right_low)/256;
TL1=(65536-right_low)%256;
in3=0;
in4=0;
}
if(rightsign)
{
TH1=(65536-right_high)/256;
TL1=(65536-right_high)%256;
in3=0;
in4=1;
}
}
}
voidtestsenser() //×ó Ö± óò í£ oó£¨01234£©′ó1Õ D¡1Õ ÎTòaò壨310£©
{
if((sensera==0&&senserb==0&&senserc==0&&senserd==1)||(sensera==0&&senserb==1&&senserc==1&&senserd==1))// óò′ó1Õ
{
leftback=0;
rightback=1;
ET0=1;
ET1=1;
left_high=20000;
left_low=40000;
right_high=20000;
right_low=40000;
}
elseif((sensera==0&&senserb==0&&senserc==1&&senserd==1)||(sensera==0&&senserb==0&&senserc==1&&senserd==0))// óòD¡1Õ
{
leftback=0;
rightback=1;
ET0=1;
ET1=1;
left_high=20000;
left_low=40000;
right_high=10000;
right_low=40000;
}
elseif((sensera==1&&senserb==0&&senserc==0&&senserd==0)||(sensera==1&&senserb==1&&senserc==1&&senserd==0)) // ×ó′ó1Õ
{
leftback=1;
rightback=0;
ET0=1;
ET1=1;
left_high=20000;
left_low=40000;
right_high=20000;
right_low=40000;
}
elseif((sensera==1&&senserb==1&&senserc==0&&senserd==0)||(sensera==0&&senserb==1&&senserc==0&&senserd==0)) // ×óD¡1Õ
{
leftback=1;
rightback=0;
ET0=1;
ET1=1;
left_high=10000;
left_low=40000;
right_high=20000;
right_low=40000;
}
elseif(sensera==1&&senserb==1&&senserc==1&&senserd==1)// í£
{
leftback=0;
rightback=0;
ET0=0;
ET1=0;
in1=0;
in2=0;
in3=0;
in4=0;
}
else if(sensera==0&&senserb==0&&senserc==0&&senserd==0)//oóíË
{
leftback=1;
rightback=1;
ET0=1;
ET1=1;
left_high=10000;
left_low=50000;
right_high=10000;
right_low=50000;
}
else //Ö±×ß
{
leftback=0;
rightback=0;
ET0=1;
ET1=1;
left_high=10000;
left_low=50000;
right_high=20000;
right_low=50000;
}
}
voidmain()
{
timer0init();
timer1init();
while(1)
testsenser();
}
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |