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

📄 m8-红外线遥控小车.c

📁 这是一个红外遥控小车的程序
💻 C
字号:
/*****************************************************************************
红外线遥控小车,电压最好达到5V
PD0、PD1——方向轮
PD2、PD3——驱动轮
PD4 ————红外发射
PD6、PD7——红外接收
******************************************************************************/
#include <iom8v.h>
#include <macros.h>
#define  KEY (PIND&0X80)
#define  LEFT    PORTD&=0XFC;PORTD|=0X01
#define  RIGHT   PORTD&=0XFC;PORTD|=0X02
#define  GO  	 PORTD&=0XF3;PORTD|=0X04
#define  BACK 	 PORTD&=0XF3;PORTD|=0X08
#define  STOP  	 PORTD&=0XF0

unsigned int data1=0,data2=0;
char ks=0;

void port_init(void)
{  
 PORTD = 0xE0;
 DDRD  = 0x1F;
}

void delay_100us(int t)//100微秒延时
{
 int x;
 for(t;t>0;t--)
 for(x=102;x>0;x--);
}

void begain(void)			 //启始
{
 char i=0,j=0;
 ks=0;
  while(KEY!=0)//等待200ms
  		{
		 delay_100us(10);//1ms
		 j++;
		 if(j>500){ks=0;break;}//用于连发码的判断
		}
  j=0;
  while(KEY==0)//引导低电平,或连发低电平
  		{
		 delay_100us(1);
		 j++;
		 if(j>50)ks|=1;						//BIT1引导低电平
		 if(j>100){ks=0;break;}
		 }
  j=0;
  if((ks&0x01)!=0)
  		{
  		 while(KEY!=0)//引导高电平,或连发高电平
		 {
		  delay_100us(1);
		  j++;		 
		  if(j>200){ks=0;break;}
		 }
		 if(j>15&&j<25){ks&=0XFD;ks|=4;}			//BIT3连发
		 if(j>25){ks&=0XFB;ks|=2;}	  			//BIT2引导
		}  											
  
}

unsigned int scan(void)
{
 unsigned int data=0;
 char i,j;
 for(i=0;i<16;i++)
 {
  j=0;
  while(KEY==0)
  	{
	 delay_100us(1);
	 j++;
	 if(j>20)return 0;
	}
  j=0;
  while(KEY!=0)
  	{
	 delay_100us(1);
	 j++;
	 if(j>6)data|=1<<i;
	 if(j>20)return 0;
	}
 }
 return data;
}

char check(unsigned int data)//校验
{
 char i,j;
 i=data&0XFF;
 j=(data>>8)&0XFF;
 if(i+j==255)
 	return 1;
 return 0;
}

void main()
{
 
 char i=0,j=0,k=0,t=0;
 port_init();
 while(1)
 {
  begain();
  if((ks&0x03)==3)
  	{
	data1=scan();
	data2=scan();
	}
	
  if(check(data2)==1)
  k=data2&0XFF;
 if(ks!=0)
  {
   t=5;   
  }		 //是否连发
  if(t>0)t--;
  if(ks==0)k=0;
  switch (k)
  {
   case 0:STOP;break;
   case 1:GO;break;
   case 2:BACK;break;
   case 3:GO;LEFT;break;
   case 4:GO;RIGHT;break;
   case 5:BACK;LEFT;break;
   case 6:BACK;RIGHT;break;
  }
  delay_100us(300);
 
 }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -