头像-363753

992b81030c187f9c

个人成就

获得 0 次赞

帮助过0人

用单片机LM1602和DS18B20显示温度只有-25~+2

#include <REG51.h>#define uchar unsigned char#define uint unsigned intsbit RS=P2^0;sbit RW=P2^1;sbit EN=P2^2;sbit DQ=P3^4;uchar code table1[]="Temperature is:";uint table2[6]temperaturetemperatureflag;uint wei_baiwei_shiwei_gexiaoshufuhaowendu;void delay(int a){  int ij;  for(i=a;i>0;i--)    for(j=0;j<110;j++);}void delayus(int a){  while(a--);}void write_com(uchar com){  P0=com;  RS=0;RW=0;EN=1;  delay(10);  EN=0;}void write_dat(uchar dat){  P0=dat;  RS=1;RW=0;EN=1;  delay(10);  EN=0;}void init_LM1602(){  write_com(0x01);  write_com(0x38);  write_com(0x0c);  write_com(0x06);}uchar read_onebyte(){  uchar itemp=0;  for(i=0;i<8;i++)  {    DQ=0;         temp>>=1;         DQ=1;         if(DQ) temp|=0x80;         delayus(4);  }  return temp;}void write_onebyte(uchar dat){  uchar i;  for(i=0;i<8;i++)  {    DQ=0;         DQ=dat&0x01;         delayus(10);         DQ=1;         dat>>=1;  }}void init_DS18B20(){  uchar x=0;  DQ=1;  delayus(8);  DQ=0;  delayus(80);  DQ=1;  delay(4);  x=DQ;  delayus(20);}uchar read_Temparature(){  uchar tempL=0tempH=0;  init_DS18B20();  write_onebyte(0xcc);  write_onebyte(0x44);  delayus(100);  init_DS18B20();  write_onebyte(0xcc);  write_onebyte(0xbe);  tempL=read_onebyte();  tempH=read_onebyte();/@@*  if(tempH&0xF0)     //显示负数  {    tempL=~tempL;    tempH=~tempH;    temperature=(tempH*256+tempL)/16*(-1)-1;         temperatureflag=1;  }  else              //显示正数  {    temperature=(tempH*256+tempL)*0.0625;         temperatureflag=0;  }*/  temperature=tempH;  temperature=temperature<<8;  temperature=temperature|tempL;  if(temperature>0x0fff)  {    temperature=~temperature+2;        temperatureflag=1;  }  else temperatureflag=0;  temperature=temperature*0.0625*10;  return temperature;}void display(){  wendu=read_Temparature();  if(temperatureflag==1) fuhao=0x2d;  else fuhao=0x2b;  wei_bai=wendu/1000+0x30;  wei_shi=wendu%1000/100+0x30;  wei_ge=wendu%100/10+0x30;  xiaoshu=wendu%10+0x30;  write_com(0xc3);  write_dat(fuhao);  write_dat(wei_bai);  write_dat(wei_shi);  write_dat(wei_ge);  write_dat(0x2e);  write_dat(xiaoshu);  write_dat(0xdf);  write_dat(0x43);}void main(){  uchar i;  init_LM1602();  while(1)  {    write_com(0x80);    for(i=0;i<15;i++)    {      write_dat(table1[i]);           delay(5);    }    display();  }}复制代码