|
主邏輯需要自己改寫
#include <reg52.h>
#include <intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
int a=0;
sbit ENA = P1^6;
sbit IN1 = P1^0;
sbit IN2 = P1^1;
sbit IN3 = P1^2;
sbit IN4 = P1^3;
sbit ENB = P1^4;
void Timer0Init();
void XunJi();
void delay(unsigned int t);
sbit zuo1 = P0^0;
sbit zuo2 = P0^1;
sbit zhong = P0^2;
sbit you1 = P0^3;
sbit you2 = P0^4;
u8 PWMCnt1 = 0;
u8 PWMCnt2 = 0;
u8 cntPWM1 = 0;
u8 cntPWM2 = 0;
void main()
{
Timer0Init();
while(1)
{
XunJi();
}
}
void Timer0Init()
{
TH0 = 0xFF;
TL0 = 0xA3;
TMOD &= 0xF0;
TMOD |= 0x01;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void TurnRight1()
{
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
cntPWM1 = 70;
cntPWM2 = 55;
}
void TurnRight2()
{
IN1 = 0;
IN2 = 1;
IN3 = 0;
IN4 = 1;
cntPWM1 = 50;
cntPWM2 = 40;
}
void TurnLeft1()
{
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
cntPWM1 = 55;
cntPWM2 = 70;
}
void TurnLeft2()
{
IN1 = 1;
IN2 = 0;
IN3 = 1;
IN4 = 0;
cntPWM1 = 40;
cntPWM2 = 50;
}
void Forward()
{
IN1 = 1;
IN2 = 0;
IN3 = 0;
IN4 = 1;
cntPWM1 = 42;
cntPWM2 = 54;
}
void Backward()
{
IN1 = 0;
IN2 = 1;
IN3 = 1;
IN4 = 0;
cntPWM1 = 30;
cntPWM2 = 30;
}
void Stop()
{
IN1 = 0;
IN2 = 0;
IN3 = 0;
IN4 = 0;
}
void XunJi()
{
unsigned char flag = 0;
if((zuo1 == 0)&&(zuo2 == 0)&&(zhong == 1)&&(you2 == 0)&&(you1 == 0)) //0 0 1 0 0
flag = 0;
if((zuo1 == 0)&&(zuo2 == 0)&&(zhong == 0)&&(you2 == 0)&&(you1 == 0)) //0 0 0 0 0
flag = 6;
// if((zuo1 == 0)&&(zuo2 == 1)&&(zhong == 1)&&(you2 == 1)&&(you1 == 0)) //0 1 1 1 0
// flag = 0;
//
//// if((zuo1== 1)&&(zuo2 == 1)&&(zhong == 1)&&(you2 == 1)&&(you1 == 1)) //1 1 1 1 1
//// {a=a+1;}
//// if(zuo1== 1)
//// {a=0;}
//
// if((zuo1 == 1)&&(zuo2 == 1)&&(zhong == 1)&&(you2 == 0)&&(you1 == 0)) //1 1 1 0 0
// flag = 1;
//
// if((zuo1 == 0)&&(zuo2 == 0)&&(zhong == 1)&&(you2 == 1)&&(you1 == 0)) //0 0 1 1 0
// flag = 2;
//
// if((zuo1 == 0)&&(zuo2 == 0)&&(zhong == 1)&&(you2 == 0)&&(you1 == 1)) //0 0 1 0 1
// flag = 2;
//
// if((zuo1 == 0)&&(zuo2 == 1)&&(zhong == 1)&&(you2 == 1)&&(you1 == 1)) //0 1 1 1 1
// flag = 3;
//
// if((zuo1 == 0)&&(zuo2 == 0)&&(zhong == 1)&&(you2 == 1)&&(you1 == 1)) //0 0 1 1 1
// flag = 3;
//
// if((zuo1 == 0)&&(zuo2 == 1)&&(zhong == 1)&&(you2 == 0)&&(you1 == 0)) //0 1 1 0 0
// flag = 4;
//
// if((zuo1 == 1)&&(zuo2 == 0)&&(zhong == 1)&&(you2 == 0)&&(you1 == 0)) //1 0 1 0 0
// flag = 4;
//
// if((zuo1 == 0)&&(zuo2 == 0)&&(zhong == 0)&&(you2 == 0)&&(you1 == 0)) //1 0 1 0 1
// flag = 0 ;
//
// if((zuo1 == 1)&&(zuo2 == 1)&&(zhong == 1)&&(you2 == 0)&&(you1 == 1)) //1 1 1 0 1
// flag = 1;
//
// if((zuo1 == 1)&&(zuo2 == 0)&&(zhong == 1)&&(you2 == 1)&&(you1 == 1)) //1 0 1 1 1
// flag = 3;
// if((zuo1 == 1)&&(zuo2 == 1)&&(zhong == 0)&&(you2 == 0)&&(you1 == 0)) //1 1 0 0 0
// flag = 2;
//
// if((zuo1 == 0)&&(zuo2 == 0)&&(zhong == 0)&&(you2 == 1)&&(you1 == 1)) //0 0 0 1 1
// flag = 4;
//
// if((zuo1 == 0)&&(zuo2 == 0)&&(zhong == 0)&&(you2 == 0)&&(you1 == 0)) //0 0 0 0 0
// flag = 5;
switch(flag)
{while(1)
case 0:Forward();break;//Ö±ÐÐ
case 1:TurnLeft1();break;//×ó¿ì
case 2:TurnLeft2();break;//×óÂý
case 3:TurnRight1();break;//ÓÒ¿ì
case 4:TurnRight2();break;//ÓÒÂý
case 5:Backward();break;//»ØÍË
case 6:Stop();break;
default:Stop();break;
}
}
void delay(unsigned int t)//ÑÓ
{
while(t--);
}
void InterruptTime0() interrupt 1
{
PWMCnt1++;
PWMCnt2++;
if(PWMCnt1 >= 200)
{
PWMCnt1 = 0;
}
if(PWMCnt1 <= cntPWM1)
{
ENA = 1;
}
else
{
ENA = 0;
}
if(PWMCnt2 >= 200)
{
PWMCnt2 = 0;
}
if(PWMCnt2 <= cntPWM2)
{
ENB = 1;
}
else
{
ENB = 0;
}
TH0 = (65536 - 50)/256;
TL0 = (65536 - 50)%256;
}
|
|