一、前言在前面的文章中我们使用雨滴传感器的 AO 模拟量输出通过 ADC 获取雨滴传感器的模拟数据并使用4位数码管显示 ADC 转换结果。除了 AO 模拟输出之外常见的雨滴传感器模块还提供 DO 数字输出可以直接根据传感器的阈值判断当前是否检测到雨滴。本文使用 HRTOS 在 8051 单片机上实现一个简单的雨滴检测应用读取雨滴传感器 DO 数字量判断当前是否检测到雨滴使用4位数码管显示检测状态将传感器读取和显示分别设计为独立任务最终显示效果0000检测到雨滴 0001未检测到雨滴通过这个简单的实例可以进一步了解 HRTOS 在 8051 传感器检测类应用中的基本使用方法。二、雨滴传感器 DO 输出雨滴传感器模块通常可以提供 AO 和 DO 两种输出。其中AO模拟量输出可以反映传感器检测到的雨滴变化程度DO数字量输出根据模块上的比较器阈值输出高低电平本文使用的是 DO 数字量输出。程序中约定DO 0检测到雨滴 DO 1未检测到雨滴因此应用程序并不需要进行 ADC 转换只需要读取一个数字状态即可。这种方式比较适合实现简单的开关量检测例如是否下雨 是否有人 是否有障碍物 是否触发传感器如果需要获得更加连续、精确的雨滴变化数据则可以使用前面介绍的 AO 模拟量方式。三、程序结构本实例仍然采用 HRTOS 的多任务方式组织程序。整个应用划分为两个任务┌──────────────────────────┐ │ HRTOS 应用程序 │ ├──────────────────────────┤ │ │ │ task_raindrop_read │ │ 雨滴传感器DO读取任务 │ │ │ │ │ ▼ │ │ raindrop_do │ │ │ │ │ ▼ │ │ task_seg_display │ │ 数码管显示任务 │ │ │ └──────────────────────────┘其中任务1雨滴传感器读取负责周期性调用drv_raindrop_read_do();读取传感器当前的 DO 状态。任务2数码管显示负责不断刷新4位数码管并根据raindrop_do的状态显示0000或者0001这样可以将传感器采集和数据显示分开使程序结构更加清晰。四、定义雨滴传感器状态首先定义一个变量保存雨滴传感器的 DO 状态unsigned char raindrop_do 1;初始化为1表示默认状态为未检测到雨滴传感器读取任务运行后会不断更新这个变量。五、创建雨滴传感器读取任务传感器读取任务如下void task_raindrop_read(void) { while(1) { /* 读取雨滴传感器数字量 */ raindrop_do drv_raindrop_read_do(); /* * 周期读取传感器状态 */ os_delay(50); } }任务首先调用drv_raindrop_read_do();获得当前雨滴传感器的 DO 状态。然后保存到raindrop_do变量中。读取完成之后调用os_delay(50);让当前任务延时一段时间然后再次读取。这样就形成了一个周期性的传感器采集任务读取DO ↓ 保存状态 ↓ 延时 ↓ 再次读取 ↓ 循环对于这种变化速度比较慢的传感器没有必要让任务一直高速读取因此使用周期性任务即可。六、创建数码管显示任务数码管显示任务如下void task_seg_display(void) { while(1) { /* * 显示雨滴传感器状态 * * 0000检测到雨滴 * 0001未检测到雨滴 */ drv_seg_display(0, 0); drv_seg_display(1, 0); drv_seg_display(2, 0); drv_seg_display(3, raindrop_do); } }这里前三位固定显示000最后一位显示raindrop_do。因此当raindrop_do 0;数码管显示0000表示检测到雨滴。当raindrop_do 1;数码管显示0001表示未检测到雨滴。这里没有在显示任务中调用os_delay()而是持续执行数码管刷新操作。这样可以保持动态数码管正常显示。七、初始化 HRTOS 应用系统入口函数void hrtos_main(void) { /* 初始化雨滴传感器 */ drv_raindrop_init(); /* 初始化数码管 */ drv_seg_init(); /* 创建雨滴传感器读取任务 */ os_task_create( task_raindrop_read, 2, 2, 4 ); /* 创建数码管显示任务 */ os_task_create( task_seg_display, 3, 2, 4 ); }首先初始化雨滴传感器drv_raindrop_init();然后初始化4位数码管drv_seg_init();最后创建两个任务os_task_create(task_raindrop_read, 2, 2, 4); os_task_create(task_seg_display, 3, 2, 4);这样 HRTOS 启动后就可以同时运行传感器读取任务和数码管显示任务。八、完整程序完整示例代码如下#include hrtos.h #include hrtos_hal.h /* * * 雨滴传感器DO 4位数码管显示示例 * --------------------------------------------------------- * 功能 * 1. 初始化雨滴传感器 * 2. 读取雨滴传感器数字量DO * 3. 使用4位数码管显示检测状态 * * DO状态 * 0检测到雨滴 * 1未检测到雨滴 * * 数码管显示 * 0000检测到雨滴 * 0001未检测到雨滴 * */ unsigned char raindrop_do 1; /*------------------------------------------------ * 雨滴传感器DO读取任务 *------------------------------------------------*/ void task_raindrop_read(void) { while(1) { /* 读取雨滴传感器数字量 */ raindrop_do drv_raindrop_read_do(); /* * 周期读取传感器状态 */ os_delay(50); } } /*------------------------------------------------ * 数码管显示任务 *------------------------------------------------*/ void task_seg_display(void) { while(1) { /* * 显示雨滴传感器状态 * * 0000检测到雨滴 * 0001未检测到雨滴 */ drv_seg_display(0, 0); drv_seg_display(1, 0); drv_seg_display(2, 0); drv_seg_display(3, raindrop_do); } } /** * brief 雨滴传感器DO示例初始化 */ void hrtos_main(void) { /* 初始化雨滴传感器 */ drv_raindrop_init(); /* 初始化数码管 */ drv_seg_init(); /* 创建雨滴传感器读取任务 */ os_task_create( task_raindrop_read, 2, 2, 4 ); /* 创建数码管显示任务 */ os_task_create( task_seg_display, 3, 2, 4 ); }九、HRTOS任务划分的意义这个例子虽然非常简单但它体现了一个比较典型的嵌入式任务划分方式。传统的单循环程序可能会写成while(1) { raindrop_do drv_raindrop_read_do(); drv_seg_display(0, 0); drv_seg_display(1, 0); drv_seg_display(2, 0); drv_seg_display(3, raindrop_do); }当功能继续增加以后所有功能都会堆积在一个循环中。使用 HRTOS 后可以按照功能拆分传感器任务 ↓ 负责数据采集 显示任务 ↓ 负责数据显示以后如果继续增加蜂鸣器、继电器、串口通信等功能还可以继续创建对应任务而不需要把所有代码都集中在一个while(1)中。例如可以进一步扩展为task_raindrop_read │ ├── 获取雨滴状态 │ ▼ raindrop_do │ ├───────────────┐ ▼ ▼ 显示任务 报警任务 数码管显示 蜂鸣器控制这也是 HRTOS 在实际 8051 项目中的一个重要作用将不同功能按照任务进行组织。十、DO与AO的区别雨滴传感器的 AO 和 DO 适合不同的应用场景。输出方式数据类型典型用途AO模拟量获取雨滴变化程度DO数字量判断是否达到检测阈值如果只是需要判断有没有雨那么 DO 就已经足够。如果需要进一步分析雨滴变化大小 雨量变化趋势 传感器输出曲线则可以使用 AO并通过 ADC 获取更加详细的数据。因此这两个接口并不是相互替代而是针对不同应用需求提供不同的数据形式。十一、总结本文使用 HRTOS 在 8051 单片机上实现了一个简单的雨滴传感器数字量检测实例。整个程序主要包含两个任务task_raindrop_read负责周期读取雨滴传感器 DO 状态task_seg_display负责实时刷新4位数码管。最终通过0000表示检测到雨滴通过0001表示未检测到雨滴。虽然这个实例功能比较简单但它完整体现了传感器采集任务 显示任务的基本 HRTOS 应用结构。对于 8051 这类资源有限的单片机来说通过任务划分组织应用程序可以让程序结构更加清晰也方便后续继续加入更多传感器、执行器和通信功能。后续还可以在这个基础上扩展雨滴报警、继电器控制、串口上传以及多传感器协同等功能。
企业数字化 ERP 产品动态
相关推荐
若依git仓库-转自己的 当前 origin 指向的是若依官方仓库:gitgitee.com:y_project/RuoYi-Vue.git要转到你自己的仓库,按下面做即可。1. 改远程地址git remote set-url origin gitgitee.com:feihao123/ruoyi-study.git确认一下:git remote -v应显示:orig… · 2026/9/27 7:34:52
FluentTweaker隐私优化11项:关闭Windows遥测、活动历史与位置追踪的完整指南 FluentTweaker隐私优化11项:关闭Windows遥测、活动历史与位置追踪的完整指南 【免费下载链接】FluentTweaker Windows Slop Remover 项目地址: https://gitcode.com/gh_mirrors/wi/FluentTweaker
FluentTweaker 是一款开源的 Windows 隐私与系统优化工具&… · 2026/9/27 7:34:52
springboot request wrapper + request context holder 内容简述
目的
解决servlet request InputStream body只能读取一次的问题
设置请求级别的线程变量 ThreadLocal
注意:Fitler 执行循序,以免在wrapper 初始化前,body已经消费
Request wrapper
wrapper
重写和 body 读取相关的 3 个核心方法&am… · 2026/9/27 7:34:45
open-slide 设计工程实战:基于 Emil Kowalski 动画决策框架打磨幻灯片细节体验 【免费下载链接】open-slide A slide framework built for agents. 项目地址: https://gitcode.com/gh_mirrors/op/open-slide 点击查看 免费下载 open-slide 是一款为 Agent 而生的幻灯片框架,它把"演示体验"本身当作一等公民:页… · 2026/9/27 8:24:17
2026最新解析:旅游网站建设属于什么以及学科,解决没人访问难题 2026最新解析:旅游网站建设属于什么以及学科,解决没人访问难题 网站上线三个月,后台流量曲线几乎是一条死线,每天个位数的IP,连蜘蛛抓取记录都寥寥无几。这种“网站做好了没人访问”的绝望感,是无数旅游企业建站后最真实的痛点。很多人误以为只要… · 2026/9/27 8:24:17
F2 玫瑰图(南丁格尔玫瑰图)开发指南:用极坐标半径表达数据大小 数据可视化前端 【免费下载链接】F2 📱📈An elegant, interactive and flexible charting library for mobile. 项目地址: https://gitcode.com/gh_mirrors/f2/F2 点击查看 免费下载 导读
玫瑰图(Rose Chart)&#x… · 2026/9/27 8:24:11
电脑虚拟主机避坑指南:5个关键注意事项教你省下30%预算 电脑虚拟主机避坑指南:5个关键注意事项教你省下30%预算 找建站公司怕被坑高价?别急,先看看你选的电脑虚拟主机是否踩了这些坑。很多站长花了大价钱,网站却卡得像PPT,核心问题往往出在虚拟主机的 注意事项… · 2026/9/27 8:24:05
如何攻击Wordpress站点常见报错与解决 5个WordPress安全陷阱与防御注意事项 改个需求建站公司拖一周,这种憋屈感谁懂?刚上线的WordPress站点,后台改个按钮颜色,外包团队说“底层逻辑冲突”,得排期。结果第二天网站直接变白屏,或者更糟——被黑客植入了恶意代码,SEO收… · 2026/9/27 8:23:47
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01