版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 课程设计报告课程名称: 微机原理课程设计 课 题: 基于单片机的温度数据采集控制 专业班级: 计算机系12101班 学 号: 201217010152 姓 名: 余智文 指导老师: 周慧灿 日 期: 2015年7 月2 日 教师评语:成绩评定: 指导教师(签名): 目 录1.课题简介(黑体小4)12.设计方案13.具体设计1 3.1电路原理13.2 程序原理1 3.3关键代码段源码及分析24.测试11 4.1测试过程中遇到的问题记录11 4.2测试结果115.总结11设计体会12参考文献12基于单片机的温度控制一、课题简介 本课题是关于8个字节超长整型数据,实现其运算( 加、减、乘)功能及二
2、个数相比较的功能,满足其用户在进行数据计算时的需要,增大了数据的使用范围,解决了在实际中数据的越界。二设计题目及具体要求1基于单片机的温度监控系统2温度测算范围-20-703分辨率小于0.54所测的温度值可以由LCD液晶直接显示可以任意设置上下限温度的报警功能 5显示日期和时间到LCD液晶, 使用proteus,protel软件的功能仿真和画原理图三设计目的1.通过本次课程设计加深对单片机课程的全面认识复习和掌握,对单片机课程的应用进一步的了解。2.掌握采用8051单片机控制温度传感器DS18B20、时钟芯片DS1302和编程原理。3.通过此次课程设计能够将单片机软硬件结合起来,对程序进行编辑
3、,校验。四设计的意义该次设计通过应用所学单片机的理论基础知识,解决现实生活上的问题。设计温度控制系统五设计方案设计思路总体设计大致可分为两部分组成:一·温度采集模块。二·实时时钟电路模块。该设计通过单片机和温度传感器及相关部件实现温度的测量和数字显示。采用数字温度芯片DS18B20 测量温度,输出信号全数字化,便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线形较好。在0100 摄氏度时,最大线形偏差小于1 摄氏度。DS18B20 的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT8
4、9S51构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。温度传感器DS18B20进行实时温度检测并显示,能够实现快速测量环境温度,并可以根据需要设定上下限报警温度。该系统扩展性非常强,它可以在设计中加入时钟芯片DS1302以获取时间数据,在数据处理同时显示时间。设计方框图此方案的测温装置电路简单、精确度较高、实现方便、软件设计也比较简单,故本次设计采用此方案。设计原理温度传感器DS18B20DALLAS 最新单线数字温度传感器DS18B20是一种新型的“一线器件”其体积更小、更适用于多种场合、且适用电压更宽、更经济。DALLAS 半导体公司的数字化温度传感器DS18B20是世
5、界上第一片支持“一线总线”接口的温度传感器。温度测量范围为-55+125 摄氏度,可编程为9位12 位转换精度,测温分辨率可达0.0625摄氏度,分辨率设定参数以及用户设定的报警温度存储在EEPROM 中,掉电后依然保存。被测温度用符号扩展的16位数字量方式串行输出;其工作电源既可以在远端引入,也可以采用寄生电源方式产生;多个DS18B20可以并联到3 根或2 根线上,CPU只需一根端口线就能与诸多DS18B20 通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。DS18B20 的性能特点如下
6、:独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电温范围55125,在-10+85时精度为±0.5 零待机功耗可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可实现高精度测温在9位分辨率时最多在93.75ms内把温度转换为数字
7、,12位分辨率时最多在750ms内把温度值转换为数字,速度更快用户可定义报警设置报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件测量结果直接输出数字温度信号,以"一线总线"串行传送给CPU,同时可传送CRC校验码,具有极强的抗干扰纠错能力负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作以上特点使DS18B20非常适用与多点、远距离温度检测系统。 DS18B20内部结构主要由四部分组成:64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。DS1302的介绍2002 是美国DALLAS公司推出的一种高性能、低功耗、带RAM的
8、实时时钟电路,它可以对年、月、日、周日、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.5V5.5V。采用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。引脚功能及结构图1示出DS1302的引脚排列,其中Vcc1为后备电源,VCC2为主电源。在主电源关闭的情况下,也能保持时钟的连续运行。DS1302由Vcc1或Vcc2两者中的较大者供电。当V
9、cc2大于Vcc10.2V时,Vcc2给DS1302供电。当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1和X2是振荡源,外接32.768kHz晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能
10、将RST置为高电平。DS18B20完成温度转换必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。必须先启动DS18B20开始转换,再读出温度转换值。设计电路图论是内部寄生电源还是外部供电,I/O口线要接5K左右的上拉电。在这里采用前者方式供电。六、设计流程图七仿真结果仿真结果分析(1)能数字显示被测温度,测量温度范围可以达到0100(2)分辨率不低于0.5 ;(3)带有计时和时间显示功能;(4)高、低两路限温控制点可在0100 范围内独立设置 ;(5)当温度达到高、低限温控制点发出声光报警。八程序代码源程序/DS1302头文件/ #ifndef _REAL_TIMER_DS1302_2
11、003_7_21_sbit DS1302_CLK = P16; /实时时钟时钟线引脚sbit DS1302_IO = P17; /实时时钟数据线引脚sbit DS1302_RST = P15; /实时时钟复位线引脚sbit ACC0 = ACC0;sbit ACC7 = ACC7;typedef struct _SYSTEMTIME_unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char
12、Year;unsigned char DateString9;unsigned char TimeString9;SYSTEMTIME; /定义的时间类型#define AM(X) X#define PM(X) (X+12) / 转成24小时制#define DS1302_SECOND 0x80#define DS1302_MINUTE 0x82#define DS1302_HOUR 0x84#define DS1302_WEEK 0x8A#define DS1302_DAY 0x86#define DS1302_MONTH 0x88#define DS1302_YEAR 0x8C#defin
13、e DS1302_RAM(X) (0xC0+(X)*2) /用于计算DS1302_RAM 地址的宏 void DS1302InputByte(unsigned char d) /实时时钟写入一字节(内部函数) unsigned char i;ACC = d;for(i=8; i>0; i-)DS1302_IO = ACC0; /相当于汇编中的 RRCDS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC >> 1;unsigned char DS1302OutputByte() /实时时钟读取一字节(内部函数) unsigned char i;for(
14、i=8; i>0; i-)ACC = ACC >>1;ACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0;return(ACC);void Write1302(unsigned char ucAddr, unsigned char ucDa) /ucAddr: DS1302地址, ucData: 要写的数据DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); / 地址,命令DS1302InputByte(ucDa); / 写1Byte数据DS1302
15、_CLK = 1;DS1302_RST = 0;unsigned char Read1302(unsigned char ucAddr) /读取DS1302某地址的数据 unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr|0x01); / 地址,命令ucData = DS1302OutputByte(); / 读1Byte数据DS1302_CLK = 1;DS1302_RST = 0;return(ucData);void DS1302_SetProtect(bit f
16、lag) /是否写保护if(flag)Write1302(0x8E,0x10);elseWrite1302(0x8E,0x00);void DS1302_SetTime(unsigned char Address, unsigned char Value) / 设置时间函数DS1302_SetProtect(0);Write1302(Address, (Value/10)<<4 | (Value%10);void DS1302_GetTime(SYSTEMTIME *Time)unsigned char ReadValue;ReadValue = Read1302(DS1302_S
17、ECOND);Time->Second = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MINUTE);Time->Minute = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_HOUR);Time->Hour = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F
18、); ReadValue = Read1302(DS1302_DAY);Time->Day = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_WEEK);Time->Week = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_MONTH);Time->Month = (ReadValue&0x70)>>4)*
19、10 + (ReadValue&0x0F); ReadValue = Read1302(DS1302_YEAR);Time->Year = (ReadValue&0x70)>>4)*10 + (ReadValue&0x0F); void DateToStr(SYSTEMTIME *Time)Time->DateString0 = Time->Year/10 + '0'Time->DateString1 = Time->Year%10 + '0'Time->DateString2 = '
20、;-'Time->DateString3 = Time->Month/10 + '0'Time->DateString4 = Time->Month%10 + '0'Time->DateString5 = '-'Time->DateString6 = Time->Day/10 + '0'Time->DateString7 = Time->Day%10 + '0'Time->DateString8 = '0'void TimeToSt
21、r(SYSTEMTIME *Time)Time->TimeString0 = Time->Hour/10 + '0'Time->TimeString1 = Time->Hour%10 + '0'Time->TimeString2 = ':'Time->TimeString3 = Time->Minute/10 + '0'Time->TimeString4 = Time->Minute%10 + '0'Time->TimeString5 = ':
22、39;Time->TimeString6 = Time->Second/10 + '0'Time->TimeString7 = Time->Second%10 + '0'Time->DateString8 = '0'void Initial_DS1302()unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80)DS1302_SetTime(DS1302_SECOND,0);#endif/LCD1602头文件/ #ifndef LCD_CHAR_
23、1602_2005_4_9#include <intrins.h>/Port Definitions* sbit LcdRs = P20;sbit LcdRw = P21;sbit LcdEn = P22;sfr DBPort = 0xB0; /P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/内部等待函* unsigned char LCD_Wait()LcdRs=0;LcdRw=1; _nop_();LcdEn=1; _nop_();LcdEn=0;return DBPort;/向LCD写入命令或数*#define LCD_COMMAND 0 / Com
24、mand#define LCD_DATA 1 / Data#define LCD_CLEAR_SCREEN 0x01 / 清屏#define LCD_HOMING 0x02 / 光标返回原点void LCD_Write(bit style, unsigned char input)LcdEn=0;LcdRs=style;LcdRw=0; _nop_();DBPort=input; _nop_();/注意顺序LcdEn=1; _nop_();/注意顺序LcdEn=0; _nop_();LCD_Wait();/设置显示模式* #define LCD_SHOW 0x04 /显示开#define LC
25、D_HIDE 0x00 /显示关#define LCD_CURSOR 0x02 /显示光标#define LCD_NO_CURSOR 0x00 /无光标#define LCD_FLASH 0x01 /光标闪动#define LCD_NO_FLASH 0x00 /光标不闪动void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode);/设置输入模式* #define LCD_AC_UP 0x02#define LCD_AC_DOWN 0x00 / default#define LCD_
26、MOVE 0x01 / 画面可平移#define LCD_NO_MOVE 0x00 /defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/初始化LCD* void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位数据端口,2行显示,5*7点阵 LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标LCD_Writ
27、e(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC递增, 画面不动 void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0xC0|x);if(y=2)LCD_Write(LCD_COMMAND,0x90|x);if(y=3)LCD_Write(LCD_COMMAND,0XD0|x);void Print(unsigned ch
28、ar *str)while(*str!='0')LCD_Write(LCD_DATA,*str);str+;#endif/C文件/ #include<reg51.h>#include<LCD1602.h>#include<DS1302.h>#define uchar unsigned char#define uint unsigned intsbit DQ=P26;sbit RS=P20;sbit RW=P21;sbit EN=P22;sbit alarm=P13;unsigned char code str1="H:30C L:1
29、0C"char t,f1;uchar data disdata10=0,0,0,0x2e,0,0x43,0x20,0x20,0x20,0x20;uint tvalue,temp1;uchar tflag; /温度正负标志uchar flagdat;void delay1ms(uint ms)uint i;while(ms-)for(i=0;i<120;i+);void wr_com(uchar com) /写指令/RS=0;P3=com;delay1ms(1);EN=1;delay1ms(1);EN=0;void wr_dat(uchar dat) /写数据/RS=1;P3=d
30、at;delay1ms(1);EN=1;delay1ms(1);EN=0;void display(uchar *p) /显示/while(*p!='0')wr_dat(*p);p+;delay1ms(1);init() /初始化显示f1=1;flagdat = 0;alarm = 0;RS=0;RW=0;EN=0;wr_com(0x38);wr_com(0x0c);wr_com(0x06);wr_com(0x01);wr_com(0xd0);display(str1);TMOD=0X01;TH0=(65536-10000)/256;TL0=(63356-10000)%256;
31、EA=1;ET0=1;void delay_18B20(uint i)/延时1微秒 while(i-);/*ds1820复位*/void ds1820rst()bit flag=1;while (flag)while (flag)DQ = 1;delay_18B20(1);DQ = 0;delay_18B20(100); / 550us DQ = 1;delay_18B20(6); / 66usflag = DQ;delay_18B20(45); /延时500usflag = DQ; /检测到18B20的应答 /*读数据*/uchar ds1820rd()uchar i=0;uchar dat
32、 = 0;for (i=8;i>0;i-)DQ = 0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay_18B20(10);DQ=1;return(dat);/*写数据*/void ds1820wr(uchar wdata)uchar i=0;for (i=8; i>0; i-)DQ = 0;DQ = wdata&0x01;delay_18B20(10);DQ = 1;wdata>>=1;/*读取温度值并转换*/uint read_temp()uchar a,b;ds1820rst();ds1820wr(0xcc); /*跳过读序列号*/ ds1820wr(0x44); /*启动温度转换*/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025旧版商品房买卖合同范本
- 移动医疗与学生心理健康管理服务的新模式
- 2023年水资源专用机械投资申请报告
- 游戏化学习提升小学生数学能力的秘密武器
- 2025年粤人版选修4地理上册阶段测试试卷含答案
- 2025年冀教新版选择性必修1生物上册月考试卷含答案
- 2025年粤教版七年级物理下册月考试卷
- 2025年统编版必修2生物上册月考试卷含答案
- 2025年度智能门禁系统租赁合同范本8篇
- 二零二五版定制门窗个性化定制合同范本4篇
- 物业民法典知识培训课件
- 2023年初中毕业生信息技术中考知识点详解
- 2024-2025学年八年级数学人教版上册寒假作业(综合复习能力提升篇)(含答案)
- 《万方数据资源介绍》课件
- 医生定期考核简易程序述职报告范文(10篇)
- 第一章-地震工程学概论
- 《中国糖尿病防治指南(2024版)》更新要点解读
- 初级创伤救治课件
- 交通运输类专业生涯发展展示
- 2024年山东省公务员录用考试《行测》试题及答案解析
- 神经重症气管切开患者气道功能康复与管理专家共识(2024)解读
评论
0/150
提交评论