基于AT89C51单片机和DS18B20温度传感器、RS537液晶显示的高精度温度计 - 爱问答

(爱问答)

基于AT89C51单片机和DS18B20温度传感器、RS537液晶显示的高精度温度计

基于AT89C51单片机和DS18B20温度传感器、RS537四位数码管的高精度报警温度计,求程序,求isis7仿真图!

#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit DS=P2^2;           //define interfaceuint temp;             // variable of temperatureuchar flag1;            // sign of the result positive or negativesbit 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{  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 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);} 

下一篇:怎么用公式把竖向数据变成多行横向数据

上一篇:Foxmail登录错误:1328,自定义imapoff怎么解决

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?