基于msp430的温度检测系统设计与实现_终稿(编辑修改稿)内容摘要:

利用了 P口向电池充电的开启电路。 MSP430F149的定时器及转换模块。 我们所说的 MSP430中有两个 16位定时器, 对于这一点,我们还可以使用单芯片看门狗定时器程序。 由于计时器 16位的,所以我们要有两个中断向量,而且它们确实有两个中断向量,容易实现 各种定时器 的中断。 MSP430F149定时器 在应用程序中的作用, 是可以比较 定时器 的 模式。 MSP430F149采用数字脉冲调制波形,然后通过在低通滤波器 上的功能,产生任 意波形, 我们可以经常使用的比较模式实现数 字信号到 模拟 信号的变化。 计时器还具有拍摄模式,我们可以使用 各种定时器的捕捉功能测量,并 与比较器组合,这样 你 就 能测量电阻,电容,电压,电流,温度和脉冲宽度 等数值的测量。 可以说, 只要能通过传感转换为时间长度的,都可以通过定时器的捕获定时功能实现值的测量 [11]。 DS18B20中的温度传感器完成对温度的测量,用 16位符号扩展的二进制补码读数形式提供,以 ℃ /LSB形式表达,其中 S为符号位。 例如+ 125℃的数字输出为 07D0H,+ ℃的数字输出为 0191H,- ℃的数字输出为 FF6FH,- 55℃的数字输出为 FC90H。 下表 为温度转换表: 南京工程学院毕业设计说明书 (论文 ) 第 13页 表 22 温度转换对应表 TEMPERATURE DIGITAL OUTPUT(Binary) DIGITAL OUTPUT(Hex) +125℃ 0000011111010000 07D0H +85℃ 0000010101010000 0550H +℃ 0000000110010001 0191H +℃ 0000000010100010 00A2H +℃ 0000000000001000 0008H 0℃ 0000000000000000 0000H ℃ 1111111111111000 FFF8H ℃ 1111111101011110 FF5EH ℃ 1111111001101111 FE6FH 55℃ 1111110010010000 FC90H 南京工程学院毕业设计说明书 (论文 ) 第 14页 第 三 章 系统软件设计 系统软件总体结构及流程图 主程序流程图 图 31 主程序流程图 N Y Y Y N 鸣报警器 DS18B20 初始化 按键处理 发报警搜索命 令 有键按下吗 ? 显示 DS18B20 OK 显示温度 数据处理 读 DS18B20 DS18B20。 显示 DS18B20 ERROR N 结束 南京工程学院毕业设计说明书 (论文 ) 第 15页 读出温度子程序 流程图 读出温度子程序的主要功能是读出 RAM中的字节,其程序流程图如 图32所 示。 图 32 读温度流程图 开始 发 DS18B20复位命 令 发跳过 ROM命令 发读取温度命令 移入温度暂存器 结束 南京工程学院毕业设计说明书 (论文 ) 第 16页 温度转换命令子程序 流程图 温度 转换命令 子程序主要是发温度转换开始命令, 采用 12位分辨率 的时 后 转换时间约为 750ms,在本程序设计中采用 1s显示程序延时法等待转换的完成。 温度转换命令子程序流程图如 下 图, 如 图 33所示。 图 33 温度转换流 程图 计算温度子程序 计算温度子程序将 RAM中读取值进行 BCD码的转换运算,其程序流程图如图 34所示。 图 34 计算温度流程图 开始 发 DS18B20复位命令 发跳过 ROM命令 发温度转换开始命令 结束 开始 计算小数位温度 BCD值 计算整数位温度 BCD值 结束 南京工程学院毕业设计说明书 (论文 ) 第 17页 显示数据刷新子程序 显示数据刷新子程序主要是对显示缓冲器中的显示数据进行刷新操作,当最高显示位为 0时将符号显示位移入下一位。 程序流程图如图 35所示。 图 35 显示数据刷新流程图 主模块程序设计 主处理模块主要是将各个模块进行协调处理和实现数据交互。 主处理模块首先完成 初始化上作,初始化后进入循环处理,在循环过程中主处理获得采集模块的数据,井将数据进行处理, 据处理结果是显示或报警。 由于报警设置了上限和下限,所以除了考虑数据的保存,使得主要程序在第一次检查是确定是否有 FLASH的阈值存在,如果没有,则等待,说明需要调整。 N N Y Y 温度数据移入寄存器 十位数 0。 百位数 0。 十位数显示 百位数不显示 显示百位数 数据 结束 开始 南京工程学院毕业设计说明书 (论文 ) 第 18页 而在下一阶段完成后, 也就是程序必须在有设置数据的情况下才能正常运行。 主模块程序的设计很简单,包括各端口,键盘,还有时钟的初始化操作,然后就一个 While()循环,此循环实现的是动显温度值,同时用于判断温度报警参数实现温度报警,其他就当相应的中断产生时转 到相应的中断服务子程序中执行相应的操作。 下面是程序: /************************************************************* 程序功能:读取 DS18B20进行温度测量以后的结果并在 1602液晶上显示 测试说明:观察显示温度数值。 *************************************************************/ include include include typedef unsigned char uchar。 typedef unsigned int uint。 //要显示的 6位温度数字 uchar dN[6]。 void Disp_Numb(uint temper)。 /*************************主函数 *************************/ void main( void ) 南京工程学院毕业设计说明书 (论文 ) 第 19页 { /*下面六行程序关闭所有的 IO口 */ P1DIR = 0XFF。 P1OUT = 0XFF。 P2DIR = 0XFF。 P2OUT = 0XF0。 P3DIR = 0XFF。 P3OUT = 0XFF。 P4DIR = 0XFF。 P4OUT = 0XFF。 P5DIR = 0XFF。 P5OUT = 0XFF。 P6DIR = 0XFF。 P6OUT = 0XFF。 uchar i。 WDTCTL = WDTPW + WDTHOLD。 //关狗 //P6DIR |= BIT2。 P6OUT |= BIT2。 //关闭电平转换 /*选择系统主时钟为 8MHz*/ BCSCTL1 amp。 = ~XT2OFF。 //打开 XT2高频晶体振荡器 do { IFG1 amp。 = ~OFIFG。 //清除晶振失败标志 for (i = 0xFF。 i 0。 i)。 //等待 8MHz晶体起振 } while ((IFG1 amp。 OFIFG))。 //晶振失效标志仍然存在。 BCSCTL2 |= SELM_2 + SELS。 //MCLK和 SMCLK选择高频晶振 南京工程学院毕业设计说明书 (论文 ) 第 20页 //计数时钟选择 SMLK=8MHz, 1/8分频后为 1MHz TACTL |= TASSEL_2 + ID_3。 //打开全局中断 _EINT()。 LcdReset()。 DispNChar(0, 0, 15, Temperature is:)。 //循环读数显示 while(1) { Disp_Numb(Do1Convert())。 Disp1Char(4, 1, dN[5]+0x30)。 Disp1Char(5, 1, dN[4]+0x30)。 Disp1Char(6, 1, 0x2e)。 //0x2e是小数点对应的ASCII码值 Disp1Char(7, 1, dN[3]+0x30)。 Disp1Char(8, 1, dN[2]+0x30)。 Disp1Char(9, 1, dN[1]+0x30)。 Disp1Char(10, 1, dN[0]+0x30)。 } } LED 显示模块程序设计 该部分主要完成数据的显示功能。 在硬件设计中,显示电路直接 和 单片机的数据 I/O 口进行连接。 是用来显示数据, 、 和 是用来控制数码管的选通状态 ,显示模块相对比较简单,只是简单的将数据显示在数码管脚上,该模块主要包括端口初始化和数据显示两部分 ,我设计的在显示页面是“ WangchaoYuZeHua Temper is:”温度显示是精确到小数点后两位的数字。 下面是程序: 南京工程学院毕业设计说明书 (论文 ) 第 21页 include include typedef unsigned char uchar。 typedef unsigned int uint。 /**************宏定义 ***************/ define DataDir P4DIR define DataPort P4OUT define Busy 0x80 define CtrlDir P5DIR define CLR_RS P5OUTamp。 =~BIT7。 //RS = define SET_RS P5OUT|=BIT7。 define CLR_RW P5OUTamp。 =~BIT6。 //RW = define SET_RW P5OUT|=BIT6。 define CLR_EN P5OUTamp。 =~BIT5。 //EN = define SET_EN P5OUT|=BIT5。 /******************************************* 函数名称: DispNchar 功 能:让液晶从某个位置起连续显示 N 个字符 参 数: x位置的列坐标 y位置的行坐标 n字符个数 ptr指向字符存放位置的指针 返回值 :无 ********************************************/ void DispNChar(uchar x, uchar y, uchar n, uchar *ptr) { uchar i。 for (i=0。 in。 i++) 南京工程学院毕业设计说明书 (论文 ) 第 22页 { Disp1Char(x++, y, ptr[i])。 if (x == 0x0f) { x = 0。 y ^= 1。 } } } /******************************************* 函数名称: LocateXY 功 能:向液晶输入显示字符位置的坐标信息 参 数: x位置的列坐标 y位置的行坐标 返回值 :无 ****。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。