×
单片机 > 单片机程序设计 > 详情

51单片机实验13:温度传感器模块应用

发布时间:2024-05-18 发布时间:
|

开发板温度模块电路图如下:

目的:利用开发板温度传感器测量温度,并在数码管显示。


开发板温度传感器模块相关内容:/zixunimg/eeworldimg/blog.csdn.net/cax1165/article/details/86763991


开发板数码管模块的相关内容:/zixunimg/eeworldimg/blog.csdn.net/cax1165/article/details/86557551


主函数:


#include

#include

#define uc unsigned char

#define ui unsigned int

sbit LSA=P2^2;

sbit LSB=P2^3;

sbit LSC=P2^4;

uc code x[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};

uc disp[8];

void delay(uc x)

{

uc i,j;

for(i=1;i<=x;i++)

for(j=1;j<=110;j++);

}

void digdisplay()

{

uc i;

for(i=1;i<=6;i++)

{

switch(i)

{

case(1):

LSA=0;LSB=0;LSC=0;break;

case(2):

LSA=1;LSB=0;LSC=0;break;

case(3):

LSA=0;LSB=1;LSC=0;break;

case(4):

LSA=1;LSB=1;LSC=0;break;

case(5):

LSA=0;LSB=0;LSC=1;break;

case(6):

LSA=1;LSB=0;LSC=1;break;

}

P0=disp[i];

delay(1);

P0=0x00;

}

}

void datapros(int temp)

{

float tp;

if(temp<0)

{

disp[6]=0x40;

temp=temp-1;

temp=~temp;

tp=temp;

temp=tp*0.0625*100+0.5;//*100将两位小数加入整数中方便后期处理,+0.5是四舍五入进位处理

}

else

{

disp[6]=0x00;

tp=temp;

temp=tp*0.0625*100+0.5;

}

disp[5]=x[temp/10000];

disp[4]=x[temp%10000/1000];

disp[3]=x[temp%1000/100]|0x80;

disp[2]=x[temp%100/10];

disp[1]=x[temp%10];

}

void main()

{

while(1)

{

datapros(ds18b20readtemp());

digdisplay();

}

}

DS18B20温度传感器配置:


#include

void delay1ms(ui x)

{

ui i,j;

for(i=1;i<=x;i++)

for(j=1;j<=110;j++);

}

uc ds18b20init()

{

uc a,b;

dsport=0;

for(b=71;b>0;b--)//延时500微秒

for(a=2;a>0;a--);

dsport=1;

while(dsport)

{

delay1ms(5);//延时5微秒

return 0;

}

return 1;

}

void ds18b20writebyte(uc dat)

{

uc i,j;

for(i=1;i<=8;i++)

{

dsport=0;

j++;//??

dsport=dat&0x01;

for(j=31;j>0;j--);//延时65微秒

dsport=1;

dat>>=1;

}

}

uc ds18b20readbyte()

{

uc i,j,dat,byte=0;

for(i=1;i<=8;i++)

{

dsport=0;

j++;

dsport=1;

j++;j++;//延时6微秒

dat=dsport;

byte=(byte>>1)|(dat<<7);

j=4;while(j--);//延时48微秒

}

return byte;

}

void ds18b20changtemp()

{

ds18b20init();

delay1ms(1);

ds18b20writebyte(0xcc);

ds18b20writebyte(0x44);

}

void ds18b20readtempcom()

{

ds18b20init();

delay1ms(1);

ds18b20writebyte(0xcc);

ds18b20writebyte(0xbe);

}

int ds18b20readtemp()

{

int temp=0;

uc tmh,tml;

ds18b20changtemp();

ds18b20readtempcom();

tml=ds18b20readbyte();

tmh=ds18b20readbyte();

temp=tmh;

temp<<=8;

temp|=tml;

return temp;

}


温度传感器头文件:


#ifndef _temp_H

#define _temp_H

#include

#ifndef uc

#define uc unsigned char

#endif

#ifndef ui

#define ui unsigned int

#endif

sbit dsport=P3^7;

int ds18b20readtemp();

#endif


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
51单片机CO2检测显示程序解析