




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中北大学单片机课程设计说明书引言传统的玻璃水银(汞)温度计因价格便宜读数准确, 目前仍为国内医院和家庭使用的主流体温计,但该温度计存在易破碎产生水银中毒的安全隐患。欧美各国从上世纪末就已纷纷宣布禁止使用与销售水银体温计,换代升级为安全环保的电子体温计。当前市场上大量销售的简易电子温度计普遍读数不准确; 而临床使用的电子体温测量装置体积庞大、价格昂贵17。本项研究设计了一种测量准确、操作简单、便于携带且价格低廉的多功能电子温度计。采用数字温度传感器DS18B20 检测温度, 并将数字化的温度信号传至单片机。经单片机计算、校正后的温度值及测量时间由液晶显示器实时显示。该温度计可精确、方便地测量体温
2、和食物温度,也可用于测量室内外温度、冰箱温度等,具有测温定时、温度记忆、音响提示、背光显示、自动关机等多项功能,可作为一种通用测温仪器广泛用于医院和家庭。该温度计配备的附加探头,特别适用于婴幼儿和老人饮食时测量食物温单片机在测控领域中具有十分广泛的应用,它既能测量信号,又可以测量温度湿度等非电信号。由单片机构成的温度检测、温度控制可广泛的应用于各个领域。在日常生活及生产中我们常常检测温度,传统的方式是采用热电偶或热电阻。其硬件电路和软件调试比较复杂,制作成本高。本系统采用DS18B20,它直接输入数字温度信号,与单片机借口,结构非常简洁,制作成本低。单片机的接口信号是数字信号。要想用单片机获取
3、温度这类非电信号的信息, 必须使用温度传感器, 将温度信息转换为电流或电压输出。如果转换后的电流或电压输出是模拟信号, 还必须进行A/ D转换, 以满足单片机接口的需要。传统的温度检测大多以热敏电阻作为温度传感器。但是, 热敏电阻的可靠性较差、测量温度准确率低, 而且还必须经专门的接口电路转换成数字信号后才能由单片机进行处理。本文介绍一种采用数字温度传感器实现的基于单片机的数字温度计。1、设计任务与要求1.1基本功能该课程设计基本思路是基于单片机AT89C52和1602LED与DS18B20,使得期间可以测得周围环境的温度并在LED上显示出该温度值,在自主设计的系统中,如果该温度超出设定的范围
4、,就会引起蜂鸣器的发声来通知工作人员。在这一课题中,可以利用K已设置功能的开关。1.2 课程设计的内容与要求利用数字温度传感器DS18B20与单片机结合来测量温度。利用数字温度传感器DS18B20测量温度信号,计算后在LED数码管上显示相应的温度值。其温度测量范围为55125,精确到0.5。数字温度计所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20,用3位共阳极LED数码管以串口传送数据,实现温度显示。1.3 课程设计的指标 1)利用数字温度传感器DS18B20测量温度信号,计算后在1602LED上显示. 2)其温度测量范围为55125,精确到0.5。 3
5、) 用蜂鸣器设置警告音。2、总体电路设计2.1 电路设计LED与AT89C51的连接,(如图一所示)将LED的D0D7引脚分别与单片机的P0.1P0.7相连,使LED能接受来自单片机的信号。图2.1电路接线图 2.2 各元件的功能2.2.1 芯片DS18B20的说明美国Dallas 半导体公司的数字化温度传感器DS18B20 是世界上第一片支持 "一线总线"接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一
6、代的DS18B20 体积更小、更经济、更灵活。使你可以充分发挥“一线总线”的优点。图2.2 DS18B20外形 2.2.2 DS18B20 的主要特性(1)适应电压范围更宽,电压范围:3.05.5V,在寄生电源方式下可由数据线供电(2)独特的单线接口方式,DS18B20 在与微处理器连接时仅需要一条口线即可实现微处理与DS18B20 的双向通讯(3)DS18B20 支持多点组网功能,多个DS18B20 可以并联在唯一的三线上,实现组网多点测温(4)DS18B20 在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内(5)温范围55125,在-10+85时精度为
7、177;0.5(6)可编程的分辨率为912 位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625,可以实现高精度测温。(7)在9位分辨率最多在93.75ms把温度转换成数字,12 位分辨率是最多可在750ms内将温度转换成数字,速度更快。(8)温度测试结果直接转换成数字温度信号,以“一线总线”串行传输给CPU,同事科传送SRC检验码,菊友极强的抗干扰校正能力。 (9)负压特性:电源极性接反时芯片不会因发热而烧毁,但不会正常工作。2.2.3 液晶显示器1602LCD的说明表2.1接口信号说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2Data I/02VDD电源正极10D
8、3Data I/03VL液晶显示偏压信号11D4Data I/04RS数据/命令选择端12D5Data I/05R/W读/写选择端13D6Data I/06E使能信号14D7Data I/07D0Data I/015BLA背光级正极8D1Data I/016BLK背光级负极 表2.2 控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数
9、据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容 液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符。图2.3 内部显址 2.3 电路的说明 如图可见,电路主要是由AT89C52芯片和1602LCD和蜂鸣器构成了主要电路。开关的控制,可调整温度的范围。图2.4 仿真图2.4 流程图 3、系统程序的设计 程序清单 :#include <A
10、T89X51.H>#include <intrins.h>#include<absacc.h>#define uint unsigned int#define unchar unsigned charunchar templ,temph,i,y,z,n;unchar a,b;/LCD的变量unchar sign=0;/标志变量bit k;/判断正负变量sbit dq=P35;sbit rs=P20;/LCD显示的定义取值sbit rw=P21;sbit e=P22;sbit bf=P07;sbit DQ=P25;/键盘定义sbit read=P30;sbit in
11、cH=P32;sbit desH=P33;sbit reset=P34;/蜂鸣器sbit BUZZER=P26;float t4,t5,t6,t7,tt;/温度转换的变量uint tp;unchar temperature,Htemp,Ltemp;unchar D1,D2,D3;uint D4,D5,D6,D9,D7,D8;unchar code dis1="0123456789"unchar code dis2="temp:"unchar code dis3="WARN"unchar code dis4="Htemp:&q
12、uot;unchar code dis5="working"unchar code dis6="Ltemp:"bit flag_1820_1;bit flag_1820_2;void delay_ms(unsigned char time);void ledshow(void);void keypress(void);void init(void);void gettemp();void init1820(void);void write1820(unchar);unsigned char read1820(void);void delay_us(unc
13、har);void delay3(unchar);/* 延时*/void delay(uint t)uint i;while(t-) for(i=0;i<125;i+) /LCD显示函数void delay1(unchar time)unchar n;n=0;while(n<time)n+;return;void delay3(unchar x) for(y=x;y>0;y-)for(z=x;z>0;z-);unchar testBF() bit result;rs=0;rw=1;e=1;_nop_();_nop_();_nop_();_nop_();result=bf
14、;e=0;return result;void writecmd(unchar ZL) while(testBF()=1);rs=0;rw=0;e=0;_nop_();_nop_();P0=ZL;e=1;_nop_();_nop_();_nop_();_nop_();e=0;void pos(unchar pos)writecmd(pos|0x80);void writedate(unchar date)while(testBF()=1);rs=1;rw=0;e=0;_nop_();_nop_();P0=date;e=1;_nop_();_nop_();_nop_();_nop_();e=0;
15、void init()delay3(20);writecmd(0x38);delay3(30);writecmd(0x0d);delay3(30);writecmd(0x06);delay3(30);writecmd(0x01);delay3(30);/键盘程序/主程序void main(void) TMOD=0x01; TH0=50000/256; TL0=50000%256; Htemp=124;Ltemp=-24; P3=0xFF; init();if(sign=0) EA=1;TR0=1;ET0=1; EX0=0; /关闭外部中断0 EX1=0; /关闭外部中断1 while(1) i
16、f(read=0) delay3(2000); if(read=0) sign+; if(sign=1) BUZZER=1; /关闭蜂鸣器 EX0=1; /开启外部中断0 EX1=1; /开启外部中断1 init(); pos(0); for(i=0;i<6;) writedate(dis4i);i+; D6=Htemp%10; D7=Htemp%100/10; D8=Htemp/100;pos(0x6);writedate(dis1D8);writedate(dis1D7); if(sign=2) BUZZER=1; /关闭蜂鸣器 EX0=1; /开启外部中断0 EX1=1; /开启外
17、部中断1 init(); pos(0); for(i=0;i<6;) writedate(dis6i);i+; D6=Htemp%10; D7=Htemp%100/10; D8=Htemp/100;pos(0x6);writedate(dis1D8);writedate(dis1D7);writedate(dis1D6); if(sign>2) sign=0;/中断程序void int0(void) interrupt 0EX0=0; /关外部中断0if(desH=0&&sign=1) Htemp-; if(Htemp<Ltemp) Htemp=Ltemp;e
18、lse if(desH=0&&sign=2) Ltemp-; /*外部中断1服务程序*/void int1(void) interrupt 2EX1=0; /关外部中断1if(incH=0&&sign=1) Htemp+;else if(incH=0&&sign=2) Ltemp+; if(Ltemp>Htemp) Ltemp=Htemp; /定时器T0服务程序void isr_t0(void) interrupt 1TH0=50000/256;TL0=50000%256;TMOD=0x10;TH1=50000/256;TL1=50000%
19、256;gettemp();delay(50);if (tp<Htemp) BUZZER=1; pos(0x04);for(i=0;i<7;)writedate(dis5i);i+;pos(0x40);for(i=0;i<5;)writedate(dis2i);i+;D1=(unchar)(tp%10);D2=(unchar)(tp%100/10);D3=(unchar)(tp/100);D4=(uint)(tt*10);D5=(uint)(tt*100)%10;if(k=1)pos(0x46); writedate('-'); else pos(0x46);
20、 writedate();pos(0x47);writedate(dis1D3);writedate(dis1D2);writedate(dis1D1);writedate('.');writedate(dis1D4);writedate(dis1D5);writedate(0xdf);writedate('C'); else init(); pos(0x04);for(i=0;i<4;) writedate(dis3i); i+; BUZZER=0; /DS18B20读取温度void gettemp() init1820(); write1820(0xc
21、c); write1820(0x44); init1820(); write1820(0xcc); write1820(0xbe); templ=read1820();/低8位(其中的第四位是小数点后的) temph=read1820();/高8位(其中前五位是符号值) z=temph;/把符号位留下判断正负k=(bit)(z>>7);if(k=1) /负数就取反加一 templ=templ; templ=templ+1; temph=temph; else templ=templ; temph=temph; n=templ; y=n&0x01;t7=y*0.0625; n
22、>>=1; y=n&0x01;/小数点最后的数 t4=y* 0.125; n>>=1; y=n&0x01; t5=y* 0.25; n>>=1; y=n&0x01; t6=y*0.5;tt=t4+t5+t6+t7; init1820(); tp=temph*256+templ; temperature=tp; tp=tp>>4; /1820初始化void init1820() DQ = 1; _nop_(); DQ = 0; delay_us(125); /延时510us, delay_us(125); DQ = 1; delay_us(15); while(DQ) _nop_(); delay_us(60); DQ = 1; /*write*void write1820(unchar a) unchar i; for(i=0;i<8;i+) if(a & 0x01) /低位在前; DQ = 0; _nop_();_nop_();_nop_(); DQ = 1; else DQ = 0; _nop_();_nop_();_nop_(); delay_us(30);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 修建建筑公司合同范例
- 亚马逊店铺转让合同范例
- 中文出口销售合同范例
- 公司工会工作年终总结模版
- 区块链技术在农业产品供应链中的应用及效果分析
- 产品联合运营合同范例
- 2025年学校教研工作总结模版
- 医疗AI在专科护理领域的创新实践案例分享
- 2025-2030年花皮小提包项目商业计划书
- 区块链赋能大数据打造智能商业生态
- 污泥运输合同范本协议书
- 2020-2024年安徽省初中学业水平考试中考化学试卷(5年真题+答案解析)
- 视频剪辑制作合同
- 人教版小学数学五年级下册期末测试卷有完整答案
- 【年加工500吨鲍鱼的综合加工生产工艺设计10000字(论文)】
- 2022年新高考全国I卷数学真题(解析版)
- 18文言文二则《囊萤夜读》公开课一等奖创新教学设计
- (四下)语文教学课件-第五单元-单元解读-部编版
- (正式版)JBT 106-2024 阀门的标志和涂装
- 2022高考数学全国1卷(原卷版)
- 阿托品知识课件
评论
0/150
提交评论