【TB作品】MSP430G2553单片机,读取dht11,读取ds18b20,温度报警器

功能

读取dht11温湿度显示到oled

读取ds18b20温度显示到oled

按键修改温度上限

温度超出温度上限就蜂鸣器报警

硬件接法

oled接法 0.96 寸 7针 oled

// GND 电源地

// VCC 3.3v电源

// D0 P23(时钟)

// D1 P24(数据)

// RES 接P21

// DC 接P22

// CS 接P20

ds18b20

// GND 电源地

// VCC 3.3v电源

// DATA P1.5

DHT11

// GND 电源地

// VCC 3.3v电源

// DATA P1.4

按键1 P1.6

按键2 P1.7

有源蜂鸣器低电平触发 接P1.3

部分代码

cpp 复制代码
int main(void) {
	uchar o;
	uchar count = 0;
	uint warn_temp = 270;      //报警温度

	WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

	if (CALBC1_8MHZ == 0xFF)				// If calibration constant erased
			{
		while (1)
			;                               // do not load, trap CPU!!
	}
	DCOCTL = 0;                          // Select lowest DCOx and MODx settings
	BCSCTL1 = CALBC1_8MHZ;                    // Set range
	DCOCTL = CALDCO_8MHZ;                     // Set DCO step + modulation */

	P1DIR |= BIT3;                     //BEEP
	P1OUT |= BIT3;                     //CLOSE

	P1DIR &= ~(BIT6 + BIT7); //KEY1 KEY2
	P1REN |= BIT6 + BIT7;
	P1OUT |= BIT6 + BIT7;

	OLED_Init();        //初始化OLED
	OLED_Clear();
	OLED_ShowString(40, 0, "SYSTEM");

	DS18b20_Init();

	//初始化显示报警温度
	memset(dis_str, 0, 15);
	count = 0;
	dis_str[count++] = warn_temp % 1000 / 100 + '0';
	dis_str[count++] = warn_temp % 100 / 10 + '0';
	dis_str[count++] = '.';
	dis_str[count++] = warn_temp % 10 + '0';
	dis_str[count++] = 'C';
	dis_str[count++] = 0;
	OLED_ShowString(0, 4, dis_str);

	while (1) {
		temp_value = get_one_temperature();

		o = start_DHT11();

		if (o) {
			memset(dis_str, 0, 15);
			count = 0;
			dis_str[count++] = temp_value % 1000 / 100 + '0';
			dis_str[count++] = temp_value % 100 / 10 + '0';
			dis_str[count++] = '.';
			dis_str[count++] = temp_value % 10 + '0';
			dis_str[count++] = 'C';
			dis_str[count++] = ' ';
			dis_str[count++] = ' ';
			dis_str[count++] = DHT11RH_Data_H % 100 / 10 + '0';
			dis_str[count++] = DHT11RH_Data_H % 10 + '0';
			dis_str[count++] = '%';
			dis_str[count++] = 'R';
			dis_str[count++] = 'H';
			dis_str[count++] = 0;
			OLED_ShowString(0, 2, dis_str);
		}

		if ((P1IN & BIT6) == 0) {
			delay_ms(3);
			if ((P1IN & BIT6) == 0) {
//				while ((P1IN & BIT6) == 0)
//					;
				warn_temp++;
				//初始化显示报警温度
				memset(dis_str, 0, 15);
				count = 0;
				dis_str[count++] = warn_temp % 1000 / 100 + '0';
				dis_str[count++] = warn_temp % 100 / 10 + '0';
				dis_str[count++] = '.';
				dis_str[count++] = warn_temp % 10 + '0';
				dis_str[count++] = 'C';
				dis_str[count++] = 0;
				OLED_ShowString(0, 4, dis_str);

			}
		}
		if ((P1IN & BIT7) == 0) {
			delay_ms(3);
			if ((P1IN & BIT7) == 0) {
//				while ((P1IN & BIT7) == 0)
//					;
				warn_temp--;
				//初始化显示报警温度
				memset(dis_str, 0, 15);
				count = 0;
				dis_str[count++] = warn_temp % 1000 / 100 + '0';
				dis_str[count++] = warn_temp % 100 / 10 + '0';
				dis_str[count++] = '.';
				dis_str[count++] = warn_temp % 10 + '0';
				dis_str[count++] = 'C';
				dis_str[count++] = 0;
				OLED_ShowString(0, 4, dis_str);

			}
		}

		if (temp_value > warn_temp) {
			P1OUT &= ~BIT3;
		} else {
			P1OUT |= BIT3;                     //CLOSE

		}

		delay_ms(10);

	}

}

全部代码

cpp 复制代码
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
相关推荐
1+2单片机电子设计14 分钟前
基于 STM32 的数控 BUCK-BOOST 升降压电源设计
stm32·单片机·嵌入式硬件
SUNNYSPY00114 分钟前
SI2301S-ASEMI工业控制专用SI2301S
单片机
易水寒陈1 小时前
解析器模式,解析不同协议
stm32·单片机
1379号监听员_1 小时前
PID定速/定位置控制电机
stm32·单片机
SystickInt2 小时前
32 LCD显示(FSMC应用)-寄存器
stm32·单片机·嵌入式硬件
d111111111d2 小时前
C语言中static修斯局部变量,全局变量和函数时分别由什么特性
c语言·javascript·笔记·stm32·单片机·嵌入式硬件·学习
逐步前行3 小时前
C51_74HC595串口转并口
单片机·嵌入式硬件
阿拉斯攀登5 小时前
STM32 架构概述
stm32·单片机·架构
物联网牛七七5 小时前
STM32 EXTI(外部中断)详解
stm32·单片机·嵌入式硬件·exti
发光小北5 小时前
SG-TCP232-110(单通道串口服务器)特点与功能介绍
服务器·网络·单片机