文档详情

红外遥控小车程序.doc

发布:2017-04-02约4.73千字共6页下载文档
文本预览下载声明
程序已调试,能实现前进、后退、左前转、右前转、左后转、右后转、左圆转、右圆转等,并且有LED灯显示。 //********************************************** //***************红外小车*********************** //********************************************** #includereg52.h #define uint unsigned int #define uchar unsigned char sbit M11=P1^0; // 电机1接口 sbit M12=P1^1; sbit M21=P1^2; // 电机2接口 sbit M22=P1^3; sbit LED0=P0^0; // 紧急灯 sbit LED1=P0^1; // 左前灯 sbit LED2=P0^2; // 右前灯 sbit LED3=P0^3; // 左后灯 sbit LED4=P0^4; // 左后灯 sbit F=P1^5; //蜂鸣器接口 sbit Int0 = P3^3; // 红外接收采用外部中断1 uchar TEMP1=0; //全局变量用于存放红外返回值 -用于PWM占空比的控制 uchar TEMP2=10; // 用于方向的控制 uchar databus[7];//用于红外接收存放数据 //************************************************************ //延时函数 void delay1(uint xms) //delay 0.1ms { uint i,j; for(i=xms;i0;i--) for(j=13;j0;j--); } //************************************************************ //********************接受解码函数 uchar Rec() { uchar temp=0; //函数内部临时变量用于返回函数值 uint i=0; // 用于存放数据的临时变量 uint j=0; uint m=0; // 局部计数临时变量 uint n=0; // 局部计数临时变量 uint k=0; // 局部计数临时变量 EX1=0; // 关外部中断1 以防再次外部1中断的介入 while(!Int0) //用于计时前9Ms低电平的引导码 { delay1(1); m++; // 计数引导码的长度 } if(m=60) return 0; // while(Int0) //用于计时4.5ms高电平的引导码 { delay1(1); n++; //计时高电平 } if(n=30) return 0; M11=M12=M21=M22=0; //进入中断停止电机防止电机颤抖 for(i=0;i4;i++) for(j=0;j8;j++) { while(!Int0) //过滤数据的低位 0.56ms低电平 { delay1(1); } while(Int0) // 进入高电平计时 { delay1(1); k++; // k计时每次的高电平 } databus[i]=databus[i]1; // 数据接收数组首先默认接收为0信号即databus【i】//第7位移入0 if(k=10) { databus[i]=databus[i]|0x80; // 若为1把第8位置1 } k=0;
显示全部
相似文档