⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 practice.c

📁 基于C-51单片机的智能机器人C程序
💻 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 + -