收藏 分享(赏)

简易数字温度计设计.docx

上传人:kpmy5893 文档编号:7242976 上传时间:2019-05-10 格式:DOCX 页数:18 大小:195.13KB
下载 相关 举报
简易数字温度计设计.docx_第1页
第1页 / 共18页
简易数字温度计设计.docx_第2页
第2页 / 共18页
简易数字温度计设计.docx_第3页
第3页 / 共18页
简易数字温度计设计.docx_第4页
第4页 / 共18页
简易数字温度计设计.docx_第5页
第5页 / 共18页
点击查看更多>>
资源描述

1、目录摘要 .2系统设计 .21.1 设计任务 21.2 设计要求 22 系统方案论证 .22.1 主控模块的论证与选择 22.2 显示模块的论证与选择 32.3 按键模块的论证与选择 33 系统理论分析与计算 .33.1 DS18B20 的理论分析与计算 34 电路与程序设计 .44.1 电路的设计 44.2 程序的设计 75 测试方案与测试数据 .85.1 测试方案 85.2 测试条件与仪器 .95.3 测试结果 .96 总结 .9附录 主要源程序 .101摘要:本系统利用单片机 AT89C52 采用程序设计方法来测试温度,还可以通过两个按键设置温度报警上限,当测试温度超过设定的温度上限时,

2、蜂鸣器器就会报警且绿灯关闭,红灯点亮;当温度低于上限时蜂鸣器关闭且红灯关闭,绿灯点亮。并通过液晶屏 1602 显示其测试温度以及设置的上限温度。 关键词:STC89C52、LCD1602、DS18B20简易数字温度计设计系统设计1.1 设计任务设计一数字温度测量系统,能自动实现实际温度的测量与显示。1.2 设计要求1.2.1 基本功能(1)测温范围-30+120。(2)测量误差在0.5之内。(3)能正常显示测量的温度。1.2.2 扩展功能(1)增加温控功能,并可修改设置温控的上下限。(2)增加温控报警功能。2 系统方案论证本系统主要由主控模块、显示模块、按键模块、蜂鸣器模块、LED 模块、传感

3、器模块组成,下面分别论证这几个模块的选择。2.1 主控模块的论证与选择方案一:AT89C52 单片机是一种高性能 8 位单片微型计算机。内核本身具有丰富的指令集,足够实现本次作品的全部基本功能和部分拓展功能,相比2Atmega16 我们对 AT89C52 更为熟悉,且芯片价格较低,性价比高。方案二:采用 ATmega16 芯片作为主控芯片。由于对芯片的不熟悉,导致如果想要实现温度计全部基本功能和部分拓展功能,较为困难。综上所述,选择方案一。2.2 显示模块的论证与选择方案一:采用 LCD1602 显示。LCD1602 相对便宜,虽然其本身不能显示中文,但是温度计只需显示数字和一些英文,符合这次

4、设计要求。方案二:采用 LCD12864 显示。LCD12864 屏幕显示细腻直观,且可以显示中文,但是相对昂贵。综上所述,选择方案一。2.3 按键模块的论证与选择方案一:采用 4X4 矩阵按键。尽管按键一目了然,但连线复杂,扫描过程烦琐,会耗费大量的系统资源。方案二:独立按键,我们只使用了两个按键来调节上限,大大节省了系统硬件资源,便于系统扩展。综上所述,选择方案二。3 系统理论分析与计算3.1 DS18B20 的理论分析与计算DS18B20 通过编程,可以实现最高 12 位的温度存储值,在寄存器中,以补码的格式存储,如图 1 所示。3图 1 DS18B20 温度数据格式寄存器一共 2 个字

