单片机课程设计(温度传感器)(共19页)_第1页
单片机课程设计(温度传感器)(共19页)_第2页
单片机课程设计(温度传感器)(共19页)_第3页
单片机课程设计(温度传感器)(共19页)_第4页
单片机课程设计(温度传感器)(共19页)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、梧州学院(xuyun)单片机课程设计报告(bogo)题 目:温度传感器 院 (系):信息(xnx)与电子信息工程 专业班级:12物联网工程班 学生姓名:谢晋峰 学 号:201200210026 DS18B20温度传感器目的(md)通过DS18B20温度传感器及时采集(cij)当前周边环境的温度值,并在数码管上显示。所需器材(qci)一个单片机,一个三八译码器和6个8位数码管,一个Ds18b20温度传感器。内容与步骤开始主函数18B20采集温度温度数值转换数码管显示系统原理框架图入口 Main()1TLcdDisplay() 主函数(hnsh)流程图开始Ds18b20ReadTemp()Temp

2、0FTDisplayData0=0 x40DisplayData0=0 x00Tp=temTem=(temp-1)Tp=tempTemp=tp*0.0625*100+0.5Tmp=tp*0.625*100+0.5X:DisplayData1 = DIG_CODEtemp / 10000;DisplayData2 = DIG_CODEtemp % 10000 / 1000;DisplayData3 = DIG_CODEtemp % 1000 / 100 | 0 x80;DisplayData4 = DIG_CODEtemp % 100 / 10;DisplayData5 = DIG_CODEte

3、mp % 10; DigDisplay();XDigDisplay()结束 LcdDisplay() 函数(hnsh)流程图 Ds18b20ReadTemp()函数(hnsh)流程图(一)本设计(shj)内容(nirng)分为(fn wi)两大部分:1. DS18B20模块。DS18B20感受到当前的温度值并将其转化为数字信号存储在ROM中,然后单片机读取18B20中的温度信号。2. 数码管显示模块。单片机将获取的温度信息按符号为、百位、十位、个位、十分位、百分位,分割,并保存在六个不同的变量中,然后让DS138译码器逐位控制数码管显示对应的数值。 (二)步骤如下:初始化DS18B20单片机向

4、DS18B20写入跳过ROM命令,温度转化命令,温度寄存器命令 单片机读取18B20两个温度寄存器中的温度值单片机将获取的温度值的符号、百位、十位、个位、十分位、百分位分别存在数组的对应元素中通过38译码器动态扫描选定6个数码管,对应显示温度符号、百位、十位、个位、十分位、百分位的数值(三) 本设计中18B20温度传感器的时序图如下:代码(di m)#include#define uchar unsigned char#define uint unsigned int/*在开头声明全局(qunj)函数,待会就可以直接调用*/void Delay1ms(uint ); uchar Ds18b20

5、Init();void Ds18b20WriteByte(uchar com);uchar Ds18b20ReadByte();void Ds18b20ChangTemp();void Ds18b20ReadTempCom();int Ds18b20ReadTemp();sbit DSPORT=P37; /声明(shngmng)18B20使用的引脚void Delay1ms(uint y) /延时函数uint x;for( ; y0; y-)for(x=110; x0; x-);uchar Ds18b20Init()/18B20的初始化uchar i;DSPORT = 0;/拉低总线(zn x

6、in)i = 70;while(i-); /延时680微秒以上(yshng)DSPORT = 1;/释放(shfng)总线i = 0;while(DSPORT); /一直等待18B20响应 void Ds18b20WriteByte(uchar dat) /*向18B20中写一个字节的数,从低位开始*/uchar i, j;for(j=0; j= 1;/从18B20中读取一个(y )字节的数uchar Ds18b20ReadByte()uchar byte, bi;uchar i, j;for(j=8; j0; j-)DSPORT = 0; /将总线(zn xin)拉低1微秒以上i+;DSPO

7、RT = 1; /又把其拉高,开启(kiq)读模式i+; /延时,等待(dngdi)稳定i+;bi = DSPORT; /读取总线上的数据byte = (byte 1) | (bi 7);/从低位开始读i = 4;while(i-); /延时,起读取下个数据前稳定return byte;/*调用前面的写函数,向中写入各种命令,以使其获得当前温度值*/void Ds18b20ChangTemp()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0 xcc);/跳过ROM操作命令 Ds18b20WriteByte(0 x44); /温度(wnd)转换命令Del

