2024-09-02
售卖作品
00

目录

功能
接线示意图
效果图
原理
帮助、问询

功能

硬件 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显示屏进行实时显示。

c
/* * 主系统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

帮助、问询

csharp
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!