找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8024|回复: 23
打印 上一主题 下一主题
收起左侧

用52单片机综合板自制红外遥控小车的程序

  [复制链接]
楼主
ID:1 发表于 2014-9-30 00:09 | 显示全部楼层
#include<reg52.h>     
#include "MacroandConst.h"  
#include "L298_2.h"
#include "main.h"

sbit IR=P3^2;         
uchar flag;
uchar IRcom[6];   
uint LowTime,HighTime;

/*函数功能:对4个字节的用户码和键数据码进行解码
说明:解码正确,返回1,否则返回0
出口参数:dat*/
bit DeCode(void)        
{
   
        uchar i,j;
        uchar temp;   
        for(i=0;i<4;i++)     
    {
                   for(j=0;j<8;j++)  
                   {
                     temp=temp>>1;

                             TH0=0;        
                      TL0=0;         
                     TR0=1;         
                      while(IR==0);      
                    TR0=0;      
                     LowTime=TH0*256+TL0;   
                     TH0=0;        
                      TL0=0;        
                     TR0=1;      
                     while(IR==1);      
                      TR0=0;      
                     HighTime=TH0*256+TL0;   
                      if((LowTime<390)||(LowTime>680))
                           return 0;               
                          if((HighTime>450)&&(HighTime<670))               
                               temp=temp&0x7f;            
                         if((HighTime>1400)&&(HighTime<1890))
                        temp=temp|0x80;
                   }                 
                   IRcom[i]=temp;

     }           
          if(IRcom[2]=~IRcom[3])
          {                IRcom[5]=IRcom[2]&0x0f;
                        IRcom[4]=IRcom[2]>>4;
                        if(IRcom[4]>9) {IRcom[4]=IRcom[4]+0x37;}
                        else {IRcom[4]=IRcom[4]+0x30;}
                        if(IRcom[5]>9) {IRcom[5]=IRcom[5]+0x37;}
                        else {IRcom[5]=IRcom[5]+0x30;}
          }
          return 1;   
}
/***********************************************/
//红外感应处理程序,用的键盘值是本人用于做LED灯
//调控的遥控器中的7个按键,具体看遥控器。
/***********************************************/
void Function(void)
{
        TR1 = 1;
        switch(IRcom[2])
        {
                case 0x5a: Go();break;  //向上,对应小车的前进
                case 0x1c: Stop();break; //中间,对应小车的停止
                case 0x18: Right_Run();break;  //向下,对应小车的后退
                case 0x52: Left_Run();break; //向左,对应小车的左转
               case 0x08: Back();break; //向左,对应小车的右转
                case 0x42: Dangwei += 1;
                               if(Dangwei>10) Dangwei=10;break;
                case 0x4a: Dangwei -= 1;
                               if(Dangwei<=1) Dangwei=1;break;
        }
}
/*函数功能:红外线触发的外中断处理函数*/
void Int0(void) interrupt 0 using 0
{
     
         EX0=0;      
            TH0=0;     
           TL0=0;   
           TR0=1;
     
           while(IR==0);     
            TR0=0;           
           LowTime=TH0*256+TL0;  
           TH0=0;     
           TL0=0;   
            TR0=1;   
           while(IR==1);
            TR0=0;     
           HighTime=TH0*256+TL0;
     if((LowTime>8400)&&(LowTime<9600)&&(HighTime>3900)&&(HighTime<5100))
            {
       if(DeCode()==1)
           {       
            Function();  
                }  
     
    }
    EX0=1;   
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表