2024-09-01
售卖作品
00

目录

作品功能
作品的硬件材料
电子元器件连接
部分代码
全部代码

作品功能

本项目设计并实现了一个基于MSP430单片机的智能温控系统。系统可以实时显示当前温度,并且可以根据设置的临界值对环境进行加热或降温。主要功能如下:

  1. 实时显示当前温度。

  2. 显示并调整温度临界值,临界值可在20~35摄氏度之间调节。

  3. 当前温度高于(临界值+1)摄氏度时,绿灯亮,表示降温状态。

  4. 当前温度低于(临界值-1)摄氏度时,加热片工作,表示加热状态。

  5. 当前温度高于35摄氏度时,蜂鸣器报警。

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

作品的硬件材料

  1. MSP430F5529 单片机

  2. DS18B20温度传感器

  3. OLED显示屏(IIC接口)

  4. 绿灯(LED) 板子上有

  5. 红灯(LED) 板子上有

  6. 无源蜂鸣器

  7. 加热片

电子元器件连接

各元器件的连接如下:

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

  • OLED:GND - GND, VCC - VCC, SCL - P20, SDA - P22

  • 蜂鸣器:VCC - VCC, GND - GND, IN - P36

  • 加热片:VCC - VCC, GND - GND, IN - P23

  • 按键:P21, P11

  • 绿灯:P47

  • 红灯:P10

部分代码

dart
int main(void) { unsigned char dis[10]; unsigned char time_cyc = 0; WDTCTL = WDTPW + WDTHOLD; /* Stop WDT */ /* 初始化显示 */ OLED_Init(); /* OLED初始化 */ OLED_ShowString(0, 0, "DS18B20:"); OLED_ShowString(0, 4, "SET:"); display_set_temp(); /*按键端口 */ P1DIR &= ~BIT1; P1SEL &= ~BIT1; P1REN |= BIT1; P1OUT |= BIT1; P2DIR &= ~BIT1; P2SEL &= ~BIT1; P2REN |= BIT1; P2OUT |= BIT1; /* 绿灯端口 */ P4DIR |= BIT7; /* 红灯端口 */ P1DIR |= BIT0; /* 蜂鸣器端口 P3.6*/ P3SEL |= BIT6; // P3.5-7.6 option select P3DIR |= BIT6; // P3.5-7.6 outputs /* 加热片端口 */ P2DIR |= BIT3; while (1) { delay_ms(10); 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)后绿灯亮表示降温。 */ { P4OUT |= BIT7; /* 高电平 绿灯点亮 */ P2OUT |= BIT3; /* 加热片不工作 */ OLED_ShowString(0, 6, "cooling"); } else if (temp_value < (set_temp - 10)) /* 4 实际温度低于(临界值-1)后加热片工作表示加热。 */ { P4OUT &= ~BIT7; /* 绿灯不亮 */ P2OUT &= ~BIT3; /* 低电平 加热片工作 */ OLED_ShowString(0, 6, "heating"); } else { P4OUT &= ~BIT7; /* 绿灯不亮 */ P2OUT |= BIT3; /* 加热片不工作 */ OLED_ShowString(0, 6, " "); } /* 5 实际温度高于35摄氏度无源蜂鸣器报警。 */ if (temp_value > 350) { TBCCR6 = 500; //打开蜂鸣器 /* PWM占空比 500/1000 蜂鸣器响 */ } else { TBCCR6 = 0; //关闭打开蜂鸣器 } /* 6 设置温度时候,临界值高于30摄氏度,红灯亮,提醒避免设置温度过高。 */ if (set_temp > 300) { P1OUT |= BIT0; /* 高电平 红灯点亮 */ } else { P1OUT &= ~BIT0; } /* 以下是按键处理 2 显示临界值,按键可以加减临界值,临界值在20~35之间可调。 */ //按键1检测处理 if (!(P1IN & BIT1)) { while (!(P1IN & BIT1)) ; if (set_temp < 350) { set_temp += 10; } display_set_temp(); } //按键2检测处理 if (!(P2IN & BIT1)) { while (!(P2IN & BIT1)) ; if (set_temp > 200) { set_temp -= 10; } display_set_temp(); } } }

全部代码

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

在这里插入图片描述

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

本文作者:Dong

本文链接:

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