找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1979|回复: 0
打印 上一主题 下一主题
收起左侧

at89c52+ds18b20温度检测

[复制链接]
跳转到指定楼层
楼主
仿真电路图见附件
程序代码如下:   
//#include<1820.h>
   #include<reg.51>
   #include<intrins.h>
   #define uchar unsigned char
   #define uint unsigned int
   //bit flag;
   //#define wei 0xa0;
   //#define duan 0x90;
   uchar data disdata[5];
   //uint tvalue;
   uchar tflag;
   sbit DQ=P3^7;
   bit f=0;
   uchar tempint,temppdp;
   uchar TempTab[4];
   uchar code discode[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF};
   void delay()
   {
   uchar i,j;
   for(i=0;i<5;i++)
      for(j=0;j<250;j++)
   {
   _nop_();
   _nop_():
   }
   }
   void delay_18B20(uint i)
   {
   while(i--);
   }
   void ds1820rst()
   {
   unsigned char x=0;
   DQ=1;
   delay_18B20(4);
   DQ=0;
   delay_18B20(100);
   DQ=1;
   delay_18B20(40);
   }
   
   uchar ds1820rd()
   {
   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_18B20(10);
   }
   return(dat);
   }
   void ds1820wr(uchar wdata)
   {
   unsigned char i=0;
   for(i=8;i>0;i--)
   {
   DQ=0;
   DQ=wdata&0x01;
   delay_18B20(10);
   DQ=1;
   wdata>>=1;
   }
   }
   void read_temp()
   {
   uchar temph,templ,k;
   f=0;
   ds1820rst();
   ds1820wr(0xcc);
   ds1820wr(0x44);
   ds1820rst();
   ds1820wr(0xcc);
   ds1820wr(0xbe);
   templ=ds1820rd();
   temph=ds1820rd();
   if((temph&0xf8)!=0x00)
   {
   f=1;
   temph=~temph;
   templ=~templ;
   k=templ+1;
   templ=k;
   if(k>255)
   {
   temph++;
   }
   }
   tempdp=(templ&oxof)*10/16;
   templ>>=4;
   temph<<=4;
   tempint=temph|templ;
   }
   void distemp()
   {
   uchar i,j;
   if(f==0)
   {
   TempTab[0]=tempint/100;
   TempTab[1]=(tempint/10)%10;
   TempTab[2]=tempint%10;
   TempTab[3]=tempdp;
   }
   else
   {
   TempTab[0]=10;
   TempTab[1]=tempint/10;
   TempTab[2]=tempint%10;
   TempTab[3]=tempdp;
   }
   for(i=0;i<4;i++)
   {
   P2=_cror_(0xf7,i);
   j=TempTab[i];
   if(i==2)
    P1=discode[j]&0x7f;
else
P1=discode[j];
delay();
P2=Oxff;
   }
   }
   void main()
   {
   while(1)
   {
   _nop_();
   _nop_();
   read_temp();
    _nop_();
   _nop_();
   distemp();
   }
   }


ds.png (123.35 KB, 下载次数: 30)

ds.png
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表