欢迎来到天天文库
浏览记录
ID:8481219
大小:38.50 KB
页数:14页
时间:2018-03-29
《智能小车各独立模块_红外遥控_电机驱动_超声波_红外寻迹》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、相信进来的都是想学习和制作智能小车的,最近也在学习智能小车,我们的小车功能时红外遥控小车,小车避障,小车寻迹。现在将学习过程中所发现的一些比较好的代码与大家分享,希望能对大家有所帮助。红外遥控#include#include#include#defineucharunsignedchar#defineuintunsignedintsbitIRIN=P3^2;//红外线一体化接收头接收端sbitout1=P2^1;sbitout2=P2^2;sbitout3=P2^3;sbitout4=P
2、2^4;sbitout5=P2^5;sbitout6=P2^6;sbitout7=P2^7;sbitout8=P2^0;ucharIRTemp;//红外线按键数据存放变量ucharIRCOM[7]={0};//存放红外解码后的32位数据voidDelay_140us(uchart)//延时140us{uchari,j;for(j=0;j3、j++){_nop_();}}}voidOutsideInit(void)//设置外部中断初始化{EX0=1;//开外部中断0IT0=1;//负边沿触发EA=1;//开总中断}voidIRReceive(void)interrupt0using2//设置中断接收红外编码{uchari,j,count=0;EX0=0;//关闭外部中断1Delay_140us(20);if(IRIN==1)//确认红外线信号出现{EX0=1;return;}while(!IRIN)//等IR变为高电平,跳过9ms的前导低电平信号。{Delay_140us(1);4、}while(IRIN)//等IR变为低电平,跳过4.5ms的前导高电平信号。{Delay_140us(1);}for(i=0;i<4;i++)//收集四组数据{for(j=0;j<8;j++)//每组数据有8位{while(!IRIN)//等IR变为高电平{Delay_140us(1);}while(IRIN)//计算IR高电平时长{Delay_140us(1);count++;if(count>=30)//计数过长自动离开。{EX0=1;return;}}IRCOM[i]=IRCOM[i]>>1;//数据右移一位,最高位补"0"if(co5、unt>=6){IRCOM[i]=IRCOM[i]6、0x80;//数据最高位或上"1"}count=0;}}if(IRCOM[2]!=~IRCOM[3])//不相等,则红外遥控解码错误{EX0=1;return;}EX0=1;}voidMain(void){IRIN=1;//接收端口初始化OutsideInit();//初始化外部中断while(1){if(IRCOM[2]==0x0c)//按1out1=0;elseout1=1;if(IRCOM[2]==0x18)//按2out2=0;elseout2=1;if(IRCOM[2]==0x5e7、)//按3out3=0;elseout3=1;if(IRCOM[2]==0x08)//按4out4=0;elseout4=1;if(IRCOM[2]==0x1c)//按5out5=0;elseout5=1;if(IRCOM[2]==0x5a)//按6out6=0;elseout6=1;if(IRCOM[2]==0x42)//按7out7=0;elseout7=1;if(IRCOM[2]==0x52)//按8out8=0;elseout8=1;}}电机驱动#include#include#include<8、gpio.h>#include<595hc.h>#defineunsignedchar#defineunsignedintucharpwm=20;ucharpwmh=1;ucharconter=0;ucharm=1;bitsw=1;bitlr=0;sbitksw=P1^0;sbitklr=P1^1;sbitkspu=P1^2;sbitkspd=P1^3;sbitm1=P1^4;sbitm2=P1^5;voidDelay1ms()//@11.0592MHz{unsignedchari,j;_nop_();_nop_();_nop_();i=119、;j=190;do{while(--j);}while(--i);}//tms延时voidDelayxms(uintt){uchari;for(i-0;i
3、j++){_nop_();}}}voidOutsideInit(void)//设置外部中断初始化{EX0=1;//开外部中断0IT0=1;//负边沿触发EA=1;//开总中断}voidIRReceive(void)interrupt0using2//设置中断接收红外编码{uchari,j,count=0;EX0=0;//关闭外部中断1Delay_140us(20);if(IRIN==1)//确认红外线信号出现{EX0=1;return;}while(!IRIN)//等IR变为高电平,跳过9ms的前导低电平信号。{Delay_140us(1);
4、}while(IRIN)//等IR变为低电平,跳过4.5ms的前导高电平信号。{Delay_140us(1);}for(i=0;i<4;i++)//收集四组数据{for(j=0;j<8;j++)//每组数据有8位{while(!IRIN)//等IR变为高电平{Delay_140us(1);}while(IRIN)//计算IR高电平时长{Delay_140us(1);count++;if(count>=30)//计数过长自动离开。{EX0=1;return;}}IRCOM[i]=IRCOM[i]>>1;//数据右移一位,最高位补"0"if(co
5、unt>=6){IRCOM[i]=IRCOM[i]
6、0x80;//数据最高位或上"1"}count=0;}}if(IRCOM[2]!=~IRCOM[3])//不相等,则红外遥控解码错误{EX0=1;return;}EX0=1;}voidMain(void){IRIN=1;//接收端口初始化OutsideInit();//初始化外部中断while(1){if(IRCOM[2]==0x0c)//按1out1=0;elseout1=1;if(IRCOM[2]==0x18)//按2out2=0;elseout2=1;if(IRCOM[2]==0x5e
7、)//按3out3=0;elseout3=1;if(IRCOM[2]==0x08)//按4out4=0;elseout4=1;if(IRCOM[2]==0x1c)//按5out5=0;elseout5=1;if(IRCOM[2]==0x5a)//按6out6=0;elseout6=1;if(IRCOM[2]==0x42)//按7out7=0;elseout7=1;if(IRCOM[2]==0x52)//按8out8=0;elseout8=1;}}电机驱动#include#include#include<
8、gpio.h>#include<595hc.h>#defineunsignedchar#defineunsignedintucharpwm=20;ucharpwmh=1;ucharconter=0;ucharm=1;bitsw=1;bitlr=0;sbitksw=P1^0;sbitklr=P1^1;sbitkspu=P1^2;sbitkspd=P1^3;sbitm1=P1^4;sbitm2=P1^5;voidDelay1ms()//@11.0592MHz{unsignedchari,j;_nop_();_nop_();_nop_();i=11
9、;j=190;do{while(--j);}while(--i);}//tms延时voidDelayxms(uintt){uchari;for(i-0;i
此文档下载收益归作者所有