icl7107

核心提示用热敏电阻,加三个精密电阻搭成惠斯通电桥,当温度变化时电桥会输出差分电压,把输出的电压接在10倍的放大器上,放大器用OP07运放做,放大后接在ICL7107上,然后和单片机进行并行通信,把采集的数字信号进行比例处理,通过数码管显示出来,随便

用热敏电阻,加三个精密电阻搭成惠斯通电桥,当温度变化时电桥会输出差分电压,把输出的电压接在10倍的放大器上,放大器用OP07运放做,放大后接在ICL7107上,然后和单片机进行并行通信,把采集的数字信号进行比例处理,通过数码管显示出来,随便用个单片机就行了,89S51就搞定,数码管用动态扫描显示,到网上查一下动态扫描的驱动方式,很简单的。

benxiongchiln :把你的答案纠正一下:7107显示的是电压值,并不代表温度值,你是不是弄错了?

温度传感器可以选用ds18b20

我把电路图发上来了这是程序,希望对你有用

#include?<reg52.h>

#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--;

}

}?

///////功能:串口初始化,波特率9600,方式1///////

void?Init_Com(void)

{

TMOD?=?0x20;

PCON?=?0x00;

SCON?=?0x50;

TH1?=?0xFd;

TL1?=?0xFd;

TR1?=?1;

}

void?dsreset(void)//send?reset?and?initialization?command

{

uint?i;

DS=0;

i=103;

while(i>0)i--;

DS=1;

i=4;

while(i>0)i--;

}

bit?tmpreadbit(void)//read?a?bit

{

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

{

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

{

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;

temp=tt*10+0.5;

return?temp;

}

void?readrom()?//read?the?serial

{

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,ser;

ser=temp/10;

SBUF=ser;

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;

Init_Com();

do

{

tmpchange();

//?delay(200);

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

{

display(tmp());

}

}while(1);

}

 
友情链接
鄂ICP备19019357号-22