楼主程序来了,根据网上的程序改的,帮我捋一捋,谢了!
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit out1=P2^0;
sbit out2=P2^1;
sbit out3=P2^2;
sbit out4=P2^3;
sbit pwmy=P2^4;
sbit pwmz=P2^5;
sbit yh=P0^0;
sbit zh=P0^1;
sbit yq=P0^2;
sbit zq=P0^3;
uchar num = 0;
uchar time; // 定义占空比的变量
void inti()
{
pwmy=pwmz=0;//初始化输出I/O,将其清0
TMOD=0x22;//设置两个定时器,工作方式2,即8位自动重装
TL0=206;//TL0=256-t*fosc/12=255-1/20KHz*12/12MHz=256-50*1us=206,定时期0工作模式2下TL0作为计数器,定时器0 50ms溢出一次并自动重装
TH0=206;//定时期0工作模式2下TH0作为自动重装初值,即TL0溢出时,TH0中的数据自动重装到TL0中
TL1=223;//定时器1装初值
TH1=223;//定时器1重装值设定
ET0=1;//开定时器0中断
ET1=1;//开定时器1中断
EA=1;//开总中断
TR0=TR1=1;//启动定时器0和1
}
void delay()
{
uint a;
for(a=0;a<100;a++);
}
void zz()
{
out1 = 0;
out2 = 1;
out3 = 0;
out4 = 0;
}
void yz()
{
out1 = 0;
out2 = 0;
out3 = 1;
out4 = 0;
}
void qj()
{
out1 = 0;
out2 = 1;
out3 = 1;
out4 = 0;
}
void ht()
{
out1 = 1;
out2 = 0;
out3 = 0;
out4 = 1;
}
void tz()
{
out1 = 0;
out2 = 0;
out3 = 0;
out4 = 0;
}
void jiance()
{
uchar t;
if((zq==1)&&(yq==1))//正前方无障碍
{
t=0;
}
else
if((zq==0)&&(yq==1))//左前方有障碍
{
t=1;
}
else
if((zq==1)&&(yq==0))//右前方有障碍
{
t=2;
}
if((zq==0)&&(yq==0))//正前方有障碍
{
t=3;
}
switch(t)
{
case(0):qj();delay();
break;
case(1):tz();delay();yz();
break;
case(2):tz();delay();zz();
break;
case(3):tz();delay();ht(); delay();zz();
break;
}
}
void tim0() interrupt 1
{
TR0=0;//赋初值时,关闭定时器
TH0=0xff;//(65536-10)/256;//赋初值定时
TL0=0xf7;//(65536-10)%256;//0.01ms
TR0=1;//打开定时器
time++;
if(time>=1000)//1khz</span>
time=0;
if(time<=40)//占空比%30,可改</span>
pwmz=1;
else pwmz=0;
}
/*定时器1中断服务程序
**************************************/
void T1_time() interrupt 3
{
TR0=0;//赋初值时,关闭定时器
TH0=0xff;//(65536-10)/256;//赋初值定时
TL0=0xf7;//(65536-10)%256;//0.01ms
TR0=1;//打开定时器
time++;
if(time>=1000)//1khz</span>
time=0;
if(time<=40)//占空比%30,可改</span>
pwmy=1;
else pwmy=0;
}
//主程序
void main()
{
inti();
delay();
while(1)
{
jiance();
}
}