?? simple_samll_car.c
字號:
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
xdata unsigned char T2MOD _at_ 0xf500;
#define state1 0x5f//前進
#define state2 0x4f//右轉(zhuǎn)
#define state3 0x1f//左轉(zhuǎn)
#define state4 0x0f//后退
#define state5 0xff//停車
char code led_code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
char idata dis_bit[4]={0x0e,0x0d,0x0b,0x07};
char data dis_data[4]={0x00,0x00,0x00,0x00};
sbit en_l=P2^5;
sbit con_l=P2^6;
sbit en_r=P2^7;
sbit con_r=P2^4;
sbit led_cs=P1^2;
sbit ir_l=P1^0;
sbit ir_r=P1^1;
sbit ir_m=P1^3;
sbit Beep=P1^4;
sbit deng=P3^0;
sbit infrare=P3^1;
sbit ll=P1^5;
sbit mm=P1^6;
sbit rr=P1^7;
//sbit CLOCK=P1^7; /*2543時鐘*/
//sbit D_IN=P1^6 ; /*2543輸入*/
//sbit D_OUT=P1^5; /*2543輸出*/
//sbit _CS=P3^5; /*2543片選*/
uchar metal=0;
uint sum1=0;
uint sum2=0;
uint sum3=0;
uint sum=0;
uchar pwm=0;
uchar pwm_slow=0;
uchar slow=0;
uchar count=0;
uint sec=0;
uint sec5=0;
void delay1ms(int t)
{
int i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++)
;
}
void display(uint m,uchar *p,uchar n) //數(shù)碼管顯示
{ uchar k;
dis_data[0]=m%10;
dis_data[1]=(m%100)/10;
dis_data[2]=m/100;
dis_data[3]=metal;
if(dis_data[2]==0)
dis_data[2]=0x0a;
for(k=0;k<n;k++)
{
if(k==1)
{
P2=dis_bit[k]|(P2&0XF0);
P0 = led_code[p[k]]&0x7F;
delay1ms(1);
P0=0xff;
}
else
{
P2=dis_bit[k]|(P2&0XF0);
P0 = led_code[p[k]];
delay1ms(1);
P0=0xff;
}
}
}
void xunji() //循跡
{
TR0=1;
TR1=1;
P2=state1;
if((ir_l==0)&&(ir_r==1)&&(ir_m==1))
{
P2=state3;
delay1ms(3);
if(ir_m==0)
P2=state1;
}
if((ir_l==1)&&(ir_r==0)&&(ir_m==1))
{
P2=state2;
delay1ms(3);
if(ir_m==0)
P2=state1;
}
if((ir_l==1)&&(ir_r==1)&&(ir_m==0))
{
P2=state1;
}
}
void stop() //停車
{
P2=state5;
en_l=1;
en_r=1;
TR0=0;
}
void BEEP()
{
//led_cs=1;
//deng=1;
//Beep=1;
delay1ms(100);
//led_cs=1;
//deng=0;
Beep=1;
}
void qianjin()//前進
{
TR0=1;
//TR1=1;
P2=state1;
if(infrare==0)
{
stop();
delay1ms(500);
P2=state4;
delay1ms(500);
}
P2=state3;
delay1ms(50);
P2=state1;
delay1ms(500);
P2=state2;
delay1ms(50);
if(infrare==0)
{
P2=state3;
delay1ms(50);
P2=state1;
delay1ms(500);
P2=state2;
delay1ms(50);
}
else
P2=state1;
}
//AD延時函數(shù)
/*void delay_ad(uchar n)
{
uchar i;
for(i=0;i<n;i++)
{
_nop_();
}
}
uint read2543(uchar port) //AD程序
{
uint ad=0,kk;
CLOCK=0;
_CS=0;
port<<=4;
for(kk=0;kk<12;kk++)
{
if(D_OUT) ad|=0x01;
D_IN=(bit)(port&0x80);
CLOCK=1;
delay_ad(4);
CLOCK=0;
delay_ad(4);
port<<=1;
ad<<=1;
}
_CS=1;
ad>>=1;
return(ad);
} */
void xunguang() //尋光函數(shù)
{
if((ll==1)&&(mm==1)&&(rr==1))
P2=state1;
if((ll==1)&&(mm==1)&&(rr==0))
{
P2=state2;
delay1ms(10);
}
if((ll==1)&&(mm==0)&&(rr==1))
P2=state1;
if((ll==1)&&(mm==0)&&(rr==0))
P2=state2;
delay1ms(5);
if((ll==0)&&(mm==1)&&(rr==1))
{
P2=state3;
delay1ms(10);
}
if((ll==0)&&(mm==1)&&(rr==0))
P2=state1;
if((ll==0)&&(mm==0)&&(rr==1))
{
P2=state3;
delay1ms(5);
}
if((ll==0)&&(mm==0)&&(rr==0))
{
slow=0;
P2=state1;
}
}
void main()
{
TMOD=0x11;
TH0=0xff;
TL0=0x90;
TH1=0xd8;
TL1=0xf0;
/* T2MOD=0x00;
T2CON=0x00;
TH2=0x00;
TL2=0x00;
RCAP2H=0x00;
RCAP2L=0x00;
ET2=1;
TR2=1;*/
EA=1;
EX0=1;
IT0=1;
PX0=1;
ET0=1;
ET1=1;
deng=0;
Beep=0;
while(1)
{
xunji();
display(sec,dis_data,4);
BEEP();
/*if((metal!=0)&&(metal!=4))
{
led_cs=1;
deng=1;
Beep=1;
delay1ms(100);
led_cs=0;
deng=0;
Beep=0;
}
/* TR2=0;
sum1=TL2;
sum2=TH2*256;
sum3=sum2+sum1;
TH2=0x00;
TL2=0x00;
TR2=1;*/
if(metal==4)
break;
}
sec5=sec;
while((sec-sec5)<=50)
{
stop();
display(sec,dis_data,4);
Beep=~Beep;
}
while(1)
{
qianjin();
if(infrare==1)
xunguang();
if((ir_l==0)&&(ir_m==0)&&(ir_r==0))
break;
}
P2=state4;
delay1ms(50);
while(1)
{
stop();
display(sec,dis_data,4);
}
}
void intt0() interrupt 0
{
metal++;
}
void timer0() interrupt 1
{
TH0=0xff;
TL0=0x90;
if(slow==0)
{
pwm++;
if(pwm<=60)
en_l=0;
else
en_l=1;
if(pwm<=60)
en_r=0;
else
en_r=1;
if(pwm>100)
pwm=0;
}
if(slow==1)
{
pwm_slow++;
if(pwm_slow<=30)
en_l=0;
else
en_l=1;
if(pwm_slow<=30)
en_r=0;
else
en_r=1;
if(pwm_slow>100)
pwm_slow=0;
}
}
void timer1() interrupt 3
{
TH1=0xd8;
TL1=0xf0;
count++;
if(count==10)
{
sec++;
count=0;
}
}
/*void timer2() interrupt 5
{ TF2=0;
sum++;
} */
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -