




免费预览已结束,剩余9页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
相信进来的都是想学习和制作智能小车的,最近也在学习智能小车,我们的小车功能时红外遥控小车,小车避障,小车寻迹。现在将学习过程中所发现的一些比较好的代码与大家分享,希望能对大家有所帮助。红外遥控#include #include #include #define uchar unsigned char#define uint unsigned intsbit irin = p32; /红外线一体化接收头接收端sbit out1=p21;sbit out2=p22;sbit out3=p23;sbit out4=p24;sbit out5=p25;sbit out6=p26;sbit out7=p27;sbit out8=p20;uchar irtemp; /红外线按键数据存放变量uchar ircom7=0;/存放红外解码后的32位数据void delay_140us(uchar t) /延时140usuchar i,j;for(j=0; jt; j+)for (i=0; i27; i+) _nop_();void delay_1ms(uint t) /延时1msuint i,j;for(i=0;it;i+)for(j=0;j=100;j+)_nop_();void outsideinit(void) /设置外部中断初始化ex0 = 1; /开外部中断0it0 = 1; /负边沿触发ea = 1; /开总中断void irreceive(void) interrupt 0 using 2 /设置中断接收红外编码uchar i, j, count = 0;ex0 = 0; /关闭外部中断1delay_140us(20);if(irin = 1) /确认红外线信号出现 ex0 = 1;return;while(!irin) /等ir变为高电平,跳过9ms的前导低电平信号。 delay_140us(1); while(irin) /等ir变为低电平,跳过4.5ms的前导高电平信号。 delay_140us(1);for (i=0;i4;i+) /收集四组数据 for(j=0;j= 30)/计数过长自动离开。ex0=1;return; ircomi = ircomi 1; /数据右移一位,最高位补0if(count =6 ) ircomi = ircomi | 0x80; /数据最高位或上1count = 0; if(ircom2!=ircom3) /不相等,则红外遥控解码错误ex0=1;return; ex0 = 1; void main(void) irin = 1; /接收端口初始化outsideinit(); /初始化外部中断while (1) if (ircom2=0x0c) /按1 out1=0; else out1=1;if (ircom2=0x18) /按2 out2=0; else out2=1;if (ircom2=0x5e) /按3 out3=0; else out3=1; if (ircom2=0x08)/按4 out4=0; else out4=1; if (ircom2=0x1c)/按5 out5=0; else out5=1; if (ircom2=0x5a)/按6 out6=0; else out6=1; if (ircom2=0x42)/按7 out7=0; else out7=1; if (ircom2=0x52)/按8 out8=0; else out8=1; 电机驱动#include #include #include #include #define unsigned char#define unsigned intuchar pwm=20;uchar pwmh=1;uchar conter=0;uchar m=1;bit sw=1;bit lr=0;sbit ksw=p10;sbit klr=p11;sbit kspu=p12;sbit kspd=p13;sbit m1=p14;sbit m2=p15;void delay1ms() /11.0592mhz unsigned char i, j; _nop_(); _nop_(); _nop_(); i = 11; j = 190; do while (-j); while (-i);/tms延时void delayxms (uint t) uchar i; for(i-0;ipwmh) m=0; if (counter=pwmh) counter=0; m1=1; void main () gpio(); time0_int(); while (1) if(ksw=0) delayxms(10); if (ksw=0) sw=sw; while (ksw=0)display(); if(klr=0) delayxms(10); if (klr=0) lr=lr; while (klr=0)display(); if(kspu=0) delayxms(10); if (kspu=0) pwmh+; if(pwmh=pwm) pwmh=pwm-1; while (kspu=0)display(); if (kspd=0) delayxms(10); if (kspd=0) pwmh-; if (pwmh=0) pwmh=1; while (kspd=0)display(); if (sw=0) m1=0; m2=0; dis_buf0=13; dis_buf1=13; dis_buf2=13; dis_buf3=13; dis_buf4=13; dis_buf5=13; dis_buf6=13; dis_buf7=13; if(sw=1) dis_buf0=pwm%10; dis_buf1=pwm/10; dis_buf2=12; dis_buf3=pwmh%10; dis_buf4=pwm/10; dis_buf5=12; dis_buf6=12; if (lr=0) m1=0; m2=m; dis_buf7=10; if (lr=1) m1=m; m2=0; dis_buf7=11; display();超声波避障#include #include #include #define uchar unsigned char#define uint unsigned intsbit tri=p20;sbit rea=p21;sbit bell=p27;uchar count;bit bell_flag;void delay12us()/11.0592mhzunsigned char i;_nop_();_nop_();_nop_();i = 30;while (-i);/tms延时void delayxms (uint t)uint i;for(i-0;it;i+)void init()tri=0;tmod=0x10;tr1=0;th1=0;tl1=0;uint test_distance()uint date;tri=1;delay12us();tri=0;while (!rea)tr1=0;date=(uint)(th1*256+tl1)/10*18;th1=0;tl1=0;if (date2000) bell_flag=0;else bell_flag=1;return date;void main ()uint distance;gpio();init();while (1) distance=test_distance();dis_duf0=distance%10;dis_duf1=distance/10%10;dis_duf2=distance/100%10+17;dis_duf3=distance/1000%10;dis_duf4=distance/10000%10;display();if(bell_flag)bellbell;else bell=1;delayxms(30);红外寻迹#include /包含51单片机相关的头文件sbit leftled=p20; /定义前方左侧指示灯端口sbit rightled=p07; /定义前方右侧指示灯端口sbit fontlled=p10;sbit leftir=p35; /定义前方左侧红外探头端口sbit rightir=p36; /定义前方右侧红外探头端口sbit fontir=p37; /定义前方正前方红外探头端口sbit m1a=p00; /定义左侧电机驱动a端sbit m1b=p01; /定义左侧电机驱动b端sbit m2a=p02; /定义右侧电机驱动a端sbit m2b=p03; /定义右侧电机驱动b端sbit b1=p04; /定义语音识识别传感器端口sbit sb1=p06; /定义蜂鸣器端口void tingzhi() m1a=0; /将m1电机a端初始化为0 m1b=0; /将m1电机b端初始化为0 m2a=0; /将m2电机a端初始化为0 m2b=0;void qianjin() m1a=1; m1b=0; m2a=1; m2b=0;void houtui() m1a=0; m1b=1; m2a=0; m2b=1;void zuozhuan() m1a=0; m1b=1; m2a=1; m2b=0;void youzhuan() m1a=1; m1b=0; m2a=0; m2b=1;void delay_nus(unsigned int i) /延时:i=12 ,i的最小延时单12 us i=i/10; while(-i); void delay_nms(unsigned int n) /延时n ms n=n+1; while(-n) delay_nus(900); /延时 1ms,同时进行补偿 void controlcar(unsigned char contype) /定义电机控制子程序 tingzhi(); switch(contype) /判断用户设定电机形式 case 1: /前进 /判断用户是否选择形式1 qianjin(); break; case 2: /后退 /判断用户是否选择形式2 houtui(); /m2电机反转 break; case 3: /左转 /判断用户是否选择形式3 zuozhuan(); /m2电机正转break; case 4: /右转 /判断用户是否选择形式4 youzhuan(); /m1电机正转 /m2电机反转break; case 8: /停止 /判断用户是否选择形式8 tingzhi();break; /退出当前选择 void main() /主程序入口 bit runflag=0; /定义小车运行标志位 /runshow=0; /初始化显示状态 controlcar(8); /初始化小车运行状态 while(1) /程序主循环 start: leftled=leftir; /前方左侧指示灯指示出前方左侧红外探头状态 rightled=rightir; /前方右侧指示灯指示出前方右侧红外探头状态 fontlled= fontir; sb1=leftir; if(leftir = 0 & rightir = 0) /三个红外检测到黑线,就前进 controlcar(1); /左侧没有信号时,开始向右转一定的角度 delay_nms (10); goto nextrun; if(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 7-Python程序设计 python试题标准答案及评分标准
- 机械设备租赁协议书范本2025年
- 工程装修合同范本2025年
- 聚焦2025年:医疗器械国产化替代对行业竞争格局的调整报告
- 二零二五年度客服外包服务合同大全
- 2025版工程车辆买卖合同运输、培训及安全操作指导服务合同
- 2025版餐饮APP线上线下融合与品牌推广合同
- 2025年度广告活动策划合同范本简易指南
- 2025年版新能源项目担保合同与主合同技术支持协议
- 2025版灯光工程设计与施工及全程维护合同
- 五年级数学(小数乘除法)计算题专项练习及答案
- 中医诊断学中的血常规检查辨证方法研究
- 道路交通安全隐患排查治理投标方案(技术标 方案)
- 小学奥数:计算《分数的巧算》练习题
- PDCA降低护士针刺伤发生率
- 阴道炎培训演示课件
- 组建风险管理咨询公司方案
- 汽车项目管理工作总结
- 丹毒课件护理查房
- 浙江宁波慈溪市机关事业单位招聘编外工作人员24人笔试参考题库(共500题)答案详解版
- PMC-651T配电变压器保护测控装置使用说明书V1.2
评论
0/150
提交评论