5、节,LSB 是低字节,MSB 是高字节,其中 MSb 是字节的高位,LSb 是字节的低位。大家可以看出来,二进制数字,每一位代表的温度的含义,都表示出来了。其中 S 表示的是符号位,低 11 位都是 2 的幂,用来表示最终的温度。DS18B20 的温度测量范围是从 -55 度到+125 度,而温度数据的表现形式,有正负温度,寄存器中每个数字如同卡尺的刻度一样分布,如图 2 所示。图 2 DS18B20 温度值二进制数字最低位变化 1,代表温度变化 0.0625 度的映射关系。当 0 度的时候,那就是 0x0000,当温度 125 度的时候,对应十六进制是 0x07D0,当温度是零下 55 度的

6、时候,对应的数字是 0xFC90。反过来说,当数字是 0x0001 的时候,那温度就是 0.0625 度了。4 电路与程序设计4.1 电路的设计4.1.1 系统总体框图系统总体框图如图 3 所示4STC89C52独立按键*2LCD1602DS18B20温度传感器最小系统蜂鸣器模块LED*2图 3 系统总体框图4.1.2 控制按键 / 上调报警温度sbit KEY2 = P11; / 下调报警温度sbit LED1 = P12; / 正常时绿灯亮sbit LED2 = P13; / 报警时红灯亮sbit BUZZ = P16;bit enBuzz = 0; /蜂鸣器使能标志bit flag1s

7、= 0; /1s 定时标志unsigned int warnT = 30; /报警温度值unsigned char T0RH = 0; /T0 重载值的高字节unsigned char T0RL = 0; /T0 重载值的低字节void ConfigTimer0(unsigned int ms); unsigned char IntToString(unsigned char *str, int dat);extern bit Start18B20();extern bit Get18B20Temp(int *temp);extern void InitLcd1602();extern voi

8、d LcdShowStr(unsigned char x, unsigned char y, unsigned char *str);extern void LcdWriteCmd(unsigned char cmd);void main()bit res;bit backup = 1;int temp; /读取到的当前温度值int intT, decT; /温度值的整数和小数部分unsigned char len,len1;unsigned char str12,str112;EA = 1; /开总中断P1 = 0XF3;ConfigTimer0(1); /T0 定时 1msStart18B

9、20(); /启动 DS18B20InitLcd1602(); /初始化液晶while (1)10if (flag1s) /每秒更新一次温度flag1s = 0;res = Get18B20Temp( /读取当前温度if (res) /读取成功时,刷新当前温度显示intT = temp 4; /分离出温度值整数部分decT = temp /分离出温度值小数部分len = IntToString(str, intT); /整数部分转换为字符串len1 = IntToString(str1, warnT); /报警温度转换为字符串strlen+ = .; /添加小数点decT = (decT*10

10、) / 16; /二进制的小数部分转换为 1/位十进制位strlen+ = decT + 0; /十进制小数位再转换为/ASCII 字符strlen+ = 0xdf; /添加字符串 “”strlen+ = C;strlen+ = ;strlen = 0; /添加字符串结束符str1len1+ = 0xdf; /添加字符串 “”str1len1+ = C;str1len1 = 0; /添加字符串结束符if (intT “); LcdShowStr(12, 1, str1); /显示报警温度 11else /读取失败时,提示错误信息LcdShowStr(4, 1, “error!“);Start1

11、8B20(); /重新启动下一次转换/* 按键动作函数 */void KeyAction ()if (KEY1 = 0)KEY1 = 1; warnT+;else if (KEY2 = 0)KEY2 = 1;warnT-;/* 整型数转换为字符串, str-字符串指针,dat-待转换数,返回值 -字符串长度 */unsigned char IntToString(unsigned char *str, int dat)signed char i = 0;unsigned char len = 0;unsigned char buf6;if (dat 0);len += i; /i 最后的值就是

12、有效字符的个数while (i- 0) /将数组值转换为 ASCII 码反向拷贝到接收指针上*str+ = bufi + 0;12*str = 0; /添加字符串结束符return len; /返回字符串长度/* 配置并启动 T0,ms-T0 定时时间 */void ConfigTimer0(unsigned int ms)unsigned long tmp; /临时变量tmp = 11059200 / 12; /定时器计数频率tmp = (tmp * ms) / 1000; /计算所需的计数值tmp = 65536 - tmp; /计算定时器重载值tmp = tmp + 28; /补偿中断响

13、应延时造成的误差T0RH = (unsigned char)(tmp8); /定时器重载值拆分为高低字节T0RL = (unsigned char)tmp;TMOD /清零 T0 的控制位TMOD |= 0x01; /配置 T0 为模式 1TH0 = T0RH; /加载 T0 重载值TL0 = T0RL;ET0 = 1; /使能 T0 中断TR0 = 1; /启动 T0/* T0 中断服务函数,完成 250ms, 1s 定时 */void InterruptTimer0() interrupt 1static unsigned int tmr1s = 0;static unsigned int

14、 tmrms = 0;TH0 = T0RH; /重新加载重载值TL0 = T0RL;if (enBuzz) /蜂鸣器发声处理BUZZ = BUZZ; /启动蜂鸣器发声LED1 = 0;LED2 = 1;else BUZZ = 1; /关闭蜂鸣器LED1 = 1;LED2 = 0;tmr1s+;tmrms+;13if (tmrms = 250) /延时 250ms tmrms = 0;KeyAction ();if (tmr1s = 1000) /定时 1stmr1s = 0;flag1s = 1;DS18B20 程序:#include #include sbit IO_18B20 = P32;

15、 /DS18B20 通信引脚/* 软件延时函数,延时时间(t*10)us */void DelayX10us(unsigned char t)do _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); while (-t);bit Get18B20Ack()bit ack;EA = 0;IO_18B20 = 0;DelayX10us(50);IO_18B20 = 1;DelayX10us(6);ack = IO_18B20;while(!IO_18B20);EA = 1;14return ack;void Write1

