码迷,mamicode.com
首页 > 其他好文 > 详细

电动小车程序

时间:2015-01-24 18:35:38      阅读:178      评论:0      收藏:0      [点我收藏+]

标签:

  1 #include <REG52.H>
  2 //#include "红外.h"
  3 #include <intrins.h>
  4 //extern  unsigned char flag,MODEL,gears,c,rev,set_temperature;
  5 #define uchar unsigned char
  6 void delay(unsigned int x);  //x*0.14MS
  7 sbit IN1  = P2^0;         //电机方向
  8 sbit IN2  = P2^1;         //电机方向
  9 sbit IN3  = P2^2;         //电机方向
 10 sbit IN4  = P2^3;         //电机方向
 11  
 12 sbit IRIN = P3^2;         //红外接收器数据线
 13 sbit v = P2^0;
 14 uchar IRCOM[7];
 15 void IR_IN() interrupt 0 using 0
 16 {
 17   unsigned char j,k,N=0;
 18  
 19      EX0 = 0;             //关掉外部中断防止中断的再次发生进入检测引导码阶段(9ms的低电平4.5ms的高电平)
 20      delay(15);
 21      if (IRIN==1) 
 22      { EX0 =1;              
 23        return;
 24       } 
 25                            //确认IR信号出现
 26   while (!IRIN)            //等IR变为高电平,跳过9ms的前导低电平信号。
 27     {delay(1);}
 28 
 29  for (j=0;j<4;j++)         //收集四组数据
 30  { 
 31       for (k=0;k<8;k++)        //每组数据有8位
 32       {
 33            while (IRIN)            //等 IR 变为低电平,跳过4.5ms的引导高电平信号。
 34              {delay(1);}
 35             while (!IRIN)          //等 IR 变为高电平
 36              {delay(1);}
 37              while (IRIN)           
 38               {
 39                 delay(1);
 40                 N++;           
 41                 if (N>=30)
 42                      { 
 43                          EX0=1;
 44                          return;
 45                      }                  
 46               }                                        
 47              IRCOM[j]=IRCOM[j] >> 1;                  
 48              if (N>=8) {IRCOM[j] = IRCOM[j] | 0x80;}  
 49              N=0;
 50       }//end for k
 51  }//end for j
 52    
 53    if (IRCOM[2]!=~IRCOM[3])          // 判断有没有误码(有责放弃没有判断键码)
 54    { EX0=1;
 55      return; 
 56    }
 57    switch(IRCOM[2])
 58          {                                                               //       显示遥控上的字符按键 
 59           case 0x45:                           break;                     //       按下switch开关键后显示功能数组的第一个功能项
 60             case 0x46:                                        break;                     //       用来选择1602显示功能的函数                                               
 61             case 0x47:                         break;                    //        quiet用于控制声音的有无
 62             case 0x44:         // 后退                    
 63                 IN1=0;
 64                 IN2=1;
 65                 IN3=1;
 66                 IN4=0;
 67                 break;                    
 68             case 0x40:        // 前进                                        
 69                 IN1=1;
 70                 IN2=0;
 71                 IN3=0;
 72                 IN4=1;
 73                 break;                    
 74             case 0x43:         // 制动             
 75                 IN1=0;
 76                 IN2=0;
 77                 IN3=0;
 78                 IN4=0;
 79                 break;                 
 80             case 0x07:                                 break;                  //        eq为返回键,返回后回到第一个功能
 81            case 0x15:                                       break;
 82              case 0x09:                                       break;
 83              case 0x16:                                 break;
 84             case 0x19:                                 break;
 85             case 0x0d:                                break;
 86             case 0x0c:                                 break;
 87             case 0x18:                                 break;
 88             case 0x5e:                                 break;
 89             case 0x08:                                 break;
 90             case 0x1c:                                 break;
 91             case 0x5a:                                 break;
 92             case 0x42:                                 break;
 93             case 0x52:                                 break;
 94             case 0x4a:                                 break;
 95          }
 96          EX0 = 1;
 97          
 98 }
 99 
100 /**********************************************************/
101 void delay(unsigned int x)    //x*0.14MS
102 {
103  unsigned char i;
104   while(x--)
105  {
106   for (i = 0; i<13; i++) {}
107  }
108 }
109 
110 void INTN_0()//红外中断初始化
111 {
112     IRIN=1;                   //I/O口初始化
113     IE |= 0x81;                 //允许总中断中断,使能 INT0 外部中断
114     TCON |= 0x01;               //触发方式为脉冲负边沿触发
115     IP=0x20;
116 }
117 
118 void main()
119 {
120     
121     INTN_0();
122     
123     while(1);
124     
125 }

 

电动小车程序

标签:

原文地址:http://www.cnblogs.com/yuwl26/p/4246185.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!