功能
读取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