功能
硬件
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显示屏进行实时显示。
#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;
CLOCK_INIT();
OLED_Init();
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;
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