【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 小时前
stm32 PWR电源控制(修改主频&睡眠模式&停机模式&待机模式)
stm32·单片机·嵌入式硬件
JT灬新一1 小时前
STM32巡回研讨会总结(2024)
stm32·单片机·嵌入式硬件
Whappy0012 小时前
51单片机-DA(数字转模拟)
单片机·嵌入式硬件·51单片机
Whappy0012 小时前
51单片机-AD(模拟信号转数字信号)-实验()
单片机·嵌入式硬件·51单片机
辰哥单片机设计15 小时前
门磁模块详解(防盗感应开关 STM32)
stm32·单片机·嵌入式硬件·传感器
yrx02030716 小时前
stm32 IIC总线busy解决方法
stm32·单片机·嵌入式硬件
YHPsophie17 小时前
ATGM331C-5T杭州中科微BDS/GNSS全星座定位授时模块应用领域
经验分享·笔记·单片机·信息与通信·交通物流
Archie_IT18 小时前
【STM32系统】基于STM32设计的SD卡数据读取与上位机显示系统(SDIO接口驱动、雷龙SD卡)——文末资料下载
arm开发·stm32·单片机·嵌入式硬件
辰哥单片机设计18 小时前
1×4矩阵键盘详解(STM32)
stm32·单片机·嵌入式硬件·矩阵·传感器