最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

51单片机数字温度计程序

来源:动视网 责编:小OO 时间:2025-09-28 20:56:39
文档

51单片机数字温度计程序

#include#defineucharunsignedchar#defineuintunsignedintsbitDS=P2^2;//defineinterfaceuinttemp;//variableoftemperatureucharflag1;//signoftheresultpositiveornegativesbitdula=P2^6;sbitwela=P2^7;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
推荐度:
导读#include#defineucharunsignedchar#defineuintunsignedintsbitDS=P2^2;//defineinterfaceuinttemp;//variableoftemperatureucharflag1;//signoftheresultpositiveornegativesbitdula=P2^6;sbitwela=P2^7;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
#include

#define uchar unsigned char

#define uint unsigned int

sbit DS=P2^2; //define interface

uint temp; // variable of temperature

uchar flag1; // sign of the result positive or negative

sbit dula=P2^6;

sbit wela=P2^7;

unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,

0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//带小数点的

unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,

0x87,0xff,0xef};//不带小数点的

void delay(uint count) //delay

{

uint i;

while(count)

{

i=200;

while(i>0)

i--;

count--;

}

}

void dsreset(void) //send reset and initialization command//DS18B20复位,初始化函数

{

uint i;

DS=0;

i=103;

while(i>0)i--;

DS=1;

i=4;

while(i>0)i--;

}

bit tmpreadbit(void) //read a bit//读1位数据函数

{

uint i;

bit dat;

DS=0;i++; //i++ for delay

DS=1;i++;i++;

dat=DS;

i=8;while(i>0)i--;

return (dat);

}

uchar tmpread(void) //read a byte date//读一个字节数据函数

{

uchar i,j,dat;

dat=0;

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

{

j=tmpreadbit();

dat=(j<<7)|(dat>>1); //读出的数据最低位在最前面,这样刚好一个字节在dat里

}

return(dat);

}

void tmpwritebyte(uchar dat) //write a byte to ds18b20//向DS18B20写一个字节数据函数

{

uint i;

uchar j;

bit testb;

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

{

testb=dat&0x01;

dat=dat>>1;

if(testb) //write 1

{

DS=0;

i++;i++;

DS=1;

i=8;while(i>0)i--;

}

else

{

DS=0; //write 0

i=8;while(i>0)i--;

DS=1;

i++;i++;

}

}

}

void tmpchange(void) //DS18B20 begin change//DS18B20开始获取温度并转换

{

dsreset();

delay(1);

tmpwritebyte(0xcc); // address all drivers on bus

tmpwritebyte(0x44); // initiates a single temperature conversion

}

uint tmp() //get the temperature//读取寄存器中存储的温度数据

{

float tt;

uchar a,b;

dsreset();

delay(1);

tmpwritebyte(0xcc);

tmpwritebyte(0xbe);

a=tmpread();

b=tmpread();

temp=b;

temp<<=8; //two byte compose a int variable

temp=temp|a;

tt=temp*0.0625;//温度在寄存器中为12位,分辨率为0.0625

temp=tt*10+0.5;//乘以10表示小数点后面只取1位,加0.5是四舍五入

return temp;

}

void readrom() //read the serial//读ROM

{

uchar sn1,sn2;

dsreset();

delay(1);

tmpwritebyte(0x33);

sn1=tmpread();

sn2=tmpread();

}

void delay10ms() //delay

{

uchar a,b;

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

for(b=60;b>0;b--);

}

void display(uint temp) //显示程序

{

uchar A1,A2,A2t,A3;

A1=temp/100;

A2t=temp%100;

A2=A2t/10;

A3=A2t%10;

dula=0;

P0=table[A1]; //显示百位

dula=1;

dula=0;

wela=0;

P0=0x7e;

wela=1;

wela=0;

delay(1);

dula=0;

P0=table1[A2]; //显示十位

dula=1;

dula=0;

wela=0;

P0=0x7d;

wela=1;

wela=0;

delay(1);

P0=table[A3]; //显示个位

dula=1;

dula=0;

P0=0x7b;

wela=1;

wela=0;

delay(1);

}

void main()

{

uchar a;

do

{

tmpchange();

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

{

display(tmp());

}

} while(1);

}

文档

51单片机数字温度计程序

#include#defineucharunsignedchar#defineuintunsignedintsbitDS=P2^2;//defineinterfaceuinttemp;//variableoftemperatureucharflag1;//signoftheresultpositiveornegativesbitdula=P2^6;sbitwela=P2^7;unsignedcharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top