基于51单片机DS18B20温度可调上下限实训报告_第1页
基于51单片机DS18B20温度可调上下限实训报告_第2页
基于51单片机DS18B20温度可调上下限实训报告_第3页
基于51单片机DS18B20温度可调上下限实训报告_第4页
基于51单片机DS18B20温度可调上下限实训报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上温度上下限可调式数字温度检测显示器设计与制作1101电信19刘朋朋一、任务与计划:采用 AT89C51 单片机作为控制器,数字温度传感器 DS18B20检测现场温度,能显示温度检测值、设定温度上限值和下限值,当温度超过设定上限时,显示“over tempH”,有红色LED闪亮警示,当温度低于设定的下限值时 ,显示"under tempL",有黄色LED闪亮警示。 将检测到的温度信息显在1602LCD 液晶显示器第一行形式为“Temp xx.x”。第二行显示设定的温度上下限值和超限警示显示,温度上限值30+小组号,温度下限为25-学号末位数,第二行后

2、两位显示学号。二、及电路原理图设计1、液晶显示选用1602显示环境温度以及温度上下限的值,如:图(1-1)所示。2、温度传感器DS18B20测环境温度如:图(1-2)所示。3、按键模块如图:(1-3)所示,而本次设计只需用到四个按键即可,其中K2、K1控制设定温度的上限值的加减,K4、K3控制设定温度的下限值的加减。4、8只LED模块如:图(1-4)所示,本次设计只需两只LED灯的闪烁来反映出检测的温度是否在设定的温度范围内。5、元件模块和接口一览表如:图(1-5)所示。6、运用Proteus软件绘制硬件电路如:图(1-6)所示。 图1-1液晶显示图1-2 DS18B20 图1-3 独立按键

3、图1-4 LED 图1-5 元件模块和接口一览表图1-6 硬件电路设计三、设计、编译#include<reg52.h> /所包含头文件#include<stdio.h>#include "18b20.h"#include "1602.h"#include "delay.h"#define KeyPort P3 /定义按键端口sbit led1=P10;/定义高温报警LEDsbit led2=P11;/定义低温报警LEDbit ReadTempFlag;/定义读时间标志void Init_Timer0(void)

4、;/定时器初始化unsigned char KeyScan(void);/键盘扫描函数声明/*- 串口通讯初始化-*/void UART_Init(void) SCON = 0x50; TMOD |= 0x20; / TMOD: timer 1, mode 2, 8-bit 重装 TH1 = 0xFD; / TH1: 重装值 9600 波特率 晶振 11.0592MHz TR1 = 1; / TR1: timer 1 打开 /EA = 1; /打开总中断 /ES = 1; /打开串口中断TI=1;/*- 主函数-*/void main (void) int temp,tempH=30,temp

5、L=25;/给出初始化的温度上下线float temperature;unsigned char TempFlag=0;/定义温度标志位char displaytemp16,num;/定义显示区域临时存储数组LCD_Init(); /初始化液晶DelayMs(20); /延时有助于稳定LCD_Clear(); /清屏Init_Timer0();UART_Init();Lcd_User_Chr(); /写入自定义字符while (1) /主循环 num=KeyScan(); switch(num)/调整温度上下线的按键操作 case 1:if(tempH<127)tempH+;break;

6、case 2:if(tempH>-55)tempH-;break;case 3:if(tempL<127)tempL+;break;case 4:if(tempL>-55)tempL-;break;default:break; switch(TempFlag)/LCD显示温度上下线以及报警时动态 case 0: /输出温度上限下限 sprintf(displaytemp,"H.%3d L.%3d ",tempH,tempL); LCD_Write_String(0,1,displaytemp);/显示第二行 break;case 1:LCD_Write_S

7、tring(0,1,"over tempH 19 ");break;case 2:LCD_Write_String(0,1,"under tempL 19 ");break;default:break; if(ReadTempFlag=1) ReadTempFlag=0; temp=ReadTemperature(); temperature=temp*0.0625; temp>>=4; if(temp>tempH)/实际温度高于上线所执行的操作 led1=0;/高温LED闪亮报警 led2=1; TempFlag=1; else if

8、(temp<tempL) 实际温度低于下限所执行的操作 led2=0;/低温LED闪亮报警 led1=1; TempFlag=2; else/正常显示所执行的操作 led1=1;led2=1;TempFlag=0; /读取温度与写入温度 sprintf(displaytemp,"Temp %6.2f ",temperature);/打印温度值 LCD_Write_String(0,0,displaytemp);/显示第一行 LCD_Write_Char(13,0,0x01);/写入温度右上角点 LCD_Write_Char(14,0,'C'); /写入

9、字符C LCD_Write_String(0,1,displaytemp); LCD_Write_Char(13,1,'1'); LCD_Write_Char(14,1,'9'); /*- 定时器初始化子程序-*/void Init_Timer0(void) TMOD |= 0x01; /使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响 /TH0=0x00; /给定初值 /TL0=0x00; EA=1; /总中断打开 ET0=1; /定时器中断打开 TR0=1; /定时器开关打开/*- 定时器中断子程序-*/void T

10、imer0_isr(void) interrupt 1 static unsigned int num; TH0=(65536-2000)/256; /送初始值定时2个毫秒 TL0=(65536-2000)%256; num+; if(num=400) / num=0; ReadTempFlag=1; /读标志位置1unsigned char KeyScan(void) /按键扫描 unsigned char keyvalue; if(KeyPort!=0xff) /判断按键按下并返回相应的值 DelayMs(10); if(KeyPort!=0xff) keyvalue=KeyPort; w

11、hile(KeyPort!=0xff);switch(keyvalue) case 0xfe:return 1;break; case 0xfd:return 2;break; case 0xfb:return 3;break; case 0xf7:return 4;break; case 0xef:return 5;break; case 0xdf:return 6;break; case 0xbf:return 7;break; case 0x7f:return 8;break; default:return 0;break; return 0;4、 安装和调试1、高温报警时的状态(如图2-1)图(2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论