您好,欢迎来到五一七教育网。
搜索
您的当前位置:首页18b20温度传感器程序

18b20温度传感器程序

来源:五一七教育网
功能:数码管显示XX.XC标示摄氏度,例如25.3C标示当前温度

时间:2010—7—20

_________________________________________________________ #include #include #include #define uchar unsigned char #define uint unsigned int;

sbit seg1=P2^0; sbit seg2=P2^1; sbit seg3=P2^2; sbit DQ=P1^3; sfr dataled=0x80;

uint temp;

uchar flag_get,count,num,minute,second;

uchar code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar str[6];

void delay1(uchar MS);

unsigned int ReadTemperature(void); void Init_DS18B20(void); unsigned char ReadOneChar(void); void WriteOneChar(unsigned char dat); void delay(unsigned int i);

main() {

unsigned char TempH,TempL; TMOD|=0x01; TH0=0xef; TL0=0xf0; IE=0x82; TR0=1; P2=0x00; count=0; while(1) {

str[5]=0x39;

str[1]=tab[TempH/100]; str[2]=tab[(TempH%100)/10]; str[3]=tab[(TempH%100)%10]|0x80; str[4]=tab[TempL]; if(flag_get==1) {

temp=ReadTemperature(); if(temp&0x8000) {

str[0]=0x40; temp=~temp; temp +=1; } else

str[0]=0; TempH=temp>>4;

TempL=temp&0x0F; TempL=TempL*6/10; flag_get=0; } } }

void tim(void) interrupt 1 using 1 {

TH0=0xef; TL0=0xf0; num++; if (num==50) {

num=0; flag_get=1; second++; if(second>=60) {

second=0; minute++; }

} count++; if(count==1) {

P2=0;

dataled=str[0]; }

if(count==2) {

P2=1;

dataled=str[1];

}

if(count==3) {

P2=2;

dataled=str[2]; }

if(count==4) {

P2=3;

dataled=str[3]; }

if(count==5) {

P2=4;

dataled=str[4]; }

if(count==6) {

P2=5;

dataled=str[5]; count=0;

} }

void delay(unsigned int i) {

while(i--); }

void Init_DS18B20(void) {

unsigned char x=0; DQ = 1; delay(8); DQ = 0; delay(80); DQ = 1; delay(10); x=DQ; delay(5); }

unsigned char ReadOneChar(void) {

unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) {

DQ = 0; dat>>=1; DQ = 1; if(DQ)

dat|=0x80;

delay(5); }

return(dat); }

void WriteOneChar(unsigned char dat) {

unsigned char i=0; for (i=8; i>0; i--) {

DQ = 0; DQ = dat&0x01; delay(5); DQ = 1; dat>>=1; }

delay(5); }

unsigned int ReadTemperature(void) {

unsigned char a=0; unsigned int b=0; unsigned int t=0; Init_DS18B20(); WriteOneChar(0xCC); WriteOneChar(0x44); delay(200); Init_DS18B20(); WriteOneChar(0xCC); WriteOneChar(0xBE);

a=ReadOneChar(); b=ReadOneChar(); b<<=8; t=a+b; return(t); }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 517ttc.cn 版权所有 赣ICP备2024042791号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务