基于单片机温度传感器课程设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

HUBEINORMALUNIVERSITY单片机课程设计所在院系教育信息与技术学院专业名称电子信息工程班级1005题目基于数字温度传感器的数字温度计指导教师成员完成时间2012.12.27一、设计任务及要求:设计任务:基于数字温度传感器的数字温度计的设计。要求:1.利用数字温度传感器DS18B20与单片机结合来测量温度;2.利用数字温度传感器DS18B20测量温度信号,计算后在LCD数码管上显示相应的温度值。其温度测量范围为−55℃~125℃,精确到0.5℃;3.数字温度计所测量的温度采用数字显示,控制器使用单片机AT89C51,测温传感器使用DS18B20;4.用蜂鸣器设置警告音。指导教师签名:2012年12月28日二、指导教师评语:指导教师签名:2012年12月28日三、成绩验收盖章2012年12月28日基于数字温度传感器的数字温度计的设计1.芯片DS18B20的说明美国Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持一线总线接口的温度传感器,在其内部使用了在板(ON-B0ARD)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。一线总线独特而且经济的特点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。现在,新一代的DS18B20体积更小、更经济、更灵活。使你可以充分发挥“一线总线”的优点。DS18B20的主要特性1.1芯片DS18B20的特点(1)适应电压范围更宽,电压范围:3.0~5.5V,在寄生电源方式下可由数据线供电(2)独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理与DS18B20的双向通讯(3)DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点测温(4)DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三极管的集成电路内(5)温范围-55℃~+125℃,在-10~+85℃时精度为±0.5℃(6)可编程的分辨率为9~12位,对应的可分辨温度分别为0.5℃、0.25℃、0.125℃和0.0625℃,可以实现高精度测温。(7)在9位分辨率最多在93.75ms把温度转换成数字,12位分辨率是最多可在750ms内将温度转换成数字,速度更快。(8)温度测试结果直接转换成数字温度信号,以“一线总线”串行传输给CPU,同事科传送SRC检验码,菊友极强的抗干扰校正能力。(9)负压特性:电源极性接反时芯片不会因发热而烧毁,但不会正常工作。2.液晶显示器LM016L的说明接口信号说明:编号符号引脚说明编号符号引脚说明1VSS电源地9D2DataI/02VDD电源正极10D3DataI/03VL液晶显示偏压信号11D4DataI/04RS数据/命令选择端12D5DataI/05R/W读/写选择端13D6DataI/06E使能信号14D7DataI/07D0DataI/015BLA背光级正极8D1DataI/016BLK背光级负极下表为控制命令表:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L**6置功能00001DLNF**7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图一是016L的内部显址。图一液晶显示简介①液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器具有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式电脑、数字摄像机、PDA移动通信工具等众多领域。②液晶显示器的分类液晶显示的分类方法有很多种,通常可按其显示方式分为段式、字符式、点阵式等。除了黑白显示外,液晶显示器还有多灰度有彩色显示等。如果根据驱动方式来分,可以分为静态驱动(Static)、单纯矩阵驱动(SimpleMatrix)和主动矩阵驱动(ActiveMatrix)三种。③字符的显示用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。3.总体电路流程图时钟振荡主控电路LCD显示温度传感器开始DS18B20的初始化跳过读序列号的操作启动温度转换读取温度寄存器跳过读序列号的操作DS18B20的初始化结束4.总体电路设计LCD与AT89C51的连接,(如图一所示)将LCD的D0~D7引脚分别与单片机的P0.1~P0.7相连,使LCD能接受来自单片机的信号。电路如图二所示如图可见,电路主要是由AT89C51芯片和LM016L和蜂鸣器构成了主要电路。开关的控制,可调整温度的范围。5.系统程序设计程序清单:#includeAT89X51.H#includeintrins.h#includeabsacc.h#defineuintunsignedint#defineuncharunsignedcharunchartempl,temph,i,y,z,n;unchara,b;//LCD的变量uncharsign=0;//标志变量bitk;//判断正负变量sbitdq=P3^5;sbitrs=P2^0;//LCD显示的定义取值sbitrw=P2^1;sbite=P2^2;sbitbf=P0^7;sbitDQ=P2^5;//键盘定义sbitread=P3^0;sbitincH=P3^2;sbitdesH=P3^3;sbitreset=P3^4;//蜂鸣器sbitBUZZER=P2^6;floatt4,t5,t6,t7,tt;//温度转换的变量uinttp;unchartemperature,Htemp,Ltemp;uncharD1,D2,D3;uintD4,D5,D6,D9,D7,D8;uncharcodedis1[]={0123456789};uncharcodedis2[]={temp:};uncharcodedis3[]={WARN};uncharcodedis4[]={Htemp:};uncharcodedis5[]={working};uncharcodedis6[]={Ltemp:};bitflag_1820_1;bitflag_1820_2;voiddelay_ms(unsignedchartime);voidledshow(void);voidkeypress(void);voidinit(void);voidgettemp();voidinit1820(void);voidwrite1820(unchar);unsignedcharread1820(void);voiddelay_us(unchar);voiddelay3(unchar);/*延时*/voiddelay(uintt){uinti;while(t--){for(i=0;i125;i++){}}}//LCD显示函数voiddelay1(unchartime){uncharn;n=0;while(ntime){n++;}return;}voiddelay3(uncharx){for(y=x;y0;y--)for(z=x;z0;z--);}unchartestBF(){bitresult;rs=0;rw=1;e=1;_nop_();_nop_();_nop_();_nop_();result=bf;e=0;returnresult;}voidwritecmd(uncharZL){while(testBF()==1);rs=0;rw=0;e=0;_nop_();_nop_();P0=ZL;e=1;_nop_();_nop_();_nop_();_nop_();e=0;}voidpos(uncharpos){writecmd(pos|0x80);}voidwritedate(unchardate){while(testBF()==1);rs=1;rw=0;e=0;_nop_();_nop_();P0=date;e=1;_nop_();_nop_();_nop_();_nop_();e=0;}voidinit(){delay3(20);writecmd(0x38);delay3(30);writecmd(0x0d);delay3(30);writecmd(0x06);delay3(30);writecmd(0x01);delay3(30);}//键盘程序//主程序voidmain(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;//关闭外部中断0EX1=0;//关闭外部中断1while(1){if(read==0){delay3(2000);if(read==0){sign++;}}}}if(sign==1){BUZZER=1;//关闭蜂鸣器EX0=1;//开启外部中断0EX1=1;//开启外部中断1init();pos(0);for(i=0;i6;){writedate(dis4[i]);i++;}D6=Htemp%10;D7=Htemp%100/10;D8=Htemp/100;pos(0x6);writedate(dis1[D8]);writedate(dis1[D7]);}if(sign==2){BUZZER=1;//关闭蜂鸣器EX0=1;//开启外部中断0EX1=1;//开启外部中断1init();pos(0);for(i=0;i6;){writedate(dis6[i]);i++;}D6=Htemp%10;D7=Htemp%100/10;D8=Htemp/100;pos(0x6);writedate(dis1[D8]);writedate(dis1[D7]);writedate(dis1[D6]);}if(sign2){sign=0;}}//中断程序voidint0(void)interrupt0{EX0=0;//关外部中断0if(desH==0&&sign==1){Htemp--;if(HtempLtemp)Htemp=Ltemp;}elseif(desH==0&&sign==2){Ltemp--;}}/*****外部中断1服务程序*****/voidint1(void)interrupt2{EX1=0;//关外部中断1if(incH==0&&sign==1){Htemp++;}elseif(incH==0&&sign==2){Ltemp++;if(LtempHtemp)Ltemp=Htemp;}}//定时器T0服务程序voidisr_t0(void)interrupt1{TH0=50000/256;TL0=50000%256;TMOD=0x10;TH1=50000/256;TL1=50000%256;gettemp();delay(50);if(tpHtemp){BUZZER=1;pos(0x04);for(i=0;i7;){writ

1 / 18
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功