【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
相关推荐
星夜夏空993 小时前
STM32单片机学习(32) —— ADC
stm32·单片机·学习
芯岭技术郦5 小时前
批量不到1元,芯岭技术集成 2.4G 射频32 位 MCU 与 USB2.0的超低功耗 SoC XL2417U
单片机·嵌入式硬件·射频工程
三品吉他手会点灯9 小时前
STM32F103 学习笔记-22-DMA(第1节)-DMA功能框图讲解和DMA初始化结构体讲解
笔记·stm32·单片机·嵌入式硬件·学习
陌上花开缓缓归以11 小时前
定时器和延时函数选型
单片机
ThornArmor12 小时前
【控制篇】斩断无休止空转:4-bit 指令集里的跳转律令与时序状态机
c语言·汇编·c++·单片机·嵌入式硬件
篮子里的玫瑰12 小时前
STM32/MCU【IAP在线升级】全流程深度解析与实战指南
stm32·单片机·嵌入式硬件
深圳市青牛科技实业有限公司12 小时前
D3815C30V/0.8A高调光比 LED恒流驱动器介绍
单片机·嵌入式硬件·人机交互·摄像机
Plankton_Li13 小时前
嵌入式国密加密:STM32L4 + MIRACL 库实现 SM2 加解密
stm32·单片机·嵌入式软件
高速上的乌龟13 小时前
Lattice LFCPNX-100 HSB+Fpga开发详解:2.2 Marvell MV-Q3244 Phy的Podl电路详解
单片机·嵌入式硬件·fpga开发·软件工程
nuoxin11413 小时前
HI3516CRNCV610-20S/富利威
网络·人工智能·单片机·嵌入式硬件·硬件工程