求一红外避障程序,要求精简,用stc12c5a60s2,22.1184M晶振

2024-12-28 08:21:03
推荐回答(2个)
回答1:

#include
#define uint unsigned int
#define uchar unsigned char
#include
#define uint unsigned int
#define uchar unsigned char
uchar i=0,j=0,k,temp,a;
void delay()
{
TMOD=0x01;
TH0=(65536-1840)/256;
TL0=(65536-1840)%256;
ET0=1;
EA=1;
TR0=1;
while(!TF0);
TF0=0;
TR0=0;
}
sbit P10=P1^0;//循迹传感器最右有测得信号 低电平有效
sbit P11=P1^1;//循迹传感器次右有测得信号
sbit P13=P1^2;//循迹传感器次左有测得信号
sbit P14=P1^3;//循迹传感器最左有测得信号
sbit IN1=P0^0 ;
sbit IN2=P0^1 ;
sbit IN3=P0^2 ;
sbit IN4=P0^3 ;
void init()
{ TMOD=0x01;
TH0=(65536-1000)/256;//1ms
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TR0=1;
}
void zuo()//左走
{
IN1=0;
IN2=1;
IN3=1;
IN4=0;
}
void you()//右走
{
IN1=1;
IN2=0;
IN3=0;
IN4=1;
}
void zhi()//直走
{
IN1=0;
IN2=1;
IN3=0;
IN4=1;
}
void main()
{ init();
while(1)
{ };
}
void time0() interrupt 1
{ TH0=(65536-9175)/256;//1ms
TL0=(65536-9175)%256;
temp=(P1|0xf0);
switch(temp)
{
case 0xf0:for (a=10;a>0;a--){delay();};zuo();break;
case 0xf1:for (a=30;a>0;a--){delay();};you();break;
case 0xf3:for (a=30;a>0;a--){delay();};zuo();break;
case 0xf7:for (a=5;a>0;a--){delay();};zuo();break;
case 0xf8:for (a=30;a>0;a--){delay();};you();break;
case 0xfb:for (a=5;a>0;a--){delay();};zuo();break;
case 0xfc:for (a=30;a>0;a--){delay();};you();break;
case 0xfd:for (a=5;a>0;a--){delay();};you();break;
case 0xfe:for (a=5;a>0;a--){delay();};you();break;
case 0xff:zhi();break;
default : break;
}
}

回答2:

你不把硬件电路给出来,怎么写....