#include <STC12C5A60S2.H>
#define INPUT P1
#define uchar unsigned char
#define uint unsigned int
sbit ENA=P2^0;
sbit IN1=P2^1;
sbit IN2=P2^2;
sbit IN3=P2^3;
sbit IN4=P2^4;
sbit ENB=P2^5;
void delay(uchar z);
uchar i,j,ton1,ton2,z;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=200;y>0;y--);
}
void init()
{
TMOD=0x01;
TH0=(65536-100)/256;
TL0=(65536-100)%256;
EA=1;
ET0=1;
TR0=1;
}
void turn_leftgo(uchar a,uchar b)
{
ton1=a;
ton2=b;
IN1=1;
IN2=0; //左輪正轉
IN3=1; //右輪正轉
IN4=0;
}
void turn_leftgo1(uchar a,uchar b)
{
ton1=a;
ton2=b;
IN1=0;
IN2=1; //左輪倒轉
IN3=1; //右輪正轉
IN4=0;
}
void turn_leftgo2(uchar a,uchar b)
{
ton1=a;
ton2=b;
IN1=1;
IN2=0; //左輪正轉
IN3=0; //右輪倒轉
IN4=1;
}
void xunji()
{
if(INPUT==0xC0) //1100 0000
{
turn_leftgo1(15,30);
delay(10);
turn_leftgo(15,20);}
if(INPUT==0x60) //0110 0000
{
turn_leftgo1(20,30);
delay(10);
turn_leftgo(18,20);}
else if(INPUT==0x30) //0011 0000
{
turn_leftgo(30,35);}
else if(INPUT==0x18)//0000 1100
{
turn_leftgo(30,25);}
else if(INPUT==0x06) //0000 0110
{
turn_leftgo2(30,15);
delay(7);
turn_leftgo(35,18);}
else if(INPUT==0x03) //0000 0011
{
turn_leftgo2(30,10);
delay(10);
turn_leftgo(30,15);}
else if(INPUT==0x80) //1000 0000
{
turn_leftgo1(5,20);
delay(10);
turn_leftgo(12,25);}
else if(INPUT==0x40) //0100 0000
{
turn_leftgo1(15,30);
delay(10);
turn_leftgo(13,30);}
else if(INPUT==0x20) //0010 0000
{
turn_leftgo(20,30);}
else if(INPUT==0x10) //0001 0000
{
turn_leftgo(30,30);}
else if(INPUT==0x08) //0000 1000
{
turn_leftgo(30,30);}
else if(INPUT==0x04) //0000 0100
{
turn_leftgo(30,25);}
else if(INPUT==0x02) //0000 0010
{
turn_leftgo2(20,10);
delay(10);
turn_leftgo(30,20);}
else if(INPUT==0x01) //0000 0001
{
turn_leftgo2(20,10);
delay(10);
turn_leftgo(20,10);}
else if(INPUT==0x1c) //0001 1100
{turn_leftgo(35,35);}
else if(INPUT==0x38) //0011 1000
{turn_leftgo(35,35);}
else if(INPUT==0x70) //0111 0000
{
turn_leftgo(30,35);}
else if(INPUT==0x0e) //0000 1110
{
turn_leftgo(35,30);}
else if(INPUT==0x07) //0000 0111
{
turn_leftgo2(20,10);
delay(7);
turn_leftgo(30,25);}
else if(INPUT==0xe0) //1110 0000
{
turn_leftgo1(10,20);
delay(7);
turn_leftgo1(25,30);}
}
void main()
{ ton1=30;
ton2=30;
init();
while(1)
{
xunji();
}
}
void time0()interrupt 1
{
TH0=(65536-100)/256;
TL0=(65536-100)%256;
i++;
j++;
if(i<=ton1)
ENA=1;
else ENA=0;
if(i==100)
{
ENA=1;
i=0;
}
if(j<=ton2)
ENB=1;
else ENB=0;
if(j==100)
{
ENB=1;
j=0;
}
}
|