单片机课程设计报告LCD显示温度_单片机课程设计温度计
单片机课程设计报告LCD显示温度由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“单片机课程设计温度计”。
《单片机原理与应用》
课程设计报告
题 目:LCD数字式温度湿度测量计 专 业:自动化 班 级:A1332 学 号:10 姓 名:曾志勇 指导老师:查兵
2016-06-08
目 录
1.设计题目、要求及分工..................................1 1.1.设计要求.........................................1 1.2.分工.............................................1 2.系统设计方案论证与选择................................1 3.系统硬件电路设计......................................1 3.1.单片机的选择......................................1 3.2.温度传感器电路的设计..............................2 3.3.LCD1602显示设计..................................3 4.系统软件设计..........................................4 4.1.主程序...........................................4 4.2.读出温度子程序....................................6 5.系统仿真调试结果记录及分析...........................11 6.总结.................................................13 参考文献................................................14
设计题目、要求及分工
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”可作为高阻抗输入输入端用。在访问外部数据存储器时,这组口线分时转换地址(低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字节。单 片机可以通过单线接口读出该数据,读数据时低位在先,高位在后,数据格式以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显示设计
图 2-2 LCD显示电路图
LCD1602显示流程:
图3-3 流程图
3.系统软件设计
3.1.主程序
主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值。温度测量每1s进行一次。主程序流程图如图4.1所示:
#include #include“lcd.h” #include“temp.h” void LcdDisplay(int);void main(){ LcdInit();
//初始化LCD1602
//写地址 80表示初始地址 LcdWriteCom(0x88);LcdWriteData('C');while(1){ LcdDisplay(Ds18b20ReadTemp());Delay1ms(1000);//1s钟刷一次 // } }
/* 函数名 : LcdDisplay()* 函数功能
: LCD显示读取到温度/ void LcdDisplay(int temp)//lcd显示
{ unsigned char datas[] = {0, 0, 0, 0, 0};//定义数组
float tp;if(temp
//当温度值为负数
{
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;LcdWriteCom(0x82);
//写地址 80表示初始地址
LcdWriteData('0'+datas[0]);//百位 LcdWriteCom(0x83);
//写地址 80表示初始地址
LcdWriteData('0'+datas[1]);//十位 LcdWriteCom(0x84);
//写地址 80表示初始地址
LcdWriteData('0'+datas[2]);//个位 LcdWriteCom(0x85);
//写地址 80表示初始地址 //显示 ‘.’
//写地址 80表示初始地址 LcdWriteData('.');LcdWriteCom(0x86);
LcdWriteData('0'+datas[3]);//显示小数点 LcdWriteCom(0x87);
//写地址 80表示初始地址
} LcdWriteData('0'+datas[4]);//显示小数点
图 3-1主程序流程图
3.2.读出温度子程序
读出温度子程序的主要功能是读出RAM中的9字节。在读出时必须进行CRC 校验,校验有错时不能进行温度数据的改写。读出温度子程序流程图如下图所示:
#include“temp.h” void Delay1ms(uint y){ uint x;
} uchar Ds18b20Init(){
uchar i;DSPORT = 0;i = 70;
//将总线拉低480us~960us for(;y>0;y--){ for(x=110;x>0;x--);} while(i--);//延时642us DSPORT = 1;
//然后拉高总线,如果DS18B20做出反应会将在15us~60us后总线拉低
} void Ds18b20WriteByte(uchar dat)i = 0;while(DSPORT)//等待DS18B20拉低总线 {
} return 1;//初始化成功 i++;if(i>5)//等待>5MS { } Delay1ms(1);return 0;//初始化失败 { uint i, j;for(j=0;j
{
DSPORT = 0;i++;DSPORT = dat & 0x01;//然后写入一个数据,从最低位开始 i=6;while(i--);//延时68us,持续时间最少60us DSPORT = 1;
//然后释放总线,至少1us给总线恢复时间才能接 //每写入一位数据之前先把总线拉低1us 着写入第二个数值
} uchar Ds18b20ReadByte(){
uchar byte, bi;uint i, j;for(j=8;j>0;j--){
DSPORT = 0;//先将总线拉低1us i++;DSPORT = 1;//然后释放总线 i++;i++;//延时6us等待数据稳定
bi = DSPORT;//读取数据,从最低位开始读取
/*将byte左移一位,然后与上右移7位后的bi,注意移动之后移掉 } dat >>= 1;那位补0。*/ byte =(byte >> 1)|(bi
} i = 4;//读取完之后等待48us再接着读取下一个数
while(i--);
}
return byte;void Ds18b20ChangTemp(){
Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0xcc);
//跳过ROM操作命令
Ds18b20WriteByte(0x44);//温度转换命令
//等待转换成功,而如果你是一直刷着的话,就不// Delay1ms(100);用这个延时了 } void Ds18b20ReadTempCom(){ Ds18b20Init();
} int Ds18b20ReadTemp(){ int temp = 0;
命令
tml = Ds18b20ReadByte();tmh = Ds18b20ReadByte();temp = tmh;temp
Delay1ms(1);Ds18b20WriteByte(0xcc);//跳过ROM操作命令 Ds18b20WriteByte(0xbe);//发送读取温度命令
uchar tmh, tml;Ds18b20ChangTemp();Ds18b20ReadTempCom();
//先写入转换命令
//然后等待转换完后发送读取温度
//读取温度值共16位,先读低字节 //再读高字节
} temp |= tml;return temp;读出温度子程序 读出温度子程序的主要功能是读出RAM中的9字节。在读出时须进行CRC校验,校验有错时不进行温度数据的改写。得出温度子程序流程图如下图所示。
图 3-2
温度转换命令子程序 温度转换命令子程序主要是发温度转换开始命令。当采用12位分辨率时,转换时间约为750ms。在本程序设计中,采用1s显示程序延时法等待转换的完成。温度转换命令子程序流程图如下图所示。
图 3-2
4.系统仿真调试结果记录及分析
硬件调试比较简单,首先检查电感的焊接是否正确,然后可用万用表测试或通电检测。软件调试可以先编写显示程序并进行硬件的正确性检验,然后分别进行主程序、读出温度子程序、温度转换命令子程序、计算温度子程序和现实数据刷新子程序等的编程及调试 由于DS18B20与单片机采用串行数据传送,因此,对DS18B20进行读/写编程时必须严格地保证读/写时序;否则将无法读取测量结果。
电路Isis仿真测试
烧写程序至单片机:
液晶显示室温为+28.06度 用手触摸DS18B20,发现温度上升为+32.75度,证明温度传感正常工作。
5.总结
这次课程设计,主要是以STC89C51单片机为核心的,对温度的检测与显示进行了简单的设计与阐述。因没有湿度传感器模块,所以未进行湿度检测。本次课程设计可以说是软硬结合,又以硬件为主。当今科技发展迅速,单片机开发有着光明的前景。由于单片机经济实用、开发简便等特点依然在工业控制、家电等领域占据了广泛的市场。所以我选择这样的设计课题,并且能通过此次设计来提高自己软件编制和硬件电路设计的能力。在我完成这次课程设计的过程中,当看到自己将专业知识用于解决实际的问题时,那份成就感和喜悦感是难以形容的。在这次实际的编程以及调试程序过程中,我发现自己学很多课本以外的东西。光靠自己在书本上所学过的这点知识是远远不够的,真正地认识到了工作就是学习的道理。尤其是对于编程来说,需要硬件的功底,也需要软件的能力。当程序有一点点错误时,将使整个程序无效,需要自己静下心来发现错误,改正错误,一次又一次得进行调试,锻炼了沉着踏实的心态。
通过这次对数字温度计的设计与制作,让我们了解了设计电路的程序,也让我们了解了关于数字温度计的原理与设计理念,要设计一个电路总要先用仿真,仿真成功之后才实际接线的。
但是最后的成品却不一定与仿真时完全一样,因为,在实际接线中有着各种各样的条件制约着。并且,在仿真中无法成功的电路接法,在实际中因为芯片本身的特性而能够成功。所以,在设计时应考虑两者的差异,从中找出最适合的设计方法。
通过这次学习,让我们对各种电路都有了大概的了解,所以说,坐而言不如立而行,对于这些电路还是应该自己动手实际操作才会有深刻理解。从这次的课程设计中,我真正的意识到,在以后的学习中,要理论联系实际,把我们所学的理论知识应用到实际当中,学习单机片机更是如此,程序只有在经常写和读的过程中才能提高,这就是我在这次课程设计中的最大收获。这次课程设计对我来说是一次比较全面的、富有创造性和探索性的锻炼,令我深有感触,对于我今后的学习、工作和生活都将是受益非浅。
参考文献
(1)江世明.单片机原理与应用.上海交通大学出版社.2013;(2)朱清慧.电子线路设计、制版与仿真.清华大学出版社.2011.6;
(3)黄同成.程序设计基础与教程(C语言).湖南人民出版社.2011.12;
(4)王东峰等.单片机C语言应用100例[M].北京电子工业出版社,2009;
(5)陈海宴.51单片机原理及应用[M].北京航空航天大学出版社.2010;
(6)胡汉才.单片机原理及接口技术[M].北京清华大学出版社.1996;
(7)高稚允,高岳.光电检测技术[M].北京国防工业出版社.1983;