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


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!