8、ay1ms(100);/*等待(dngdi)转换成功,而如果你是一直刷着的话,就不用这个延时了*/ /*向写入命令,告诉(o s)它需要读取它中两个寄存器存储的温度信息*/void Ds18b20ReadTempCom()Ds18b20Init();Delay1ms(1);Ds18b20WriteByte(0 xcc); /跳过ROM操作命令Ds18b20WriteByte(0 xbe); /发送读取温度命令/综合(zngh)调用前面的那些初始化、写命令、读命令函数,最终单片机读取到18B20中的温度信息int Ds18b20ReadTemp()int temp = 0;uchar tmh,

9、tml;Ds18b20ChangTemp(); /先写入转换(zhunhun)命令Ds18b20ReadTempCom();/然后(rnhu)等待转换完后发送读取温度命令tml = Ds18b20ReadByte(); /读取温度值共16位,先读低字节tmh = Ds18b20ReadByte();/再读高字节temp = tmh; /高低位的数值合并在一起temp = 8;temp |= tml;return temp;/*/#include#define uchar unsigned char#define uint unsigned int#define GPIO_DIG P0 /定义控

10、制(kngzh)数码管显示的引脚sbit LSA=P22; /定义三八(sn b)译码器对应的单片机三个引脚sbit LSB=P23;sbit LSC=P24;/定义全局(qunj)函数(数组)unsigned char DisplayData6;void LcdDisplay(int);void DigDisplay();int Ds18b20ReadTemp();/程序执行的入口void main()while(1)/一直(yzh)显示温度信息LcdDisplay(Ds18b20ReadTemp();/将单片机上获取的温度信息(xnx)按照按符号位、百位、十位、个位、十分位、百分位进行分割

11、,然后分别存放在对应的6个数组元素上void LcdDisplay(int temp) float tp; /声明浮点型变量,用来(yn li)待会温度的浮点变量运算uchar code DIG_CODE10=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /数码管0-9的显示码 if(temp 0) DisplayData0 = 0 x40; /“-”号的显示字节码temp=(temp-1); /负数获取的是其补码tp=temp;temp=tp*0.0625*100+0.5;/该传感器的分辨率是0.0625,将其值扩大

12、100倍,并且四舍五入 else DisplayData0 = 0 x00; /正温度(wnd)就不显示了tp=temp;temp=tp*0.0625*100+0.5; DisplayData1 = DIG_CODEtemp / 10000;/存储(cn ch)百位上的数值DisplayData2 = DIG_CODEtemp % 10000 / 1000;/存储十位(sh wi)上的数值DisplayData3 = DIG_CODEtemp % 1000 / 100 | 0 x80;/存储个位的数值,并且带小数点DisplayData4 = DIG_CODEtemp % 100 / 10;/

13、存储十分位上的数值DisplayData5 = DIG_CODEtemp % 10;/存储百分位上的数值 DigDisplay();/调用数码管动态扫描(somio)显示 /在数码管上动态扫描(somio)显示,从第一位开始void DigDisplay()uchar i;uchar j;for(i=0;i6;i+)switch(i) case(0):LSA=0;LSB=0;LSC=0; break;/ 第一个数码管显示(xinsh)case(1):LSA=1;LSB=0;LSC=0; break;/第二个case(2):LSA=0;LSB=1;LSC=0; break;/第三个case(3):LSA=1;LSB=1;LSC=0; break;case(4):LSA=0;LSB=0;LSC=1; break;case(5):LSA=1;LSB=0;LSC=1; break;GPIO_DIG=DisplayDatai; /传送数值(shz)到选定的数码管j=50; while(j-);/决定扫描(somio)频率课程设计实践(shjin)总结 通过本实验,我深刻理解了串口通信的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论