MSP430单片机温度单片机课程设计
更新时间:2024-01-20 05:30:01 阅读量: 教育文库 文档下载
山东理工大学计算机学院
课 程 设 计
单片机系统设计
班 级 计科1104 姓 名 学 号 指导教师 李业德 韩慧
二○ 一四 年 十一 月 日
课程设计任务书及成绩评定
1
课题名称_______温度测试系统设计_______
I、 题目的目的和要求:
利用温度传感器和MSP430单片机设计一个温度测试系统,将测试结果(十进制)在LED上显示出来,并定义一个保持按键,当按下该键时,将当前测试值保持不变(按键不动作时为正常测量显示)。温度显示格式为:XXX ℃。
II、 设计进度及完成情况
日 期 内 容 11.10 选取题目,进行资料搜集和系统分析工作 进行单独程序设计以及完成单独接口电路 11.14 将全部程序综合并进行整体程序调试和连接整体接口电路 11.16 书写课程设计报告并写下相关问题总结 11.18 11.20 进行课程设计答辩,并打印上交
III、 主要参考文献及资料
MSP430系列16位低功耗单片机原理及应用 DS18B20温度传感器的使用 智能仪器原理及应用
2
成绩评定:
设计成绩:
指导老师:
学科部主任 李业德
(教师填写)
(签字)
二○ 年 月 日3
Ⅵ、
目录
I、 题目的目的和要求: ........................................................................................................................... 2 II、 设计进度及完成情况 ........................................................................................................................... 2 III、 主要参考文献及资料 ........................................................................................................................... 2 Ⅵ、 成绩评定: ........................................................................................................................................... 3 目录 ................................................................................................................................................................... 4 本次课程设计的目的和意义 ........................................................................................................................... 5 设计题目 ........................................................................................................................................................... 6 系统的主要功能、作用以及主要技术性能指标 ........................................................................................... 7 总体设计方案、工作和组成原理 ................................................................................................................... 8 系统设计 ......................................................................................................................................................... 11 设计总结 ......................................................................................................................................................... 22 作品的使用或操作说明 ................................................................................................................................. 23 设计图纸或图表 ............................................................................................................................................. 24
4
本次课程设计的目的和意义
课程设计是让我熟练掌握了课本上的一些理论知识,课程设计也是一个学习新知识、巩固加深所学课本理论知识的过程,它培养了我们综合运用知识的能力,独立思考和解决问题的能力。 加深我们对单片机原理与应用课程的理解
5
系统设计
接口电路设计,程序设计(程序框图和程序清单及注释)其他有关的理论分析和计算 接口电路设计:
主控制器MSP430
温度传感器
11
保持按键
数码管电路
12
程序框图:
总体设计流程图
读取温度传感器数据流程图
13
数码管温度显示
程序设计:
//*************************定义引脚**********************************
#define LED8PORT P2OUT //P2接8个LED灯 #define LED8SEL P2SEL //P2接8个LED灯 #define LED8DIR P2DIR //P2接8个LED灯
#define DATAPORT P4OUT //数据口所在端口P4
#define DATASEL P4SEL //数据口功能寄存器,控制功能模式 #define DATADIR P4DIR //数据口方向寄存器
#define CTRPORT P6OUT //控制线所在的端口P6
#define CTRSEL P6SEL //控制口功能寄存器,控制功能模式 #define CTRDIR P6DIR //控制口方向寄存器
#define DCTR0 P6OUT &= ~BIT4 //数码管段控制位信号置低 #define DCTR1 P6OUT |= BIT4 //数码管段控制位信号置高 #define WCTR0 P6OUT &= ~BIT3 //数码管位控制位信号置低 #define WCTR1 P6OUT |= BIT3 //数码管位控制位信号置高
#define KEYPORT P1OUT //按键所在的端口P1
#define KEYSEL P1SEL //控制口功能寄存器,控制功能模式 #define KEYDIR P1DIR //控制口方向寄存器
#define KEYIN P1IN //键盘扫描判断需要读取IO口状态值 uchar key=0xFF; //键值变量 uint temp_value; float truetemp;
14
uint temp,A1,A2,A3; //定义的变量,显示数据处理
//*******************共阴数码管显示的断码表************************
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
// *******************系统时钟初始化***************************
void Clock_Init() {
uchar i;
BCSCTL1&=~XT2OFF; //打开XT2振荡器
BCSCTL2|=SELM1+SELS; //MCLK为8MHZ,SMCLK为8MHZ do{
IFG1&=~OFIFG; //清楚振荡器错误标志 for(i=0;i<100;i++) _NOP(); }
while((IFG1&OFIFG)!=0); //如果标志位1,则继续循环等待 IFG1&=~OFIFG; }
//*******************MSP430内部看门狗初始化***********************
void WDT_Init() {
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗 }
//*******************MSP430IO口初始化*****************************
void Port_Init() {
LED8SEL = 0x00; //设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; //设置IO口方向为输出 LED8PORT = 0xFF; //P2口初始设置为FF
DATASEL = 0x00; //设置IO口为普通I/O模式,此句可省 DATADIR = 0xFF; //设置IO口方向为输出 DATAPORT = 0xFF; //P4口初始设置为FF
CTRSEL = 0x00; //设置IO口为普通I/O模式,此句可省
CTRDIR |= BIT3 + BIT4 +BIT2; //设置IO口方向为输出,控制口在P63,P64 CTRPORT = 0xFF; //P6口初始设置为FF
KEYSEL = 0x00; //设置IO口为普通I/O模式,此句可省
KEYDIR = 0x0F; //高四位输入模式,低四位输出模式,外部上拉电阻 KEYPORT= 0xF0; //初始值0xF0 }
//*************74HC573控制数码管动态扫描键值显示函数******************
void Display_Key(uchar num) {
uchar i,j;
j=0x01; //此数据用来控制位选 for(i=0;i<8;i++) //8个数码管依次显示 {
DCTR1; //控制数码管段数据的74HC573的LE管脚置高 WCTR1; //控制数码管位的74HC573的LE管脚置高
15
DATAPORT=~j; //设置要显示的位,也就是哪一个数码管亮
WCTR0; //锁存位数据,下面送上段数据以后,就显示出来了 DATAPORT=table[num]; //送要显示的数据,这里是键值
DCTR0; //锁存段数据,数码管亮一个时间片刻 j=j<<1; //移位,准备进行下一位的显示
delay_us(500); //显示一个时间片刻,会影响亮度和闪烁性 }
Close_LED(); //显示完8个数码管后关闭数码管显示,否则可能导致各个数码管亮度不一致 }
//*****************键盘扫描子程序,采用逐键扫描的方式******************
uchar Key_Scan(void) {
uchar key_check; uchar key_checkin;
key_checkin=KEYIN; //读取IO口状态,判断是否有键按下 key_checkin&= 0xF0; //屏蔽掉低四位的不确定值
if(key_checkin!=0xF0) //IO口值发生变化则表示有键按下 {
delay_ms(20); //键盘消抖,延时20MS key_checkin=KEYIN; //再次读取IO口状态
if(key_checkin!=0xF0) //确定是否真正的有键按下 {
key_check=KEYIN; //有键按下,读取端口值 switch (key_check & 0xF0) //判断是哪个键按下 {
case 0xE0:key=1;break; case 0xD0:key=2;break; case 0xB0:key=3;break; case 0x70:key=4;break; } } } else {
key=0xFF; //无键按下,返回FF }
return key; }
//******74HC573控制数码管动态扫描显示函数,显示采集到的温度**************
void Display_DS18B20(uint data_b,uint data_s,uint data_g) {
uchar i,j;
j=0x01; //此数据用来控制位选 for(i=0;i<3;i++) //用后3位数码管来显示 {
DCTR1; WCTR1; DATAPORT=~j; WCTR0;
16
j=(j<<1);
DATAPORT=0x00; //前5位都不显示,送数据00即可 DCTR0; delay_ms(2); }
DCTR1; //开始显示第6位,即十位 WCTR1; DATAPORT=~j; WCTR0; j=(j<<1);
//DATAPORT=table[A1]; DATAPORT=table[data_b]; DCTR0; delay_ms(1);
DCTR1; // WCTR1; DATAPORT=~j; WCTR0; j=(j<<1);
//DATAPORT=table[A2]|0x80; // DATAPORT=table[data_s]|0x80; // DCTR0; delay_ms(1);
DCTR1; // WCTR1; DATAPORT=~j; WCTR0; j=(j<<1);
//DATAPORT=table[A3]; DATAPORT=table[data_g];
DCTR0; delay_ms(1);
DCTR1; // WCTR1; DATAPORT=~j; WCTR0; j=(j<<1);
//DATAPORT=table[A3]; DATAPORT=0x63;
DCTR0; delay_ms(1);
DCTR1; // WCTR1; DATAPORT=~j; WCTR0; j=(j<<1);
//DATAPORT=table[A3]; DATAPORT=0x39;
开始显示个位 显示小数点 显示小数点 开始显示小数点后面的数据 开始显示温度单位 开始显示温度单位 17
DCTR0; delay_ms(1);
DCTR1; WCTR1; DATAPORT=0xff; WCTR0; }
//************************DS18B20初始化*******************************
unsigned char DS18B20_Reset(void) //初始化和复位 {
unsigned char i; DQ_OUT; DQ_CLR;
delay_us(500); //延时500uS(480-960) DQ_SET; DQ_IN;
delay_us(80); //延时80uS i = DQ_R;
delay_us(500); //延时500uS(保持>480uS)
if (i) {
return 0x00; } else {
return 0x01; } }
//**********************DS18B20读一个字节函数****************************
unsigned char ds1820_read_byte(void) {
unsigned char i;
unsigned char value = 0; for (i = 8; i != 0; i--) {
value >>= 1; DQ_OUT; DQ_CLR;
delay_us(4); //*延时4uS DQ_SET; DQ_IN;
delay_us(10); //*延时10uS if (DQ_R) {
value|=0x80; }
delay_us(60); //*延时60uS }
return(value);
18
}
//**********************向18B20写一个字节函数************************
/*DS18B20字节写入函数*/
void ds1820_write_byte(unsigned char value) {
unsigned char i;
for (i = 8; i != 0; i--) {
DQ_OUT; DQ_CLR;
delay_us(4); //延时4uS if (value & 0x01) {
DQ_SET; }
delay_us(80); //延时80uS DQ_SET; //位结束 value >>= 1; } }
//********************发送温度转换命令*********************************
/*启动ds1820转换*/
void ds1820_start(void) {
DS18B20_Reset();
ds1820_write_byte(0xCC); //勿略地址 ds1820_write_byte(0x44); //启动转换 }
//***********************DS8B20读取温度信息************************
unsigned int ds1820_read_temp(void) {
unsigned int i;
unsigned char buf[9];
DS18B20_Reset();
ds1820_write_byte(0xCC); //勿略地址 ds1820_write_byte(0xBE); //读取温度 for (i = 0; i < 9; i++) {
buf[i] = ds1820_read_byte(); }
i = buf[1]; i <<= 8; i |= buf[0]; temp_value=i;
temp_value=(uint)(temp_value*0.625); //不是乘以0.0625的原因是为了把小数点后一位数据也转化为可以显示的数据
//比如温度本身为27.5度,为了在后续的数据处理程序中得到BCD码,我们先放大到275
//然后在显示的时候确定小数点的位置即可,就能显示出27.5度了
19
return i; }
//*********************温度数据处理函数****************************
void data_do(uint temp_d) {
A3=temp_d; //分出百,十,和个位 temp_d/=10; A2=temp_d; A1=temp_d/10; }
//***********************处理温度数据*********************
void handletemp() {
ds1820_start(); //启动一次转换 ds1820_read_temp(); //读取温度数值
data_do(temp_value); //处理数据,得到要显示的值 truetemp=0.1*temp_value;
//judgeAlarm(); //判断是否触发警报//已将其添加至按键程序 }
//***********************显示温度**********************
void showtemp() {
uchar j;
for(j=0;j<100;j++) {
Display_DS18B20(A1,A2,A3); //显示温度值 }
//delay_ms(100); //延时100ms }
//***************************主程序************************
void main(void) {
uchar flag1,flag2,flag3,flag4;
//uint key_store=0x00; //没有按键按下时,默认显示1 WDT_Init(); //看门狗初始化 Clock_Init(); //时钟初始化
Port_Init(); //端口初始化,用于控制IO口输入或输出 //Close_LED();
DS18B20_Reset(); //复位D18B20
delay_ms(100); //延时100ms while(1) {
Key_Scan(); //键盘扫描,看是否有按键按下
if(key!=0xff) //如果有按键按下,则显示该按键键值1~4 { {
switch(key) {
case 1: LED8PORT=0xfc;flag1=1;flag2=0;flag3=0;flag4=0;break;//对温度数据
20
处理判断警报,然后显示,handletemp();showtemp();
case 2: LED8PORT=0xf3;flag1=0;flag2=1;flag3=0;flag4=0;break;//温度数据处理判断警报,关闭显示,节省电源,handletemp();Close_LED();
case 3: LED8PORT=0xcf;flag1=0;flag2=0;flag3=1;flag4=0;break;//关闭警报,SOUNDOFF;handletemp();
case 4: LED8PORT=0x3f;flag1=0;flag2=0;flag3=0;flag4=1;break;//测试警报SOUNDON;
} } } else {
LED8PORT&=0xff; // if(flag1==1) {
//handletemp(); showtemp(); }
if(flag2==1) {
handletemp(); showtemp(); }
if(flag3==1) {
SOUNDOFF; handletemp(); }
if(flag4==1) {
SOUNDON; } } } }
21
设计总结
对整个设计工作过程进行归纳和综合,对设计中所存在的问题和不足进行分析和总结,提出解决的方法、措施、建议和对这次设计实践的认识、收获和提高。
在本次设计的过程中,我发现很多的问题,也学到了许多东西。虽然我以前也做过类似的课程设计,但这次设计真的让我长进了很多。本次单片机课程设计的重点就在于测温及按键编程软件算法的设计,其中有许多很巧妙的算法。我以前总是能看懂别人写的程序,但自己单独写时就会出现很多问
题,经过这次锻炼我基本掌握了C语言编程的方法并在以前的基础上有所提高。
从这次的课程设计中,我真真正正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习单机片机更是如此,程序只有在经常的写与读的过程中才能提高,这就
是我在这次课程设计中的最大收获。
22
作品的使用或操作说明
作品上电后,按下复位按键,数码管开始显示当前环境温度,并实时刷新数据,按下保持按键后,温度会保持在当前温度不变,当再次按下显示按键后,温度又会开始实时显
示。
23
设计图纸或图表
数码管显示
24
按键
温度传感器
25
主控芯片
26
正在阅读:
MSP430单片机温度单片机课程设计01-20
全国2012年1月高等教育自学考试 证券投资与管理试题 课程代码0007505-30
3L英语11-30
深入偏远农村学校走访慰问教师 - 图文01-23
2013不可不学的摄影技巧 - 图文12-13
人教版一年级上册生字、词语积累表04-30
程序设计基础教程(c语言版)课后答案03-16
理想作文900字07-06
食品生物技术导论复习提纲03-08
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 单片机
- 温度
- 课程
- MSP430
- 设计
- XX初级中学德育课程一体化工作实施方案
- 2011-2014年同等学力计算机综合真题答案解析
- 教师考试试题
- “学先进、找差距、搞对标、促发展”解放思想大讨论活动心得体会
- 民主理论考题
- FDDC科威特市场考察报告 - 图文
- 江苏省汽车产业调整与振兴规划纲要
- 土木工程管理施工过程质量控制措施之我见
- 2017-2022年中国农业行业分析及战略咨询报告(目录) - 图文
- 工程师文化节活动方案
- 2012年贵州公务员考试《公共基础知识》试题及答案解析(一)
- 生活化课程
- LTE考试试题2016
- 人行道改造方案
- 天然气公司城区管道治理隐患排查报告
- 医药物流中心建设项目可行性研究报告
- 消化性溃疡的药物治疗
- 钻井井场环境噪声治理方案
- 模板工程施工方案(框架)
- 内蒙古科技特派员激励理念与策略研究