C51--项目--感应开关盖垃圾桶
1、项目概述
功能描述:
检测靠近时,垃圾桶自动开盖并伴随滴一声,2s后关盖。
发生震动时,垃圾桶自动开盖并伴随滴一声,2s后关盖。
按下按键时,垃圾桶自动开盖并伴随滴一声,2s后关盖。
硬件说明:
c52单片机、sg90舵机、超声波模块、震动传感器、蜂鸣器
接线说明:
舵机控制口 P1.1
超声波 Trig 接 P1.5口
Echo 接 P1.6口
蜂鸣器接 P2.0口
震动传感器接 P3.2口(外部中断INT0)
2、编程实现
开发步骤
1、舵机和超声波代码整合,
舵机用定时器0,
超声波用定时器1,
(手册中高 4 位管定时器 1 ,低 4 位管定时器 0。0x0F:F四个一,保持低四位不变,高四位全部为0;0x10:低四位不变,使高四位M0变为16位定时器)
实现物体靠近自动滴一声开盖,2s后关盖
2、查询法实现按键控制
3、查询法实现震动控制
4、使用外部中断0配合震动控制
3、优化
解决靠近超2s抽搐问题,
添加延时关盖
优化关盖震动控制开盖问题
#include "reg52.h"
#include <intrins.h>//距离小于10cm,D5亮,D6灭,反之相反sbit SW1 = P2^1; //按键开关接口
sbit D5 = P3^7;
sbit D6 = P3^6;
sbit Trig = P1^5;
sbit Echo = P1^6;
sbit sg90_con = P1^1; //舵机
sbit vibrate = P3^2; //振动传感器(外部中断)
sbit beep = P2^0; //蜂鸣器(低电平响)//int换为char,节省空间
char jiaodu;
char jiaodu_bak;
char cnt = 0;
char mark_vibrate = 0; //外部中断标志位void Delay2000ms() //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 15;j = 2;k = 235;do{do{while (--k);} while (--j);} while (--i);
}void Delay150ms() //@11.0592MHz
{unsigned char i, j, k;_nop_();i = 2;j = 13;k = 237;do{do{while (--k);} while (--j);} while (--i);
}void Delay10us() //@11.0592MHz
{unsigned char i;i = 2;while (--i);
}void startHC()
{Trig = 0;Trig = 1;Delay10us();Trig = 0;
}//定时器0初始化
void Time0Init()
{TMOD &= 0xF0; //设置定时器 0 模式TMOD |= 0x01; TL0 = 0x33; //给初值,定一个0.5msTH0 = 0xFE; ET0 = 1; //打开定时器0中断 EA = 1; //打开总中断EATR0 = 1; //开始计时TF0 = 0;
}//定时器1初始化
void Time1Init()
{TMOD &= 0x0F; //设置定时器 1 模式TMOD |= 0x10;TH1 = 0;TL1 = 0;//设置定时器0工作模式1,初值设定为0开始数数,不着急启动定时器
}/*
十进制左移一位相当于乘以10。例:2左移一位为20
二进制左移一位相当于乘以2. 例:1左移一位为10(十进制的2)
左移8位,相当于乘以2的8次方 = 256
*/double get_distance() //封装函数距离
{double time;//时间//定时器数据清零,方便下一次测距TH1 = 0;TL1 = 0;startHC(); //给TRIG一个10us的高电平while(Echo == 0); //ECHO由**低电平跳转到高电平**表示开始发送波TR1 = 1; //波发送时启动定时器while(Echo == 1); //ECHO由**高电平跳转到低电平**表示波返回TR1 = 0; //波回来时关闭定时器time = (TH1 * 256 + TL1)*1.085; //计算中间经过的时间,以 um 为单位return (time * 0.017);//距离=(时间)*波的速度(340m/s)/ 2 ; 340m/s = 34cm/ms = 0.034cm/us
}void openStatuslight() //封装函数,状态灯开D5亮,开盖
{D5 = 0;D6 = 1;
}void closeStatuslight() //封装函数,状态灯关D5灭,关盖
{D5 = 1;D6 = 0;
}void initSG90_0() //封装函数,舵机角度
{jiaodu = 1; //初始化角度,0°,0.5ms的高电平cnt = 0; //角度变化,cnt从0计算sg90_con = 1;//给高电平
}void openDustbin()//封装函数,舵机转动角度--打开垃圾桶
{char n;jiaodu = 4;//爆表4次,0.5*4=2ms高电平,转135度if(jiaodu_bak != jiaodu){cnt = 0;beep = 0; //蜂鸣器响for(n = 0;n < 2;n++);Delay150ms();beep = 1;Delay2000ms(); //每隔两秒转一次}jiaodu_bak = jiaodu;}void closeDustbin()//封装函数,舵机转动角度--关闭垃圾桶
{jiaodu = 1;jiaodu_bak = jiaodu;cnt = 0;Delay150ms();
}void EX0_Init() //封装函数,外部中断
{EX0 = 1; //打开外部中断 (下降沿触发IT0/TCON.0 = 1 ;低电平触发IT0/TCON.0 = 0 )IT0 = 0; //低电平触发
}void main()
{double dis;//距离Time0Init();//定时器0初始化Time1Init();//定时器1初始化EX0_Init();initSG90_0();//舵机角度while(1){dis = get_distance();//超声波测距if(dis < 10 || SW1 == 0 || mark_vibrate == 1){ //小于10cm,或者sw1按键被按下,或者震动产生//振动产生有可能发生在延时期间,电频转变急促,不稳定,所以要使用外部中断(INIT0 )openStatuslight(); //D5亮,开盖openDustbin(); //打开垃圾桶mark_vibrate = 0; //恢复}else{closeStatuslight(); //D5灭,关盖closeDustbin(); //关闭垃圾桶}}} //定时器0中断
void Time0Handler() interrupt 1
{cnt++; //统计爆表的次数TL0 = 0x33; //重新给初值TH0 = 0xFE;if(cnt < jiaodu){ //PWM波形控制sg90_con = 1;}else{sg90_con = 0;}if(cnt == 40){ //爆表40次,经过20mscnt = 0; //重新计算cntsg90_con = 1;}
}//外部中断
void EX0_Handler() interrupt 0
{mark_vibrate = 1;
}
相关文章:
C51--项目--感应开关盖垃圾桶
1、项目概述 功能描述: 检测靠近时,垃圾桶自动开盖并伴随滴一声,2s后关盖。 发生震动时,垃圾桶自动开盖并伴随滴一声,2s后关盖。 按下按键时,垃圾桶自动开盖并伴随滴一声,2s后关盖。 硬件说明…...
基于单片机设计的太阳能跟踪器
一、前言 随着对可再生能源的需求不断增长,太阳能作为一种清洁、可持续的能源形式,受到越来越多的关注和应用。太阳能光板通常固定在一个固定的角度上,这限制了它们对太阳光的接收效率。为了充分利用太阳能资源,提高太阳能光板的…...
【踩坑及思考】浏览器存储 cookie 最大值超过 4kb,或 http 头 cookie 超过限制值
背景 本地生产环境:超过最大值 cookie token 不存储;客户生产环境:打开系统空白,且控制台报 http 400 错误; 出现了两种现象 现象一:浏览器对大于 4kb 的 cookie 值不存储 导致用户名密码登录ÿ…...
竞赛选题 深度学习实现行人重识别 - python opencv yolo Reid
文章目录 0 前言1 课题背景2 效果展示3 行人检测4 行人重识别5 其他工具6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的行人重识别算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,…...
SpringCloud Gateway实现请求解密和响应加密
文章目录 前言正文一、项目简介二、核心代码2.1 自定义过滤器2.2 网关配置2.3 自定义配置类2.4 加密组件接口2.5 加密组件实现,AES算法2.6 启动类,校验支持的算法配置 三、请求报文示例四、测试结果4.1 网关项目启动时4.2 发生请求时 前言 本文环境使用比…...
IDEA创建Springboot多模块项目
一、创建父模块 File --> New --> Project ,选择 “ Spring Initalizr ” ,点击 Next Next Next --> Finish 二、创建子模块 右键根目录,New --> Module 选择 “ Spring Initializr ”,点击Next 此处注意T…...
React:JSX语法入门
JSX语法入门及代码 JSX是一种JavaScript的语法扩展,用于在React中描述用户界面的结构。它允许开发者使用类似HTML的语法来创建React元素,使得代码更具可读性和可维护性。JSX将HTML标签和JavaScript代码结合在一起,可以在其中使用JavaScript表…...
AI大模型架构师专家,你会问什么来测试我的水平,如何解答上述问题,学习路径是什么
0. 沈剑老师的大模型产品应用经验: 提示词三步骤: 假如我是xxx专家,你会问什么来测试我的水平;假如你是xxx专家,你会如何解答上述问题;假如你是xxx专家,上述问题的学习路径是什么;…...
Dev-C调试的基本方法2-1
在Dev-C中调试程序,首先需要在程序中设置断点,之后以调试的方式运行程序。 1 设置断点 当以调试的方式运行程序时,程序会在断点处停下来。点击要设置断点代码行号左侧部分,此时会有如图1所示的红点和绿色对勾,表示断…...
Linux 调试 (objdump/strace/strings)
目录 1. Linux 调试 (objdump/strace/strings)1.1. 查看系统 glibc 版本号1.2. 查看 so/bin 中的依赖1.3. 调试 bin 报错原因1.4. 查看 so/bin 中字符串 1. Linux 调试 (objdump/strace/strings) 1.1. 查看系统 glibc 版本号 1. 第一种 # ldd --version ldd (Ubuntu GLIBC 2.…...
CAS 单点登录详解
什么是CAS? - 简要介绍CAS(Central Authentication Service)的概念和作用。 - 强调CAS的主要目标是提供单点登录和单点登出功能。 CAS的工作原理 - 深入探讨CAS的工作原理,包括认证、票据、验证等核心概念。 - 详细解释CAS服务器和…...
tbh常用的绘图快捷键
1、Altb -> 笔刷 2、Alt/ -> 画笔 3、按住Shift 绘出的线条是直线 4、按住shiftalt 绘出来的线条是水平线或垂直线 5、alte ->橡皮擦 6、alts ->选择工具 7、altq -> 轮廓编辑器 以下操作都是在选中轮廓编辑器下操作的: 按住alt…...
Android-Framework 清除应用用户数据,不清除权限
一、环境 高通865 Android 10 二、具体详情 现象:默认赋予第三方应用的权限,在应用信息中清理用户数据的时候,权限也会被清理掉; 希望:只清理数据,保留权限 相关源码修改如下: frameworks/base/servi…...
CS认证办理流程,CS认证好处
CS资质全名叫“信息系统建设和服务能力评估体系” 所谓的CS认证,是指信息系统建设和服务能力评级。认证一共划分为五个等级,等级从低到高分别用CS1级(初始级)、CS2级(基本级)、CS3级(良好级&…...
macOS 安装brew
参考链接: https://mirrors4.tuna.tsinghua.edu.cn/help/homebrew/ https://www.yii666.com/blog/429332.html 安装中科大源的: https://zhuanlan.zhihu.com/p/470873649...
H5: 使用Web Audio API播放音乐
简介 记录关于自己使用 Web Audio API 的 AudioContext 播放音乐的知识点。 需求分析 1.列表展示音乐; 2.上/下一首、播放/暂停/续播; 3.播放模式切换:循环播放、单曲循环、随机播放; 4.播放状态显示:当前播放的音乐…...
Parasoft C/C++test:汽车网络安全ISO 21434最佳实践
为什么汽车网络安全很重要Why Automotive Cybersecurity Is Important 许多汽车公司向电子道路车辆的转变从根本上改变了整个行业,提高了汽车的互联性和智能性。随着电子汽车变得更加互联和智能,它们也越来越依赖软件来实现车辆操作,驱动更多…...
如何卸载干净 IDEA(图文讲解)windows和Mac教程
大家好,我是sun~ 很多小伙伴会问 Windows / Mac 系统上要怎么彻底卸载 IDEA 呢? 本文通过图片文字,详细讲解具体步骤: 如何卸载干净 IDEA(图文讲解) Windows1、卸载 IDEA 程序2、注册表清理3、残留清理 M…...
Docker搭建Gitlab
拉取镜像:docker pull gitlab/gitlab-ce创建映射目录: mkdir -p /usr/local/gitlab/config mkdir -p /usr/local/gitlab/data mkdir -p /usr/local/gitlab/logs运行容器: docker run -d -p 443:443 -p 8000:8000 -p 222:22 --name gitlab …...
STM32F4X SDIO(四) SDIO控制器
STM32F4X SDIO(四) SDIO控制器 STM32F4X SDIO控制器SDIO控制器框图SDIO控制器时钟适配器寄存器FIFO控制单元命令路径数据路径 SDIO寄存器SDIO控制相关寄存器SDIO电源控制寄存器 (SDIO_POWER)SDIO时钟控制寄存器 (SDIO_CLKCR)SDIO_CK相位 SDIO命令响应相关…...
Phi-3 Mini 128K应用场景:技术团队内部知识沉淀问答系统
Phi-3 Mini 128K应用场景:技术团队内部知识沉淀问答系统 1. 技术团队的知识管理痛点 在快节奏的技术开发环境中,团队经常面临这样的困境:新成员加入时需要花费大量时间熟悉项目历史,关键问题的解决方案分散在各个聊天记录和邮件…...
Legacy iOS Kit:让旧款iOS设备重获新生的全方位解决方案
Legacy iOS Kit:让旧款iOS设备重获新生的全方位解决方案 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 旧设…...
递归对抗驱动的活系统:九层架构设计理念与理论体系构建【世毫九实验室原创理论】
递归对抗驱动的活系统:九层架构设计理念与理论体系构建方见华世毫九实验室摘要本文提出完整的活系统理论框架,以“系统持续生存与自主演化”为核心第一性原理,突破传统复杂系统、人工智能与偏微分方程理论中“追求稳定、消除矛盾、收敛最优”…...
3大核心方案破解戴森电池固件限制:让你的吸尘器重获新生
3大核心方案破解戴森电池固件限制:让你的吸尘器重获新生 【免费下载链接】FU-Dyson-BMS (Unofficial) Firmware Upgrade for Dyson V6/V7 Vacuum Battery Management System 项目地址: https://gitcode.com/gh_mirrors/fu/FU-Dyson-BMS 问题溯源:…...
WaveTools终极指南:免费解锁《鸣潮》流畅体验的完整解决方案
WaveTools终极指南:免费解锁《鸣潮》流畅体验的完整解决方案 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 还在为《鸣潮》游戏卡顿、帧率不稳而烦恼吗?WaveTools鸣潮工具箱为你带…...
5分钟搞定专业级黑苹果配置:OpCore Simplify智能工具让复杂EFI构建化繁为简
5分钟搞定专业级黑苹果配置:OpCore Simplify智能工具让复杂EFI构建化繁为简 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 开篇痛点直击&…...
Flink 1.11.2 + ClickHouse实战:手把手教你搭建实时商品浏览看板(附Tableau自动刷新技巧)
Flink ClickHouse 实时商品热度分析系统:从数据管道到自动刷新看板的完整实践 电商运营团队每天最关心的问题之一,就是哪些商品正在被用户频繁浏览。这些实时数据如果能快速转化为可视化的热力图,就能帮助运营人员及时调整推荐策略、优化库存…...
安装即实战,用快马平台生成集成openclaw的数据采集与分析示例项目
最近在做一个数据采集相关的项目,需要用到openclaw这个工具。说实话,刚开始安装和集成的时候踩了不少坑,后来发现InsCode(快马)平台可以一键生成完整的实战项目,简直不要太方便。今天就把我的经验分享给大家,希望能帮到…...
遇到复杂车线桥耦合分析总被建模效率卡脖子?试试Simpack+Abaqus/ANSYS这套组合拳,咱们直接上干货聊聊那些提效黑科技
simpack abaqus ansys车线桥耦合高效建模分析工具 1.快速生成非线性柔性轨节点处mark 2.桥梁纵向轨底处的对应的mark及坐标 3.快速建立力元并设置preload方向 4.免安装运行环境点击exe输入 5.基于ansys或者abaqus和simpack联合仿真的5跨、3跨简支梁车线桥耦合分析实例轨节点标记…...
XUnity.AutoTranslator:打破Unity游戏语言壁垒的开源解决方案
XUnity.AutoTranslator:打破Unity游戏语言壁垒的开源解决方案 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 当你面对一款内容精彩但语言不通的Unity游戏时,是否曾因语言障碍而错…...
