Wifi小车之 - 51单片机红外小车篇

本文记录了一位作者使用51单片机制作红外遥控小车的过程,包括购买材料、红外遥控原理及代码实现。通过修改红外遥控器的例程,实现了对小车的控制,如前进、后退、左右转弯等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2011-10-27


单片机熟悉了,自然就要开始做小车了。

准备工作当然是淘宝啦,买了一个3轮到小车底盘32元,L298N双电机控制电路板22元,还有一些扎带、铜柱、电池盒等,都是很便宜的东西。

红外只有1条数据线,十分简单,就从红外遥控开始。把红外的例程改一下,就成了红外遥控的程序了。

这里有2个小插曲,我放上车子的是6块钱的最小板(其实就是把IO引出来,加个晶振),P0没有上拉电阻,所以不能连电机控制板,改用P1就好了。还有对单片机编程不熟,main()函数里一定要加一个while(1){}的死循环,不然程序马上就结束了(很菜是吧:) )。

这里要说明一下的是红外的信号不是连续的,所以是按一下就执行某个动作,要停止还得按停止按键。

先在电脑上测试程序,测试好后,把4个充电电池装到电池盒,同时给51单片机和电机控制板供电,搞定。开车啦。

51单片机程序代码

/*

IN1 > P10

IN2 > P11

IN3 > P12

IN4 > P13

*/

 

/*预处理命令*/

#include<reg52.h>    //包含单片机寄存器的头文件

#include<intrins.h> //包含_nop_()函数定义的头文件

#define uchar unsigned char

#define uint unsigned int

#define motor P1

 

/* 函数申明 -----------------------------------------------*/

void delay(uchar x);

 

/* 变量定义 -----------------------------------------------*/

sbit IRIN=P3^2; //红外数据线

uchar IRCOM[7];

 

 

/*

********************************************************************************

** 函数名称 : main(void)

** 函数功能 : 主函数

********************************************************************************

*/

main()

{

IRIN=1;     //I/O口初始化

EA=1;

EX0=1;//中断0

 

motor=0xff;

 

while(1){

}

}

 

/*

********************************************************************************

** 函数名称 : delay(uchar x)

** 函数功能 : 延时函数

********************************************************************************

*/

void delay(uchar x)    //x*0.14MS

{

uchar i;

while(x--)

{

for(i=0;i<13;i++);

}

}

 

/*********************************************************/

 

/*

********************************************************************************

** 函数名称 : IR_IN() interrupt 0 using 0

** 函数功能 : 信号外部中断函数功能

********************************************************************************

*/

void IR_IN() interrupt 0 using 0

{

uchar j,k,N=0;

 

EX0=0;   

delay(15);

if(IRIN==1) 

EX0=1;

return;

                              //确认IR信号出现

while(!IRIN)             //等IR变为高电平,跳过9ms的前导低电平信号。

    {

delay(1);

}

 

for(j=0;j<4;j++)         //收集四组数据

for (k=0;k<8;k++)        

{

while (IRIN)          

{

delay(1);

}

while (!IRIN)         

     {

delay(1);

}

     while(IRIN)          

{

delay(1);

N++;           

if(N>=30)

{

EX0=1;

return;

               

      }                                

     IRCOM[j]=IRCOM[j] >> 1;              

     if(N>=8)

{

IRCOM[j]=IRCOM[j] | 0x80;

     N=0;

}

}

if (IRCOM[2]!=~IRCOM[3])

{

EX0=1;

 return; 

}

 

IRCOM[5]=IRCOM[2] & 0x0F;     //取键码的低四位

IRCOM[6]=IRCOM[2] >> 4;       //右移4次,高四位变为低四位

 

if(IRCOM[5]>9)

    {

IRCOM[5]=IRCOM[5]+0x37;

}

else

IRCOM[5]=IRCOM[5]+0x30;

    

if(IRCOM[6]>9)

    {

IRCOM[6]=IRCOM[6]+0x37;

}

else

IRCOM[6]=IRCOM[6]+0x30;

/*******************遥控信号功能选择区*******************/

if(IRCOM[2]==0x40){//‘+’键

motor=0xf5;

}else if(IRCOM[2]==0x19){ //'-'

motor=0xfa;

}else if(IRCOM[2]==0x7){ //'<<'

motor=0xf7;

}else if(IRCOM[2]==0x9){ //'>>'

motor=0xfd;

}else if(IRCOM[2]==0x16){ //'0'

motor=0xfe;

}else if(IRCOM[2]==0x0d){ //'c'

motor=0xfb;

}else if(IRCOM[2]==0x45){ //'off'

motor=0xff;

}

EX0=1;       //退出外部中断

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值