标签:避障 car 51 单片机 right bizhang sbit zhangai left
最近在学习关于51单片机控制智能小车的程序,学习了很多大佬优秀的代码和思路
受到了一些启发,决定按自己的逻辑尝试一下关于红外避障+超声波避障的程序
经过实际测试,当PWM在50%左右,效果还行,但当全速前进时效果不是很理想
代码还有待改进,有些地方逻辑比较混乱,单纯只是为了能跑通,有待优化
先记录一下,毕竟也花了不少时间来写和调试
#include<reg52.H> #include "test2.h" #include <stdlib.h> sbit P22 = P2^2; sbit P23 = P2^3; sbit P24 = P2^4; sbit TRIG = P2^1; sbit ECHO = P2^0; sbit left_zhangai = P3^4; sbit right_zhangai = P3^5; unsigned char flag = 0; unsigned char i; unsigned int out_TH0, out_TL0, distance; void left_bizhang() { for (i = 0; i < 30; i++) //90 = 90 { car_left_backward(); } } void right_bizhang() { for (i = 0; i < 30; i++) //90 = 90 { car_right_backward(); } } void all_bizhang() { for (i = 0; i < 30; i++) //90 = 90 { car_right_backward(); } } void back_bizhang() { for (i = 0; i < 10; i++) car_straight_backward(); for (i = 0; i < 10; i++) car_left_backward(); } void init_time() { TMOD = 0x11; //启动0 1两个定时器 TH0 = 0; TL0 = 0; TR0 = 0; TR1 = 0; TH1 = 238; TL1 = 0; TF0 = 0; //中断溢出标志位 TF1 = 1; ET0 = 1; ET1 = 1; EA = 1; } void run() { P22 = 1; P24 = 1; left_zhangai = 1; right_zhangai = 1; TRIG = 0; // 先给控制端初始化为0 car_straight_forward_per50(); distance = 100; while(1) { ///////////////////////////// label: if (left_zhangai == 1&&right_zhangai == 1) { car_straight_forward_per50(); } else { if (left_zhangai == 0&&right_zhangai == 0) { all_bizhang(); } if (right_zhangai == 0&&left_zhangai == 1) { right_bizhang(); } if (left_zhangai == 0&&right_zhangai == 1) { left_bizhang(); } } init_time(); //初始化定时器 flag = 0; //置溢出标志位为0 //控制口发一个10US 以上的高电平 TRIG = 1; TR1 = 1; //启动定时器1 delay_10um(2); TRIG = 0; //等待接收端出现高电平 while(!ECHO) { if (TH1 == 0) { distance = 200; goto label; } }; TR0 = 1; //启动计时器 开始计时 while(ECHO) { if (TH1 == 0) { distance = 200; goto label; } }; //等待高电平结束 TR0 = 0; //关闭低电平 out_TH0 = TH0; //取定时器的值 out_TL0 = TL0; distance = (TH0*256 + TL0)*1.7/100; if (flag == 1) { flag = 0; } else if (distance >= 200) { car_straight_forward_per50(); } else if (distance <= 10) { back_bizhang(); } else if (distance <= 20) { all_bizhang(); } ///////////////////////////////////////// } } void timer0() interrupt 1 //中断函数 { flag=1; //溢出标志位置1 }
标签:避障,car,51,单片机,right,bizhang,sbit,zhangai,left 来源: https://www.cnblogs.com/s1eepDumling/p/14720220.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。