17【Protues单片机仿真】基于51单片机的太阳能智能谷物翻晒机器人

目录

一、主要功能

二、硬件资源

三、程序编程

四、实现现象


一、主要功能

基于51单片机,避障,低于50CM报警,LED灯亮起,自动翻晒用光敏电阻,光照强度大,电机转动,相当于翻晒粮食,远程控制用按键代替,按下去电机就转动,相当于翻晒粮食,然后光照强度和超声波的距离都在LCD1602显示屏显示出来。

二、硬件资源

基于KEIL5编写C++代码,PROTEUS8.15进行仿真,全部资源在页尾,提供安装包。

1、51单片机

2、超声波传感器

3、光照传感器

4、ADC0832数模转换器

5、L298N驱动电机模块

6、LCD1602显示模块

7、灯光报警模块

8、按键模块

仿真图:

编辑

三、程序编程

/*所有代码资源看页尾*/
#include <REGX52.H>
#include<intrins.h>
#include<stdio.h>
#include "Delay.h"
#include "LCD1602.h"
#define uchar unsigned char
#define uint unsigned  int
typedef unsigned char u8;
typedef unsigned int  u16;
typedef unsigned char uint8;
typedef unsigned int uint16;
typedef unsigned long uint32;
sbit CS=P1^0;        //51单片机引脚设置
sbit CLK=P1^1;
sbit DIO=P1^2;
sbit Motor1_IN1 = P3^3;	      //电机IN1口
sbit Motor1_IN2 = P3^4;
sbit Motor1_EN =  P3^2;       //电机使能端1sbit Motor2_IN1 = P3^5;	      //电机IN1口
sbit Motor2_IN2 = P3^6;
sbit Motor2_EN =  P3^7;       //电机使能端2sbit LED =  P1^5;  //LED灯定义
sbit key =  P1^4;
sbit key1 = P1^6;
sbit BEEP = P1^3;sbit Tr=P3^0;//触发信号
sbit Ec=P3^1;//回响信号
uchar Recv_Buffer\[4\];
uint Voltage\[\]={'0','0','0','0'};
bit bdata IIC_ERROR;unsigned char count;
unsigned int distance;
static uint temp;
uint temp;
static unsigned char num;
static int flag = 0, flag1 = 0;
unsigned int Read_value(void);//读值函数void Delay10us(void);//10us延时函数void Time0_Init()          //定时器初始化
{TMOD = 0x01;TH0 = 0x00;TL0 = 0x00;TR0 = 0;//先关闭定时器0
}void Time0_Int() interrupt 1 //中断程序
{TH0  = 0xfe;             //重新赋值TL0  = 0x33;
}uchar get\_AD\_Res()          //ADC0832启动读取函数
{uchar i, data1=0, data2=0;CS=0;CLK=0;DIO=1;\_nop\_();CLK=1;\_nop\_();CLK=0;DIO=1;\_nop\_(); CLK=1;\_nop\_();CLK=0;DIO=0;\_nop\_();CLK=1;\_nop\_();CLK=0;DIO=1;\_nop\_(); for(i=0; i<8; i++){CLK=1;\_nop\_();CLK=0;\_nop\_();data1=(data1<<1)|(uchar)DIO; }for(i=0; i<8; i++){data2=data2|(uchar)DIO<<i;CLK=1;\_nop\_();CLK=0;\_nop\_();}CS=1;return(data1 == data2)?data1:0;
}
unsigned int Read_value()
{uint result;Tr=1;//触发引脚发出11us的触发信号(至少10us)Delay10us();Tr=0;while(!Ec);//度过回响信号的低电平TR0=1;//开启定时器0while(Ec);//度过回响信号高电平TR0=0;//关闭定时器0result=((TH0\*256+TL0)\*0.034)/2;		// 距离cm=(时间us * 速度cm/us)/2return result + 2;	//+2修正补偿	
}void main()					  //主函数
{	uchar u;Tr=0;               //出发引脚首先拉低LCD_Init();         //显示屏初始化LCD_ShowString(1,1,"Distance:"); //显示字符串DistanceLCD_ShowString(2,1,"GZQD:");     //显示字符串GZQD 光照强度Time0_Init();	   //定时初始化Motor2_EN = 1;	   //顺时针Motor2_IN1 = 1;Motor2_IN2 = 0;LED = 0;BEEP = 0;while(1){u=get\_AD\_Res();        //读取光照强度distance = Read_value();//读值distance-=1;LCD_ShowNum(1,10,distance,3); //显示距离LCD_ShowNum(2,6,u,3);         //显示光照强度if( (distance>=50) && (distance<= 100)){Motor2_EN = 1;		   //逆时针Motor2_IN1 = 0;Motor2_IN2 = 1;LED  = 0; 	 //LED灯熄灭BEEP = 0;	 //蜂鸣器关掉}else if(distance < 50)	  //超声波距离判断{LED  = 1;   //LED灯亮起BEEP = 1;   //蜂鸣器响起}else if(distance > 100){Motor2_EN = 1;	    //顺时针Motor2_IN1 = 1;Motor2_IN2 = 0;}if(u > 80) //光照强度判断{flag = 1;}else {flag = 0;}if(key == 0){Delay(100); //消除抖动if(key == 0){flag1 = 1;}}if(key1 == 0){Delay(100);//消除抖动if(key1 == 0){flag1 = 0;}}if(flag == 1){Motor1_EN = 1;  //电机端使能Motor1_IN1 = 1; //给IN1口赋值高电平Motor1_IN2 = 0; //给IN2口赋值低电平,形成顺时针转动}else if(flag1 == 1){Motor1_EN = 1;  //电机端使能Motor1_IN1 = 1; //给IN1口赋值高电平Motor1_IN2 = 0; //给IN2口赋值低电平,形成顺时针转动}else{Motor1_EN  = 0;Motor1_IN1 = 0;Motor1_IN2 = 0;}}}void Delay10us()
{TL0=0xF5;TH0=0xFF;TR0=1;while (TF0==0);TR0=0;TF0=0;
}

四、实现现象

具体动态效果看B站演示视频:

基于51单片机的太阳能自动谷物翻晒机器人控制系统_哔哩哔哩_bilibili

全部资料(源程序、仿真文件、安装包、演示视频):

链接:https://pan.baidu.com/s/1Ewj05XL8mORAxrL9C3kejA 
提取码:w4e9 
–来自百度网盘超级会员V4的分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/55036.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

拿到一个新项目,如何开展测试

1. 拿到一个新的项目或者新的需求&#xff0c;首先需要搞清楚他的背景、目标和需求&#xff0c;这个过程需要和产品、开发、客户去沟通。 2. 清楚需求后&#xff0c;首先将业务流程走通&#xff0c;确保项目的基础功能是正常的 3. 根据项目需求明确测试的目标&#xff0c;如&…

【中间件——基于消息中间件的分布式系统的架构】

1. 基于消息中间件的分布式系统的架构 从上图中可以看出来&#xff0c;消息中间件的是 1&#xff1a;利用可靠的消息传递机制进行系统和系统直接的通讯 2&#xff1a;通过提供消息传递和消息的排队机制&#xff0c;它可以在分布式系统环境下扩展进程间的通讯。 1.1 消息中间件…

PostgreSQL的学习心得和知识总结(一百五十一)|[performance] PostgreSQL列对齐

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

算法题——滑动窗口(图示+代码)

什么时候可以使用滑动窗口&#xff1f; 当我们尝试对一条题目进行暴力插解时&#xff0c;若发现 一、长度最小的子数组 题目链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程…

一个 Java 语言简化处理 PDF 的框架,提供了一套简单易用的 API 接口,满足多样化需求又能简化开发流程的处理方案(附教程)

前言 当前市面上处理 PDF 文件的工具众多&#xff0c;但它们往往存在一定的局限性&#xff0c;比如复杂交互、功能单一等问题。尤其对于那些需要频繁生成或编辑 PDF 文档的应用场景来说&#xff0c;找到一个既能满足多样化需求又能简化开发流程的处理方案显得尤为重要。那么&a…

借用连接2-得到主库或从库池子连接

二、借用连接--AbstractRoutingDataSource类 目的&#xff1a;基于look up data&#xff0c;然后从目标数据源借用连接 注look up key确定走主 or 从数据库连接池代码开发&#xff1a; 1.定义子类继承AbstractRoutingDataSource&#xff0c;并覆写determineCurrentLookupKey方…

【前端】ES13:ES13新特性

文章目录 1 类新增特性1.1 私有属性和方法1.2 静态成员的私有属性和方法1.3 静态代码块1.4 使用in来判断某个对象是否拥有某个私有属性 2 支持在最外层写await3 at函数来索引元素4 正则匹配的开始和结束索引5 findLast() 和 findLastIndex() 函数6 Error对象的Cause属性 1 类新…

Python 从入门到实战30(高级文件的操作)

我们的目标是&#xff1a;通过这一套资料学习下来&#xff0c;通过熟练掌握python基础&#xff0c;然后结合经典实例、实践相结合&#xff0c;使我们完全掌握python&#xff0c;并做到独立完成项目开发的能力。 上篇文章我们讨论了操作目录的相关知识。今天我们将学习一下高级文…

(SERIES13)基于DMASM的DMDSC搭建

1 集群规划 1.1 规划内容 在宿主机上创建磁盘映像、并使用该磁盘映像创建虚拟块设备&#xff0c;按照losetup -f可用顺序分别关联到loop0, loop1, loop2, loop3&#xff1b;也可以直接挂载四个云虚拟磁盘vdb, vdc, vdd, vde&#xff1b;   配置UDEV规则&#xff0c;通过.img…

2、electron vue3 怎么创建子窗口,并给子窗口路由传参

接上回初始化vue3 electron项目&#xff0c;创建完vue3 electron项目后&#xff0c;现在要实现在渲染进程中点击按钮创建一个新的子窗口 开始 子窗口创建操作只能在主线程内完成&#xff0c;而创建操作是在渲染线程触发&#xff0c;因此就需要进行两者间的通讯。 1、创建子窗…

性能监控之Python实战SkyWalking链路追踪

文章目录 一、介绍二、SkyWalking支持的语言三、SkyWalking安装3.1 前提准备3.2 先安装ElasticSearch7.X3.3 Skywalking-OAP 安装3.4 Skywalking-UI 界面安装3.5 访问页面检查SkyWalking是否可以访问 四、Python 项目接入SkyWalking4.1 演示项目代码4.2 验证 sw-python4.3 配置…

uviewui2.x上传的坑

<u-upload:fileList"fileList3"afterRead"afterRead"delete"deletePic"name"3"multiple:maxCount"10":previewFullImage"true" ></u-upload> 其中&#xff0c;afterRead&#xff0c;deletePic方法&a…

AI会议时代:企业如何搭上快车?

“我 们认为&#xff0c;AI绝不仅是会议的辅助工具&#xff0c;而更会是重塑会议流程的关键力量。通过AI的个性化定制、大规模支持、智能分析这些技术&#xff0c;AI会议将大大提升会议的智能化与高效性&#xff0c;进而成为企业数字化转型的核心驱动力。” 作者|斗斗 编辑…

webdav解说

WebDAV&#xff08;Web Distributed Authoring and Versioning&#xff09;是一种基于HTTP/1.1协议的扩展&#xff0c;它允许用户通过网络进行文件的上传、删除、编辑等操作&#xff0c;从而实现远程文件管理。 WebDAV 是一种网络文件共享协议&#xff0c;它扩展了HTTP协议&am…

golang context管理channel

如果多个协程之间有一定的生命周期关系&#xff0c;可以使用context去做退出管理。 如下图&#xff0c;上游的ctx只能执行很快就被cancel了&#xff0c;此时那启动的子协程也没有继续运行的必要&#xff0c;所以此时子协程也监控上游的状态&#xff0c;上游一结束&#xff0c;子…

THREE.JS法线Shader

以普通情况而论 vNormal normal;//...gl_FragColor vec4( vNormal, 1. );vNormal normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );vNormal normalMatrix * normal;//...gl_FragColor vec4( normalize( vNormal ) * 0.5 0.5, 1. );normalMa…

为什么IP首部的源IP地址和目的IP地址不变而MAC层的源MAC地址和目的MAC地址变

IP首部的源IP地址和目的IP地址不变&#xff0c;而MAC层的源MAC地址和目的MAC地址变化的原因‌主要涉及到计算机网络中的分层结构和数据包传输过程。在OSI&#xff08;开放系统互联&#xff09;模型中&#xff0c;计算机网络被分为不同的层&#xff0c;每层都有其特定的功能。IP…

【Java异常】(简简单单拿捏)

【Java异常】&#xff08;简简单单拿捏&#xff09; 1. 异常的简单介绍2. 异常的抛出2.1 语法 3. 异常的处理3.1 异常声明throws3.2 try-catch捕获并处理 4. 例子&#xff08;try-catch自定义异常&#xff09; 1. 异常的简单介绍 程序员在运行代码时会遇到很多异常&#xff0c…

MySQL知识点复习 - 索引分类

索引 可以把书开头的目录比喻成索引&#xff0c;那么在数据库中&#xff0c;索引就可以理解为数据的目录。 索引的分类 可以按照四个角度来进行分类 数据结构&#xff1a;b&#x1f332;、hash、full-text索引物理存储&#xff1a;聚簇、二级索引字段特性&#xff1a;主键、…

Linux系统安装MySQL8.40(保姆级教程)

前言&#xff1a; 说明&#xff1a;本文章是在阿里云ecs上安装MySQL&#xff0c;即&#xff1a;Linux是在联网状态下。 一、安装前环境准备 1.查看MySQL应用是否已存在 rpm -qa |grep mysql说明&#xff1a;若返回空信息&#xff0c;就说明当前环境没有安装MySQL。 2.查看ma…