📄 practice.c
字号:
#include<stdio.h>
#include<at89x52.h>
#include<absacc.h>
#define uchar unsigned char
#define uint unsigned int
#define WRCMDR XBYTE[0x0800]
#define WRDATAR XBYTE[0x0a00]
#define RDCMDR XBYTE[0x0900]
#define RDDATAR XBYTE[0x0b00]
#define WRCMDL XBYTE[0x0400]
#define WRDATAL XBYTE[0x0600]
#define RDCMDL XBYTE[0x0500]
#define RDDATAL XBYTE[0x0700]
#define BUSY 0x80
uchar idata left[]={0x20,0x20,0x20,0x20,0x4c,0x45,0x46,0x54,0x20,0x20};
uchar idata right[]={0x20,0x20,0x20,0x20,0x52,0x49,0x47,0x48,0x54,0x20};
uchar idata forward[]={0x20,0x20,0x46,0x4f,0x52,0x57,0x41,0x52,0x44,0x20};
uchar idata stop[]={0x20,0x20,0x20,0x20,0x53,0x54,0x4f,0x50,0x20,0x20};
uchar idata reverse[]={0x20,0x20,0x52,0x45,0x56,0x45,0x52,0x53,0x45,0x20};
uchar idata circle[]={0x20,0x20,0x20,0x43,0x49,0x52,0x43,0x4c,0x45,0x20};
uchar idata barrier[]={0x20,0x20,0x42,0x61,0x72,0x72,0x69,0x65,0x72,0x20};
void delay5ms()
{int i,j;
for(i=0;i<5;i++)
for(j=0;j<80;j++);
}
void delay2s()
{int i,j;
for(i=0;i<2000;i++)
for(j=0;j<80;j++);
}
void waitl()
{
while(RDCMDL&BUSY);
}
void waitr()
{
while(RDCMDR&BUSY);
}
void wrcmdl(uchar cmd)
{waitl();
WRCMDL=cmd;}
void wrdatal(uchar DATA)
{waitl();
WRDATAL=DATA;}
void wrcmdr(uchar cmd)
{waitr();
WRCMDR=cmd;}
void wrdatar(uchar DATA)
{waitr();
WRDATAR=DATA;}
void display(uchar *direction)
{uint i;
wrcmdl(0xe0);
delay5ms();
waitl();
wrcmdr(0xe0);
delay5ms();
waitr();
wrcmdl(0x3f);
delay5ms();
waitl();
wrcmdr(0x3f);
delay5ms();
waitr();
wrcmdl(0xb8);
delay5ms();
waitl();
wrcmdr(0xb8);
delay5ms();
waitr();
wrcmdl(0x40);
delay5ms();
waitl();
wrcmdr(0x40);
delay5ms();
waitr();
for (i=0;i<5;i++)
{wrdatal(direction[i]);
waitl();
wrdatar(direction[i+4]);
waitr();}
}
void turnleft(void)
{P2_7=1;
P2_6=1;
P2_5=1;
P2_4=0;
delay5ms();}
void turnright(void)
{P2_7=1;
P2_6=0;
P2_5=1;
P2_4=1;
delay5ms();}
void goforward(void)
{P2_7=1;
P2_6=0;
P2_5=1;
P2_4=0;
delay5ms();}
void keepstop(void)
{P2_7=1;
P2_6=1;
P2_5=1;
P2_4=1;
delay5ms();}
void revers(void)
{P2_7=0;
P2_6=1;
P2_5=0;
P2_4=1;
delay5ms();}
void trcircle(void)
{P2_7=1;
P2_6=0;
P2_5=1;
P2_4=1;
delay2s();}
void timeout(void)
{RCAP2H=255;
RCAP2L=205;
T2MOD=2;
T2CON=19;
}
void avoidbar(void)
{ //while(1)
timeout();
{if((P1_5==1)&(P1_6!=1))
{turnleft();
}
else {if((P1_5==1)&(P1_6==1))
{revers();
delay5ms();
}
else {if(P1_5==0)
{goforward();
}
}
}
}
}
void track(void)
{if(P1_2==1)
{turnleft();
display(left);
}
else {if(P1_4==1)
{turnright();
display(right);
}
else {if(P1_3==1)
{goforward();
display(forward);
}
else
{keepstop();
display(stop);
}
}
}
}
void main(void)
{if(P1_7==1)
{display(barrier);
avoidbar();
}
else {if(P1_1==1)
{trcircle();
display(circle);
}
else track();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -