【单片机】MSP430单片机,msp430f5529,DHT11 温湿度检测仪,上限报警,单击双击判定,OLED

news2024/11/24 10:35:52

文章目录

  • 功能
  • 接线示意图
  • 效果图
  • 原理

功能

硬件
IIC OLED 0.96寸
无源蜂鸣器 低电平触发
DHT11 温湿度传感器
板子上的2个按键
板子上的2个灯

功能:
1 显示温湿度
2 按键单击双击识别
3 按键修改温湿度,双击选择某一个设置项目,单击进行加或者减
4 温湿度任意一个数值大于设定值后蜂鸣器报警,P1.0小灯亮
5 P4.7小灯一直闪烁 表示处于工作中

接线示意图

在这里插入图片描述

效果图

在这里插入图片描述

原理

部分代码:

这段代码是一个温湿度报警仪系统的主程序,功能是通过连接DHT11温湿度传感器和OLED显示屏,实时监测环境的温度和湿度,并根据设定的温湿度上限进行报警。

代码中首先包含了一些引用的头文件,然后定义了一些全局变量和宏定义。接下来是一些函数的声明。

在main函数中,首先对时钟系统进行初始化,然后初始化OLED显示屏,显示初始界面。接着初始化LED灯和定时器,并开始主循环。

主循环中,首先检查是否到达定时时间,并进行相应的处理。然后读取按键的值,如果有按键按下,则根据按键的值进行操作,并更新显示屏上的内容。最后通过延时等待一段时间后继续循环。

其中,receive_init()函数用于初始化DHT11传感器,包括发出启动信号、接收温湿度数据并进行校验。receive()函数用于接收DHT11传感器发送的一个字节的数据。

其他的函数包括一些初始化操作,例如初始化LED灯、1秒定时器、按键等,以及一些辅助函数用于处理数据和更新显示屏内容。

总的来说,这段代码实现了一个简单的温湿度报警系统,通过DHT11传感器检测环境温湿度并根据设定的上限进行报警,同时通过OLED显示屏进行实时显示。

/*
 * 主系统4MHZ smclk 1mhz aclk 32768HZ
 *
 * OLED  SCL--P3.0 SDA--P3.1 VCC--3.3V  GND--GND
 * beep DAT--P2.4 VCC--3.3V  GND--GND 无源 低电平触发
 * DHT11 DAT--P4.1  VCC--3.3 GND--GND
 * 注意 DHT11不是那种快速的传感器 是比较居家的那种
 *    读取DHT11的间隔时间要大于1s,不然这传感器工作不正常
 *    所以在程序里设定了2s钟 系统检测一次温湿度
 *    当程序下载后,需要断电系统重新上电,为了让DHT11重新上电工作。
 *
 *
 */
#include <msp430.h>
#include "OLED.h"
#include "key.h"

unsigned char warn_temp_h = 30, warn_humd_h = 50;
unsigned char disp[16];
char count = 0;
unsigned char time, key, setting = 0;

unsigned char over_flag = 0;

#define CPU_F ( (double) 4000000)
#define delay_us(x)   __delay_cycles( (long) (CPU_F * (double) x / 1000000.0) ) /* 微秒延时程序 */
#define delay_ms(x)   __delay_cycles( (long) (CPU_F * (double) x / 1000.0) )

#define HIGH    P4OUT   |= BIT1
#define LOW P4OUT   &= ~BIT1

unsigned char temph, templ, humdh, humdl, check, cal;


void main(void)
{
    WDTCTL = WDTPW | WDTHOLD; /* Stop watchdog timer */
    CLOCK_INIT();
    OLED_Init(); /* OLED初始化 */
    oled_init_disp();
    init_led();
    init_1s_timer();
    oled_disp();
    init_key();

    _EINT();
    while (1)
    {
        if (over_flag)
        {
            _DINT();
            over_flag = 0;
            /* 如果读取到了 并且校验成功 */
            if (receive_init() == 1)
            {
                oled_disp_dht11();
                if ((humdh > warn_humd_h) || (temph > warn_temp_h))
                {
                    P1OUT |= BIT0; /* 点亮 */
                    open_beep();
                }
                else
                {
                    P1OUT &= ~BIT0; /* 熄灭 */
                    close_beep();
                }
            }
            _EINT();
        }
        time++;
        if (time > 10)
        {
            time = 0;
            //p4.7
            P4OUT ^= BIT7;
        }
        delay_ms(10);
        key = get_key();
        if (key)
        {
            //显示按键
            count = 0;
            disp[count++] = key % 100 / 10 + '0';
            disp[count++] = key % 10 / 1 + '0';
            disp[count++] = 0;
            OLED_ShowString(0, 0, disp, 0);

            //处理按键
            do_key(key);
        }
    }
}

#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0()
{
    over_flag = 1;
}


全部代码:dt2.8tupian.net/2/28880a20b16800.pg3

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

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

相关文章

Python(五):print函数详解

❤️ 专栏简介&#xff1a;本专栏记录了我个人从零开始学习Python编程的过程。在这个专栏中&#xff0c;我将分享我在学习Python的过程中的学习笔记、学习路线以及各个知识点。 ☀️ 专栏适用人群 &#xff1a;本专栏适用于希望学习Python编程的初学者和有一定编程基础的人。无…

Redis 高频面试题 2023 最新版

Redis 高频面试题 2023 最新版 文章目录 Redis 高频面试题 2023 最新版一、Redis缓存相关1. 什么是缓存穿透&#xff1f;如何解决2. 什么是缓存击穿&#xff1f;如何解决 一、Redis缓存相关 1. 什么是缓存穿透&#xff1f;如何解决 是什么 缓存穿透就是根据某条件查询一个数据…

C++STL:顺序容器之forward_list

文章目录 1. 概述2. 成员函数和使用forward_list容器相关的函数 3. forward_list 容器的创建 1. 概述 forward_list 是 C 11 新添加的一类容器&#xff0c;其底层实现和 list 容器一样&#xff0c;采用的也是链表结构&#xff0c;只不过 forward_list 使用的是单链表&#xff…

解决ubuntu cuda版本nvcc -V和nvidia-smi不一致问题

在使用nvcc -V和nvidia-smi查看cuda版本时不一致&#xff1a; nvcc -V版本是10.1 nvidia-smi的版本是12.2 上面如果能显示版本&#xff0c;所以是已经有驱动&#xff0c;首先要删除之前的驱动&#xff1a; 1、执行以下命令&#xff0c;删除旧版本的驱动 sudo apt-get purge …

数据库用户管理

一 目录 一 新建用户 二 用户名的改变 三 删除用户 四 修改用户密码root用户 五 忘记mysql的密码时候怎么办 六 数据库的权限赋予 ​编辑 七 查询用户名的权限 八 权限的撤销 九总结 新建用户 CREATE USER 用户名来源地址 [IDENTIFIED BY [PASSWORD] 密码]; 只是一个用…

node中表单验证捕获第三方库

1.安装 npm install escook/express-joi npm install joi17.4.0 2.使用 2.1创建一个schema文件夹 说明&#xff1a;用于表单规则集&#xff0c;设置表单的规划的 // 导入定义验证的包 const joi require("joi");// 定义用户名和密码的验证规则 const username j…

数据结构(王卓版)——初识数据结构

一、数据结构讲什么&#xff1a; 程序数据结构算法 数据结构的基础以及数据结构的应用方向。 数据、数据元素、数据项、数据对象 数据结构 逻辑结构的种类 存储结构种类 主要学习顺序和链式存储结构。 有时间可以了解&#xff0c;不用重点学。 数据类型&#xff1a; 抽象数据类…

win11利用start11实现全屏菜单,磁贴配置

Win11磁贴配置 最近电脑还是升级到 win11 了。我之前采用的美化方案是桌面上的图标全部移到 win10 开始菜单里的全屏菜单上&#xff0c;用磁贴贴一排。每次要访问文件的时候都去开始菜单里找&#xff0c;而不是放在桌面上&#xff0c;这样桌面也可以空出来欣赏壁纸。参考配置链…

数据库压力测试方法概述

一、前言 在前面的压力测试过程中&#xff0c;主要关注的是对接口以及服务器硬件性能进行压力测试&#xff0c;评估请求接口和硬件性能对服务的影响。但是对于多数Web应用来说&#xff0c;整个系统的瓶颈在于数据库。 原因很简单&#xff1a;Web应用中的其他因素&#xff0c;…

MSP430F249 Proteus仿真智能刷卡计时计费水表系统 -0070

MSP430F249 Proteus仿真智能刷卡计时计费水表系统 -0070 Proteus仿真小实验&#xff1a; MSP430F249 Proteus仿真智能刷卡计时计费水表系统 -0070 功能&#xff1a; Protues版本&#xff1a;8. 9 程序编写&#xff1a;IAR 7.10 硬件组成&#xff1a;MSP430F249 单片机 …

auc的计算方法

方法一 用指示函数表示上式中正样本预测值大于负样本预测值的正负样本对&#xff0c;则得到 p表示预测得分。 在给出的例子中&#xff0c;包含有2个正样本(A, B)和3个负样本(C, D, E)&#xff0c;因此一共有6个(2*3)正负样本对&#xff0c;即公式中分母为6。 接下来计算公式…

Rogue DHCP Server攻击(仿冒DHCP Server攻击)

目录 事件原理 DHCP 仿冒攻击 防护方法 事件原理 攻击原理:攻击者仿冒DHCP Server向客户端分配错误的IP地址以及错误的网关等信息,导致用户无法正常的访问网络。漏洞分析:DHCP客户端收到DHCP Server的DHCP消息之后,无法区分这些DHCP消息是来自仿冒的DHCP Server还是…

【NLP】BERT和原理揭示

一、说明 BERT&#xff08;来自transformer的双向编码器表示&#xff09;是Google AI Language研究人员最近发表的一篇论文。它通过在各种NLP任务中展示最先进的结果&#xff0c;在机器学习社区引起了轰动&#xff0c;包括问答&#xff08;SQuAD v1.1&#xff09;&#xff0c;自…

PostgreSQL如何设置主键自增?

本文主题&#xff1a;采用Navicat 连接pgSQL库&#xff0c;如何创建表&#xff0c;如何设置主键自增&#xff1f; 1. 如何通过Navicat 连接pgSQL创建表 详细创建过程可以参考天翼云文章&#xff1a; 参考链接&#xff1a;https://www.ctyun.cn/document/10000047/10030641 2…

一篇完整学习JUC并发编程(包含实例源码)

文章目录 JUC并发编程1、什么是JUC?2、线程和进程并发、并行线程有几个状态&#xff1f; 6个wait/sleep区别&#xff1f; 3、Lock锁传统sychronized锁卖票实例使用Lock锁卖票实例sychnorized 和 lock锁区别 4、生产者和消费者问题synorchized版生产者和消费者问题虚假唤醒问题…

【UT学习记录】

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 Part1&#xff1a;Mock Part2&#xff1a;PowerMock Part3:Junit 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文…

Linux进程信号(二)

信号保存与捕捉 1.相关概念2.信号在内核中的示意图3.信号集4.信号集操作函数5.内核态与用户态6.信号捕捉7.sigaction8.可重入函数8.volatile9.SIGCHLD信号 &#x1f31f;&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f;&#x1f31f; &#x1f680;&#…

hbuilderX自定义主题仿vscode暗黑主题

目录 hbuilderX自定义主题仿vscode暗黑主题 效果图 设置方式&#xff08;把主题代码复制进来即可&#xff09; 是基于雅蓝主题自定义的 设置好后需要切换到雅蓝主题 hbuilderx保存时自动整理代码 1.首先在顶部栏&#xff0c;找到工具&#xff0c;打开设置 2.点击旁边的编…

uniapp做微信小程序,自定义checkbox和radio的样式

用uniapp做个微信小程序&#xff0c;其中有用到自定义checkbox和radio的样式&#xff1b;代码记录如下&#xff1a; 自定义checkbox 在App.vue中写入样式&#xff1a; checkbox.red .wx-checkbox-input,checkbox.red .uni-checkbox-input {background-image: url(/static/ima…

MySQL锁定:死锁及其避免方法

文章目录 一、MySQL锁定和并发控制的重要性二、MySQL锁机制回顾2.1 锁类型&#xff1a;共享锁和排他锁2.2 锁粒度&#xff1a;行级锁和表级锁 三、死锁的原因和场景四、检测和解决死锁4.1 死锁检测算法4.2 死锁处理策略4.3 手动处理死锁 五、死锁的预防和避免分布式环境下&…