#include<reg52.h>
//////////////////////////////////定義/////////////////////////////////////////////
#define uchar unsigned char 無符號字符型
#define uint unsigned int
uchar t,zz,yz; //周期 、左占空比、右占空比
sbit int1=P1^0; //左
sbit int2=P1^1;
sbit int3=P1^2; //右
sbit int4=P1^3;
sbit zuoled1=P1^4;
sbit youled1=P1^5;
sbit zuoled2=P1^6;
sbit youled2=P1^7;
/////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////功能函數///////////////////////////////////////
void run() //直走
{
int1=1;
int2=0;
int3=1;
int4=0;
}
void stop() //停
{
int1=0;
int2=0;
int3=0;
int4=0;
}
void left() //左轉
{
int1=0;
int2=0;
int3=1;
int4=0;
}
void right() //右轉
{
int1=1;
int2=0;
int3=0;
int4=0;
}
////////////////////////////////////////延時函數///////////////////////////////////////////////
void delay(uchar xms) //參數 xms
{
uchar a,b;
for(a=xms;a>0;a--)
for(b=110;b>0;b--);
}
//////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////初始化中斷////////////////////////////////////////////////////
void time0()
{
TMOD=0x01; //定時器0 ,方式1 (16位)
TH0=(65536-100)/256; //賦初值
TL0=(65536-100)%256;
EA=1; //中斷總開關
ET0=1; //定時器0 開關
TR0=1; //定時器0 運行控制位
}
////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////主函數///////////////////////////////////////////////////////////
void main()
{
time0(); //調用中斷
delay(10); //延時
while(1)
{
if((zuoled1==1)&&(youled1==1)&&(zuoled2==1)&&(youled2==1))
{
zz=20;
yz=20;
run();
}
if(zuoled1==0)
{
stop();
delay(1);
zz=10;
yz=0;
right();
delay(100);
}
if(youled1==0)
{
stop();
delay(1);
zz=0;
yz=10;
left();
delay(100);
}
if(zuoled2==0)
{
stop();
delay(1);
zz=15;
yz=0;
right();
delay(100);
}
if(youled2==0)
{
stop();
delay(1);
zz=0;
yz=15;
left();
delay(100);
}
if((zuoled1==0)&&(zuoled2==0))
{
stop();
delay(20);
zz=20;
yz=0;
right();
delay(300);
}
if((youled1==0)&&(youled2==0))
{
stop();
delay(20);
zz=0;
yz=20;
left();
delay(300);
}
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/
///////////////////////////////////////中斷服務函數////////////////////////////////////////////////////////
void time_0() interrupt 1
{
t++; pwm 波周期
if(t<=zz){int1=1;} 左占空比
else int1=0;
if(t<=yz) {int3=1;} 右占空比
else int3=0;
if(t>=50) {t=0;}
TH0=(65536-100)/256; 對256取模 放高8位
TL0=(65536-100)%256; 對256取余 放低8位
}
|