16、8B20(unsigned char dat)unsigned char mask;EA = 0;for(mask=0x01; mask!= 0; mask#define LCD1602_DB P0sbit LCD1602_RS = P20;sbit LCD1602_RW = P21;sbit LCD1602_E = P22;/* 等待液晶准备好 */void LcdWaitReady()16unsigned char sta;LCD1602_DB = 0xFF;LCD1602_RS = 0;LCD1602_RW = 1;do LCD1602_E = 1;sta = LCD1602_DB; /

17、读取状态字LCD1602_E = 0; while (sta /bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止/* 向 LCD1602 液晶写入一字节命令,cmd-待写入命令值 */void LcdWriteCmd(unsigned char cmd)LcdWaitReady();LCD1602_RS = 0;LCD1602_RW = 0;LCD1602_DB = cmd;LCD1602_E = 1;LCD1602_E = 0;/* 向 LCD1602 液晶写入一字节数据,dat-待写入数据值 */void LcdWriteDat(unsigned char dat)LcdWa

18、itReady();LCD1602_RS = 1;LCD1602_RW = 0;LCD1602_DB = dat;LCD1602_E = 1;LCD1602_E = 0;/* 设置显示 RAM 起始地址,亦即光标位置, (x,y)-对应屏幕上的字符坐标 */void LcdSetCursor(unsigned char x, unsigned char y)unsigned char addr;if (y = 0) /由输入的屏幕坐标计算显示 RAM 的地址addr = 0x00 + x; /第一行字符地址从 0x00 起始elseaddr = 0x40 + x; /第二行字符地址从 0x40

19、 起始LcdWriteCmd(addr | 0x80); /设置 RAM 地址17/* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标, str-字符串指针 */void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str)LcdSetCursor(x, y); /设置起始地址while (*str != 0) /连续写入字符串数据,直到检测到结束符LcdWriteDat(*str+);/* 初始化 1602 液晶 */void InitLcd1602()LcdWriteCmd(0x38); /16*2 显示,5*7 点阵,8 位数据接口LcdWriteCmd(0x0C); /显示器开,光标关闭LcdWriteCmd(0x06); /文字不动,地址自动+1LcdWriteCmd(0x01); /清屏

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报