2024-09-01
售卖作品
00

目录

功能
部分程序
全部程序

功能

/*

  • 硬件:DS18B20+OLEDIIC+绿灯+红灯+一个按键+蜂鸣器+加热片

  • 功能:

  • 1 显示温度

  • 2 显示临界值,按键可以加减临界值,临界值在20~35之间可调。

  • 3 实际温度高于(临界值+1)后绿灯亮表示降温。

  • 4 实际温度低于(临界值-1)后加热片工作表示加热。

  • 5 实际温度高于35摄氏度无源蜂鸣器报警。

  • 6 设置温度时候,临界值高于30摄氏度,红灯亮,提醒避免设置温度过高。

  • LINE:

  • DS18B20: VCC-VCC DS-P15 GND-GND

  • OLED

    VCC-VCC SCL-P20 SDA-P21

  • BUZZER

    GND-GND IN-P22

  • JIAREPIAN

    GND-GND IN-P23

  • KEY

  • GREEN LED

  • RED LED

*/

部分程序

cpp
int main( void ) { unsigned char dis[10]; unsigned char time_cyc = 0; 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 * / */ /* 初始化显示 */ OLED_Init(); /* OLED初始化 */ OLED_ShowString( 0, 0, "DS18B20:" ); OLED_ShowString( 0, 4, "SET:" ); display_set_temp(); /* 10MS */ CCTL0 = 0; /* CCR0 interrupt enabled */ CCR0 = 10000; /* 10ms */ TACTL = TASSEL_2 + MC_2 + ID_3; /* SMCLK, contmode */ _EINT(); /*按键端口 */ P1DIR &= ~BIT3; P1SEL &= ~BIT3; P1SEL2 &= ~BIT3; P1REN |= BIT3; P1OUT |= BIT3; /* 绿灯端口 */ P1DIR |= BIT6; /* 红灯端口 */ P1DIR |= BIT0; /* 蜂鸣器端口 PWM:当TA1CCR1=500 蜂鸣器响,当TA1CCR1=0,蜂鸣器不响 */ P2DIR |= BIT2; P2SEL |= BIT2; /* 加热片端口 */ P2DIR |= BIT3; while ( 1 ) { CCTL0 = CCIE; LPM0; time_cyc = (time_cyc + 1) % 30; if ( time_cyc == 1 ) /* 30 个10ms执行一次 */ { temp_value = get_one_temperature(); /* 读取温度 */ dis[0] = temp_value % 1000 / 100 + '0'; dis[1] = temp_value % 100 / 10 + '0'; dis[2] = '.'; dis[3] = temp_value % 10 + '0'; dis[4] = 'C'; dis[5] = 0; OLED_ShowString( 0, 2, dis ); } /* 以下是根据温度控制 */ if ( temp_value > (set_temp + 10) ) /* 3 实际温度高于(临界值+1)后绿灯亮表示降温。 */ { P1OUT |= BIT6; /* 高电平 绿灯点亮 */ P2OUT |= BIT3; /* 加热片不工作 */ OLED_ShowString( 0, 6, "cooling" ); }else if ( temp_value < (set_temp - 10) ) /* 4 实际温度低于(临界值-1)后加热片工作表示加热。 */ { P1OUT &= ~BIT6; /* 绿灯不亮 */ P2OUT &= ~BIT3; /* 低电平 加热片工作 */ OLED_ShowString( 0, 6, "heating" ); }else { P1OUT &= ~BIT6; /* 绿灯不亮 */ P2OUT |= BIT3; /* 加热片不工作 */ OLED_ShowString( 0, 6, " " ); } /* 5 实际温度高于35摄氏度无源蜂鸣器报警。 */ if ( temp_value > 350 ) { TA1CCR1 = 500; /* PWM占空比 500/1000 蜂鸣器响 */ }else { TA1CCR1 = 0; } /* 6 设置温度时候,临界值高于30摄氏度,红灯亮,提醒避免设置温度过高。 */ if ( set_temp > 300 ) { P1OUT |= BIT0; /* 高电平 红灯点亮 */ }else { P1OUT &= ~BIT0; } /* 以下是按键处理 2 显示临界值,按键可以加减临界值,临界值在20~35之间可调。 */ if ( time_key == 0 ) { if ( double_key_ifg == 0 ) { if ( (P1IN & BIT3) == 0 ) { while ( (P1IN & BIT3) == 0 ) ; /* 当循环 等待按键松开 */ time_key = 10; /* 时间内双击按键检测 */ double_key_ifg = 1; } }else { double_key_ifg = 0; /*上次按过 这次恢复到0 是单击 */ /* 单击按键处理 */ if ( set_temp < 350 ) { set_temp += 10; } display_set_temp(); } }else { if ( double_key_ifg == 1 ) /*上次按过 时间内再次按了 */ { if ( (P1IN & BIT3) == 0 ) { while ( (P1IN & BIT3) == 0 ) ; /* 当循环 等待按键松开 */ double_key_ifg = 0; time_key = 0; /* 双击按键处理 */ if ( set_temp > 200 ) { set_temp -= 10; } display_set_temp(); } } } } }

全部程序

cpp
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

在这里插入图片描述

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

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