没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
内容概要:介绍了利用 MSP430 单片机实现一款电炉温度控制器的设计过程,详细阐述了硬件电路连接方法以及各功能模块的工作流程;同时,给出了完整的源码示例,并说明了其具体的功能和运行机制。此系统的最大特色是能够达到≤ ±2°C的精确控温,以及针对不同情况的自定义警告措施。 适合人群:具有一定编程和电路设计能力的研发工作者,尤其是嵌入式开发爱好者。 使用场景及目标:应用于需要温度控制的场合如实验室设备控制,食品加工过程的温度监控。本案例着重于实现精确稳定的温控和简易直观的显示功能,并能在异常情况下触发声光警报。 其他说明:尽管目前实现了初步的设计目的,然而因芯片引脚资源有限而造成的一些设计局限尚待进一步解决,此外,本文还讨论了一些优化方案以供未来改进参考,诸如在提高硬件集成程度的同时兼顾系统稳定性等问题亦被提及。
资源推荐
资源详情
资源评论
1.项目概述
设计一个基于 MSP430 的温度控制器,满足如下技术指标
(1)1KW 电炉加热,最度温度为 110℃C
(2)恒温箱温度可设定,温度控制误差≦+2°C
(3)实时显示温度和设置温度,显示精度为 1°℃。
(4)温度超过设置温度+5℃℃,发出超限报警(声、光),升温和降温过程不作要求。
(5)温度超过 115℃℃,报警并自动切断主回路电源开关。
(6)电炉可使用二阶系统仿真。
设计以 MSP430 为核心的控制电路,并编写相关的系统软件。
2.设计思路
由题意得出,程序接有温度传感器、蜂鸣器、LED 灯、LCD 显示屏、按钮,分别负
责温度测量、声光报警,温度显示和调整设定温度。MSP430G2553接收DS18B20的
温度信号、通过四个按键 K1、K2、K3、K4 进行设定温度和其调整、信号输入到
MSP430 后经过处理输出到LCD、蜂鸣器和 LED 灯进行温度显示和声光报警。
3.软件设计
完整代码如下:
#include <msp430g2553.h>
typedef unsigned char uchar;
typedef unsigned int uint;
//延时程序
#define CPU_F ((double)8000000)
#define
delay_us(x)_delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_ms(x)_delay_cycles((long)(CPU_F*(double)x/1000.0))
uint zeng=0;
uint jian=0;
uint he=0;
uint ge=0;
uint shi=0;
uint bai=0;
uint a[3];
//温度传感器io口定义
#define DQ1 P3OUT |= BIT4
#define DQ0 P3OUT &= ~BIT4
#define DQ_in P3DIR &= ~BIT4
#define DQ_out P3DIR |= BIT4
#define DQ_val (P3IN & BIT4)
uint data;
float temp=0;
float IntDeg=0;
uint v=0,A=0;
uint q,w,e;
#define LCD_OUT P2OUT //定义LCD1602的数据口为P2
#define CLR_RS P3OUT&=~BIT0//置零P3.0位,也就是置零RS
#define SET_RS P3OUT|=BIT0//置一P3.0位,也就是置一RS
#define CLR_RW P3OUT&=~BIT1//置零P3.1位,也就是置一RW
#define SET_RW P3OUT|=BIT1 //置一P3.1位,也就是置一RW
#define CLR_EN P3OUT&=~BIT2//置零P3.2位,也就是置零EN
#define SET_EN P3OUT|=BIT2//置一P3.2位,也就是置一EN
unsigned char busy;//1602判忙标志
void busy_1602()//查询忙碌标志信号程序
{
do
{
CLR_EN;
SET_RW;
CLR_RS;
busy=LCD_OUT;
SET_EN;
delay_ms(1);
CLR_EN;
delay_ms(1);
}
while(busy&&0x10==1);
}
void LCD_Write_com(unsigned char com)//写指合到LCM程序
{
busy_1602();
CLR_EN;
CLR_RW;
CLR_RS;
LCD_OUT=com;
_NOP();
SET_EN;
_NOP();
CLR_EN;
}
void lcd_write_data(unsigned char data)//写数据到LCM程序
{
busy_1602();
CLR_EN;
CLR_RW;
SET_RS;
LCD_OUT=data;
_NOP();
SET_EN;
_NOP();
CLR_EN;
}
void init_1602()//启动LCM程序
{
LCD_Write_com(0x38);
LCD_Write_com(0x0c);
LCD_Write_com(0x86);
}
void lcd_clear()//清屏函数
{
LCD_Write_com(0x01);
_NOP();
_NOP();
_NOP();
}
void lcd_write_string(unsigned char x,unsigned char y,unsigned
char *s)//字符串显示函数
{
if(y==0)
{
LCD_Write_com(0x80 +x);
}
else
剩余11页未读,继续阅读
资源评论
カツキ
- 粉丝: 0
- 资源: 13
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功