#include<reg52.h>
#define uchar unsigned char;
#define uint unsigned int;
uchar biaozhi=0,shujucc=0,ting=0,shuju;
sbit in1=P1^0;
sbit in2=P1^1;
sbit in3=P1^2;
sbit in4=P1^3;
sbit in5=P1^4;
sbit in6=P1^5;
sbit in7=P1^6;
sbit in8=P1^7;
delay(unsigned char n)//11.0592m下延時 n ms。
{
unsigned char i,j;
for(i=n;i>0;i--)
{
for(j=110;j>0;j--)
{
;
}
}
}
void init()//初始化子程序
{
TMOD=0x20;//定時器1設定為方式2,8位數據自動從裝
TH1=0xfd;//對定時器賦值,高8位與低8位相同
TL1=0xfd;//波特率定為9600
TR1=1;//打開定時器1
SM0=0;//設置串口工作方式1
SM1=1;
REN=1;//允許串口接收
EA=1;//開總中斷
ES=1;//打開串口中斷
}
void qianjin()//前進函數
{
in1=0;//左后輪前進
in2=1;
in3=0;//右后輪前進
in4=1;
in5=1;//右前輪前進
in6=0;
in7=1;//左前輪前進
in8=0;
delay(1);
}
void houtui()//后退函數
{
in1=1;//左后輪后退
in2=0;
in3=1;//右后輪后退
in4=0;
in5=0;//右前輪后退
in6=1;
in7=0;//左前輪后退
in8=1;
delay(1);
}
void tingzhi()
{
in1=0;//左后輪停止
in2=0;
in3=0;//右后輪停止
in4=0;
in5=0;//右前輪停止
in6=0;
in7=0;//左前輪停止
in8=0;
}
void youzhuan()
{
in1=1;//左后輪后退
in2=0;
in3=0;//右后輪前進
in4=1;
in5=0;//后退
in6=1;
in7=1;//前進
in8=0;
delay(1);
}
void zuozhuan()
{
in1=0;//左后輪前進
in2=1;
in3=1;//右后輪后退
in4=0;
in5=1;//前進
in6=0;
in7=0;//后退
in8=1;
delay(1);
}
void jiasu()
{
}
void main()
{
init();
while(1)
{
if(shuju=='A')//如果數據為0x01,執(zhí)行前進函數
{
qianjin();
delay(5);
tingzhi();
}
if(shuju=='B')//如果數據為0x02,執(zhí)行后退函數
{
houtui();
delay(5);
tingzhi();
}
if(shuju=='C')//如果數據為0x03,執(zhí)行向左轉
{
zuozhuan();
delay(5);
tingzhi();
}
if(shuju=='D')//如果數據為0x04,執(zhí)行向右轉
{
youzhuan();
delay(5);
tingzhi();
}
if(shuju=='F')//如果數據為0x05,執(zhí)行停止
{
tingzhi();
delay(5);
tingzhi();
}
/*
switch(shuju[2])
{
case 'A': qianjin();break;
case 'B': houtui();break;
case 'C': zuozhuan();break;
case 'D': youzhuan();break;
case 'F': tingzhi();break;
} */
}
}
void chuankou() interrupt 4//串口中斷服務
{
RI=0;
ting=0; //重新打開串口中斷
shuju=SBUF; //提取串口數據
/*if(RI){
RI=0;
shuju[shujucc]=SBUF;
shujucc++;
if(shujucc==3) shujucc=0;
}*/
}
|