您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 单片机课程设计报告LCD显示温度 (1)
《单片机原理与应用》课程设计报告题目:LCD数字式温度湿度测量计专业:自动化班级:A1332学号:10姓名:曾志勇指导老师:查兵2016-06-08目录1.设计题目、要求及分工..................................11.1.设计要求.........................................11.2.分工.............................................12.系统设计方案论证与选择................................13.系统硬件电路设计......................................13.1.单片机的选择......................................13.2.温度传感器电路的设计..............................23.3.LCD1602显示设计..................................34.系统软件设计..........................................44.1.主程序...........................................44.2.读出温度子程序....................................65.系统仿真调试结果记录及分析...........................116.总结.................................................13参考文献................................................141设计题目、要求及分工1.1.设计要求(1)熟悉掌握单片机的中断,定时器及各并行口的应用;(2)熟悉掌握单片机温度湿度的测量方法;(3)利用温度传感器及单片机完成对温度的检测;(4)掌握将检测的温度信号转换为数码管显示的数字信号;(5)设计一个简单数字温度计,能够测量通常环境下的温度,能够实现零下温度的测量,能够测量小数,精度为0.01度。1.2.分工经过我和队友的商讨,为了能最大发挥各自的长处。我主要负责程序的编写与单片机的调试。他主要负责一些相关资料文献的查找与课程设计报告。1.系统设计方案论证与选择在日常生活和生产中,我们经常要测量环境的温度湿度,传统的测量方式采用水银温度计和干湿球湿度计查算法,存在着误差大,操作使用不便等问题,采用工业级测量仪表价格昂贵。采用AT89C51和温度传感器等构成的LCD数字式温度湿度测量计精度高且价格便宜。由于本设计是测温电路,可以使用一只温度传感器DS18B20,此传感器,可以很容易直接读取被测温度值,进行A/D转换,将数据传入80C51单片机中,单片机处理后,通过LED显示出当前实测温度。2.系统硬件电路设计2.1.单片机的选择单片80C51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统。本次设计需要注意的几个端口:P0口(39—32):是一组8位漏极开路行双向I/O口,也既地址/数据总线复用口。可作为输出口使用时,每位可吸收电流的方式驱动8个TTL逻辑电路,对端口写“1”可作为高阻抗输入输入端用。2在访问外部数据存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在Flash编程时,PO口接收指令字节,而在程序校验时,输出指令字节,校验时,要求接上拉电阻。P3口(10—17):是一组带有内部上拉电阻的8位双向I/O口,,P1的输入缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输出端口。作输出端口时,被外部拉低的P3口将用上拉电阻输出电流。。2.2.温度传感器电路的设计DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。64位ROM的结构开始8位是产品类型的编号,接着是每个器件的惟一的序号,共有48位,最后8位是前面56位的CRC检验码,这也是多个DS18B20可以采用一线进行通信的原因。温度报警触发器TH和TL,可通过软件写入户报警上下限。DS18B20温度传感器的内部存储器还包括一个高速暂存RAM和一个非易失性的可电擦除的EERAM。高速暂存RAM的结构为8字节的存储器,结构如图2.3所示。头2个字节包含测得的温度信息,第3和第4字节TH和TL的拷贝,是易失的,每次上电复位时被刷新。第5个字节,为配置寄存器,它的内容用于确定温度值的数字转换分辨率。DS18B20工作时寄存器中的分辨率转换为相应精度的温度数值。该字节各位的定义:低5位一直为1,TM是工作模式位,用于设置DS18B20在工作模式还是在测试模式,DS18B20出厂时该位被设置为0,用户要去改动,R1和R0决定温度转换的精度位数,来设置分辨率S18B20温度转换的时间比较长,而且分辨率越高,所需要的温度数据转换时间越长。因此,在实际应用中要将分辨率和转换时间权衡考虑。温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒,可以将检测到的温度直接显示到80C51的两个数码管上。高速暂存RAM的第6、7、8字节保留未用,表现为全逻辑1。第9字节读出前面所有8字节的CRC码,可用来检验数据,从而保证通信数据的正确性。当DS18B20接收到温度转换命令后,开始启动转换。转换完成后的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存存储器的第1、2字节。单3片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以0.0625℃/LSB式表示。当符号位S=0时,表示测得的温度值为正值,可以直接将二进制位转换为十进制;当符号位S=1时,表示测得的温度值为负值,要先将补码变成原码,再计算十进制数值。表2是一部分温度值对应的二进制温度数据。DS18B20完成温度转换后,就把测得的温度值与RAM中的TH、TL字节内容作比较。若T>TH或T<TL,则将该器件内的报警标志位置位,并对主机发出的报警搜索命令做出响应。因此,可用多只DS18B20同时测量温度并进行报警搜索。在64位ROM的最高有效字节中存储有循环冗余检验码(CRC)。主机ROM的前56位来计算CRC值,并和存入DS18B20的CRC值作比较,以判断主机收到的ROM数据是否正确。另外,由于DS18B20单线通信功能是分时完成的,它有严格的时隙概念,因此读写时序很重要。系统对DS18B20的各种操作按协议进行。操作协议为:初使化DS18B20(发复位脉冲)→发ROM功能命令→发存储器操作命令→处理数据。图2-1温度传感器电路2.3.LCD1602显示设计4图2-2LCD显示电路图LCD1602显示流程:图3-3流程图3.系统软件设计3.1.主程序主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。温度测量每1s进行一次。主程序流程图如图4.1所示:#includereg51.h#includelcd.h#includetemp.hvoidLcdDisplay(int);voidmain(){LcdInit();//初始化LCD1602LcdWriteCom(0x88);//写地址80表示初始地址LcdWriteData('C');while(1){LcdDisplay(Ds18b20ReadTemp());//Delay1ms(1000);//1s钟刷一次5}}/*函数名:LcdDisplay()*函数功能:LCD显示读取到温度/voidLcdDisplay(inttemp)//lcd显示{unsignedchardatas[]={0,0,0,0,0};//定义数组floattp;if(temp0)//当温度值为负数{LcdWriteCom(0x80);//写地址80表示初始地址LcdWriteData('-');//显示负temp=temp-1;temp=~temp;tp=temp;temp=tp*0.0625*100+0.5;}else{LcdWriteCom(0x80);LcdWriteData('+');tp=temp;temp=tp*0.0625*100+0.5;}datas[0]=temp/10000;datas[1]=temp%10000/1000;datas[2]=temp%1000/100;datas[3]=temp%100/10;datas[4]=temp%10;6LcdWriteCom(0x82);//写地址80表示初始地址LcdWriteData('0'+datas[0]);//百位LcdWriteCom(0x83);//写地址80表示初始地址LcdWriteData('0'+datas[1]);//十位LcdWriteCom(0x84);//写地址80表示初始地址LcdWriteData('0'+datas[2]);//个位LcdWriteCom(0x85);//写地址80表示初始地址LcdWriteData('.');//显示‘.’LcdWriteCom(0x86);//写地址80表示初始地址LcdWriteData('0'+datas[3]);//显示小数点LcdWriteCom(0x87);//写地址80表示初始地址LcdWriteData('0'+datas[4]);//显示小数点}图3-1主程序流程图3.2.读出温度子程序读出温度子程序的主要功能是读出RAM中的9字节。在读出时必须进行CRC7校验,校验有错时不能进行温度数据的改写。读出温度子程序流程图如下图所示:#includetemp.hvoidDelay1ms(uinty){uintx;for(;y0;y--){for(x=110;x0;x--);}}ucharDs18b20Init(){uchari;DSPORT=0;//将总线拉低480us~960usi=70;while(i--);//延时642usDSPORT=1;//然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低i=0;while(DSPORT)//等待DS18B20拉低总线{i++;if(i5)//等待5MS{return0;//初始化失败}Delay1ms(1);}return1;//初始化成功}voidDs18b20WriteByte(uchardat)8{uinti,j;for(j=0;j8;j++){DSPORT=0;//每写入一位数据之前先把总线拉低1usi++;DSPORT=dat&0x01;//然后写入一个数据,从最低位开始i=6;while(i--);//延时68us,持续时间最少60usDSPORT=1;//然后释放总线,至少1us给总线恢复时间才能接着写入第二个数值dat=1;}}ucharDs18b20ReadByte(){ucharbyte,bi;uinti,j;for(j=8;j0;j--){DSPORT=0;//先将总线拉低1usi++;DSPORT=1;//然后释放总线i++;i++;//延时6us等待数据稳定bi=DSPORT;//读取数据,从最低位开始读取/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉那位补0。*/byte=(byte1)|(bi7);9i=4;//读取完之后等待48us再接着读取下一个数while(i--);}returnbyte;}voidDs18b20ChangTemp(){Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);//跳过ROM操作命令Ds18b20Wri
本文标题:单片机课程设计报告LCD显示温度 (1)
链接地址:https://www.777doc.com/doc-6073586 .html