📄 all.c
字号:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
unsigned char AD();
void disp();
void disp3();
void straight();
void stop();
void left(uchar);
void right(uchar);
void init();
void delay1(uchar);
sbit we1=P2^0;
sbit we2=P2^1;
sbit we3=P2^2;
sbit we4=P2^3;
sbit enleft=P2^4;
sbit enright=P2^5;
sbit inleft=P2^6;
sbit inright=P2^7;
sbit g1=P1^0;
sbit g5=P1^4;
uchar num;
uchar flag=0;
uchar time_s=1;
uchar gdstadus;
uchar zero;
unsigned char i,temp;
uchar code tabledu[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92};
sbit clk=P1^5;
sbit cs=P1^6;
sbit ddata=P1^7;
//void delay() { ;}
void delay2us() { ; ;}
void delay4us() { delay2us(); }
void delay17us() {delay4us();delay4us();delay4us();delay4us();}
void init()
{
EA=1;
ET0=1;
TR0=1;
}
unsigned char AD()
{
unsigned char angledata;
cs=1;
cs=0;
cs=1;
clk=0;
delay4us();
cs=0;
delay4us();
for(i=0;i<8;i++)
{
clk=1;
delay4us();
clk=0;
delay4us();
}
cs=1;
delay17us();
cs=0;
delay4us();
temp=ddata;
angledata=angledata|temp;
angledata=angledata<<1;
//clk=1;
for(i=0;i<6;i++)
{
clk=1;
delay4us();
clk=0;
delay4us();
temp=ddata;
angledata=angledata|temp;
angledata=angledata<<1;
}
clk=1;
delay4us();
clk=0;
delay4us();
temp=ddata;
angledata=angledata|temp;
// angledata=angledata<<1;
clk=1;
delay4us();
clk=0;
delay4us();
cs=1;
// disp();
return(angledata);
}
void disp()
{
TMOD=0x11;
TH0=(65536-46000)/256;
TL0=(65536-46000)%256;
num=0;
while(1)
{
if(num==20)
{
time_s++;
num=0;
}
P0=tabledu[time_s];
we1=0;
delay1(1);
we1=1;
P0=tabledu[0];
we2=0;
delay1(1);
we2=1;
P0=tabledu[0];
we3=0;
delay1(1);
we3=1;
// P0=tabledu[0];
// we4=0;
// delay1(1);
if(time_s==6)
{
time_s=1;
break;
}
}
}
void disp3()
{
TMOD=0x11;
TH0=(65536-46000)/256;
TL0=(65536-46000)%256;
num=0;
while(1)
{
if(num==20)
{
time_s++;
num=0;
}
P0=tabledu[time_s];
we1=0;
delay1(1);
we1=1;
P0=tabledu[0];
we2=0;
delay1(1);
we2=1;
P0=tabledu[0];
we3=0;
delay1(1);
we3=1;
// P0=tabledu[0];
// we4=0;
// delay1(1);
if(time_s==4)
{
time_s=1;
break;
}
}
}
void stop()
{
enleft=0;
enright=0;
}
void straight()
{
enleft=1;
enright=1;
}
void left(uchar fudu)
{
enleft=0;
enright=1;
delay1(fudu);
}
void right(uchar fudu)
{
enleft=1;
enright=0;
delay1(fudu);
}
void main()
stop();
init();
disp3();
zero=AD();
delay1(50);
straight();
while(1)
{
uchar angle=0;
// delay1(100);
angle=AD();
delay1(50);
// P2=angle;
if(flag<5)
{
if((angle<=(zero+1))&&(flag==0))
{
delay1(10);
if((angle<=(zero+1))&&(flag==0))
{
// straight();
flag++;
disp3();
//disp();
}
}
if((angle>=(zero+2))&&(flag==1))
{
delay1(10);
if((angle>=(zero+2))&&(flag==1))
{
// straight();
flag++;
disp3();
}
}
if((angle<=(zero+1))&&(flag==2))
{
delay1(10);
if((angle<=(zero+1))&&(flag==2))
{
// stop();
disp();
// straight();
flag++;
}
}
if((angle>=(zero+2))&&(flag==3))
{
delay1(10);
if((angle>=(zero+2))&&(flag==3))
{
// straight();
flag++;
// disp();
}
}
if((angle<=(zero+1))&&(flag==4))
{
delay1(10);
if((angle<=(zero+1))&&(flag==4))
{
// stop();
disp();
// straight();
flag++;
// while(1);
}
}
}
else
{
straight();
gdstadus=P1|0xe0;
if(g1==1)
right(100);
if(g5==1)
left(100);
switch(gdstadus)
{
case 0xe4: straight();break;
case 0xee: straight();break;
case 0xe6: right(50);break;
case 0xec: left(50);break;
case 0xe2: right(75);break;
case 0xe8: left(75);break;
case 0xff: stop(); while(1);break;
default: break;
}
}
}
}
void delay1(uchar time)
{
uchar i,j;
for(i=time;i>0;i--)
for(j=200;j>0;j--);
}
void time0() interrupt 1
{
TH0=(65536-46080)/256;
TL0=(65536-46080)%256;
num++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -