当前位置: 首页 > news >正文

基于51单片机智能小车设计循迹+避障超声波红外(Proteus仿真+Keil源码+设计文档+AD原理图等)DS18B20 附下载链接!

提供对应的Proteus仿真电路图,Keil程序源码(C语言),AD原理图,模块资料、元件清单、程序流程图等电子资料参考学习,文末附全部资料的下载链接

01设计要求

设计一个基于51单片机智能小车设计循迹+避障超声波红外DS18B20系统:

  1. 小车双超声波避障功能;

  2. 小车红外循迹功能;

  3. 小车DS18B20温度采集功能;

  4. 按键控制车左转右转功能;

  5. LCD1602液晶屏显示距离、温度等信息功能。

02Proteus仿真

03示例代码

#include <reg52.h> #include <intrins.h> ​ typedef unsigned int uint; typedef int int; ​ // 全局引脚/变量声明(省略底层驱动定义) sbit Trig_P = P1^0; // 左超声波触发脚 sbit Trig_P1 = P1^1; // 右超声波触发脚 sbit Mode_SET= P3^0; // 自动/手动模式切换 sbit RUN_left= P3^1; // 手动左转按键 sbit RUN_right=P3^2; // 手动右转按键 sbit LED = P2^0; // 报警指示灯 sbit BEEP = P2^1; // 蜂鸣器 float gSpeed; // 超声波声速 ​ /********************************************************* * 主函数:双模式小车控制 * Mode_SET=1:自动避障(双超声波+红外循迹) * Mode_SET=0:手动按键控制 *********************************************************/ void main(void) { uint hw_l, hw_r; // 左右红外循迹AD采样值 uint dist_l, dist_r; // 左右超声波测距结果 int temp; // DS18B20采集温度 int t = 0; // 循环计数分频变量 ​ Trig_P = 0; Trig_P1 = 0; ​ LcdInit(); // LCD1602液晶初始化 TMOD = 0x11; // T0/T1设为16位定时器,用于超声波计时 ​ // 液晶固定标题显示 LcdGotoXY(0, 0); LcdPrintStr("T: "); LcdGotoXY(1, 0); LcdPrintStr("L: cm R: cm"); ​ // 等待DS18B20传感器稳定(上电默认850为无效值) while(DS18B20_ReadTemp() == 850) DelayMs(10); ​ while(1) { // 每3次循环刷新温度、声速、双超声波距离 if(t % 3 == 0) { temp = DS18B20_ReadTemp(); LcdGotoXY(0, 2); LcdPrintTemp(temp); ​ // 声速公式 v=0.607*T+331.4,转换单位 cm/us gSpeed = 0.607 * (temp / 10) + 331.4; gSpeed = gSpeed / 10000; ​ // 读取左超声波距离并刷新LCD dist_l = GetDistance(); LcdGotoXY(1, 2); LcdPrintNum(dist_l); // 读取右超声波距离并刷新LCD dist_r = GetDistance1(); LcdGotoXY(1, 0x0a); LcdPrintNum(dist_r); } ​ // ========== 自动避障模式 ========== if(Mode_SET == 1) { // 每5次循环刷新左右红外循迹数值 if(t % 5 == 0) { hw_l = adc08322_2(0) * 99 / 255; LcdGotoXY(0, 0x09); LcdPrintNum(hw_l); ​ hw_r = adc08322_2(1) * 99 / 255; LcdGotoXY(0, 0x0c); LcdPrintNum(hw_r); } ​ // 左右无障碍物、红外居中:直行 if((dist_l >= 30) && (hw_l == hw_r) && (dist_r >= 30)) MotorFront(20); // 左侧近障/红外左偏:右转 if((dist_l >= 10 && dist_l < 30) || (hw_l > hw_r) && (dist_r >= 30)) MotorRight(30); // 右侧近障/红外右偏:左转 if((dist_r >= 10 && dist_r < 30) || (hw_l < hw_r) && (dist_l >= 30)) MotorLeft(30); // 任意一侧障碍物小于10cm:立即停车 if((dist_l < 10) || (dist_r < 10)) MotorStop(); ​ // 10~30cm中等距离障碍:声光交替报警 if((dist_l >= 10 && dist_l < 30) || (dist_r >= 10 && dist_r < 30)) { LED = 0; BEEP = 0; DelayMs(300); BEEP = 1; DelayMs(300); } else // 无近距离障碍,关闭报警 { LED = 1; BEEP = 1; } ​ DelayMs(100); t++; if(t > 10000) t = 0; // 防止计数溢出 } // ========== 手动按键控制模式 ========== else if(Mode_SET == 0) { if(RUN_left == 0) MotorLeft(30); else if(RUN_right == 0) MotorRight(30); else MotorFront(20); } } }

04原理图

注:

  1. 源码使用Keil4或Keil5打开

  2. 仿真使用的是Proteus8.13及以上版本,版本过低可能会打不开。

05资料获取

1)项目完整资料获取链接:下载链接

2)Keil、Proteus各个版本安装包: 下载链接

http://www.jsqmd.com/news/1095856/

相关文章:

  • DeepSeek-V4效率革命:百万token稳定推理与KVcache压缩实战
  • Kali更新后图形界面“消失”?手把手教你从命令行救回桌面
  • AMD Ryzen终极调试工具:SMU Debug Tool完整指南,释放处理器全部潜能
  • 如何通过本地化配置解锁Wand高级功能:技术原理与实战指南
  • 功率半导体涨价潮来袭,大功率变频器的成本空间从哪里“挤“回来?
  • DVWA靶场安装后红色警告全解析:PHP配置、文件权限与安全环境搭建
  • 硬件盲盒不要脱离实际
  • 构建企业级AI Agent:从原型到生产部署
  • Mythos架构解析:长程逻辑、反事实推演与跨模态锚定三大能力
  • 激光打印机里的“隐形存储器”:SD NAND(贴片式TF卡)为什么在打印机主板上越来越常见
  • 从SciHub到DataSpace:欧空局Copernicus数据OData API迁移与Python实战
  • 从放电到充电:三极管(PNP与NPN)恒流源电路的原理、设计与关键条件分析
  • 新概念英语(第一册)语法精讲与场景实战——Lesson 131 至 Lesson 143 核心要点解析
  • 专业文本挖掘利器:KH Coder如何让多语言内容分析变得简单高效
  • 企业AI Agent落地「成本ROI专项风险自查表」(可直接用于立项/预算/复盘)
  • Python+Windpy实战:构建EDB宏观经济数据的自动化监控与可视化系统
  • 抖音批量下载助手:快速批量获取抖音用户视频的终极解决方案
  • ArcGIS实战:利用IDW反距离权重法实现气象数据的批量空间插值
  • 069、注意力插入位置自动化搜索工具:用 FLOPs 和参数预算约束找最优注意力插入方案
  • 抖音用户视频批量下载:如何用Python脚本高效收集创作素材
  • Anthropic份额首超OpenAI,但企业花钱的逻辑跟跑分已经没关系了
  • 跨越软件鸿沟:从Surfer GRD到ArcGIS ASC的格式转换实战
  • PCF80如何帮助解析癌症相关成纤维细胞微环境?
  • API调试实战:在Postman与ApiPost中编写AK/SK签名脚本
  • Selenium与Python自动化测试入门:从环境搭建到实战脚本
  • Claude Mythos Preview:通用大模型如何重塑网络安全能力范式
  • UG后处理实战:MOM与GPM双路径解析与避坑指南
  • evo_res参数实战解析:从基础对比到高级可视化输出
  • 精准量化氧化还原力!辅酶 ⅡNADP (H) 含量检测试剂盒
  • openEuler构建工具安全指南:签名验证与依赖安全检查