【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
相关推荐
小禾苗_26 分钟前
32单片机——GPIO配置步骤
单片机
四夕白告木贞10 小时前
stm32week12
stm32·单片机·嵌入式硬件·学习
xx155802862xx10 小时前
STM32实现2小时延时的最佳方法探讨
单片机·嵌入式硬件
许有杨12 小时前
STM32 的 GPIO和中断
stm32·单片机·嵌入式硬件
轩辰~12 小时前
STM32F103系列单片机寄存器操作和标准库操作
stm32·单片机·嵌入式硬件
小禾苗_14 小时前
32单片机——外部中断
单片机·嵌入式硬件
昊昊昊昊昊明14 小时前
10天学会嵌入式技术之51单片机-day-8
单片机·嵌入式硬件
昊昊昊昊昊明14 小时前
10天学会嵌入式技术之51单片机-day-6
单片机·物联网·51单片机
优信电子14 小时前
GC9A01-TFT屏幕驱动(整理有stm32/51单片机/arduino等驱动代码)
单片机
二块烧肉15 小时前
STM32 串口USART
stm32·单片机·嵌入式硬件