⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 18b20sj.c

📁 一个基于vb和c的单片机温度采集与显示程序
💻 C
字号:
#include<at89x51.h>
#define uchar unsigned char
#define uint unsigned int

sbit RDATA=P2^0;//18B20口
sbit alarm=P1^6;//报警口
uchar temh,teml;
//延时
void dmsec(uint count)
{
 uint i;

 while(count--)
 {
  for(i=0;i<125;i++){}
 }
}

void tmreset(void)
{
 uint i;
 RDATA=0;
 i=103;while(i>0) i--;   
 RDATA=1;
 i=4;while(i>0) i--;
}

void tmpre(void)
{
 uint i;
 while(RDATA);
 while(~RDATA);
 i=4;while(i>0) i--;
}

bit tmrbit(void)
{
 uint i;
 bit dat;
 RDATA=0;i++;
 RDATA=1;i++;i++;
 dat=RDATA;
 i=8;while(i>0) i--;
 return(dat);
}

uchar rebyte(void)
{
 uchar i,j,dat;
 dat=0;
 for(i=1;i<=8;i++)
 {
  j=tmrbit();
  dat=(j<<7)|(dat>>1);
 }
 return(dat);
}

void wrbyte(uchar dat)
{
 uint i;
 uchar j;
 bit testb;
 for(j=1;j<=8;j++)
 {
	  testb=dat&0x01;
	  dat=dat>>1;
	  if(testb)
	  {
 	   RDATA=0;           //写1
 	   i++;i++;
	   RDATA=1;
	   i=8;while(i>0) i--;
	  }
	  else
	  {
	   RDATA=0;        //写0
	   i=8;while(i>0) i--;
	   RDATA=1;
 	  i++;i++;
  }
 }
}

void tempsta(void)
{
 tmreset();
 tmpre();
 dmsec(1);
 wrbyte(0xcc);
 wrbyte(0x44);

}

uchar readtemp(void)//读温度
{
  tmreset();
  tmpre();
  dmsec(1);
  wrbyte(0xcc);
  wrbyte(0xbe);
  teml=rebyte();
  temh=rebyte();
}

void Delay(uint Delayms)
{
 uchar j;
 uint i;
 for(i=0;i<Delayms;i++)
  for(j=0;j<255;j++);
}

char senddata(char c)//发送数据
  {
  while (!TI);
  TI = 0;
  return (SBUF = c);
}

void init(void)//串口初始化
{
  TMOD=0x20;
  TL1=0xfd;
  TH1=0xfd;
  SCON=0x53; 
  PCON&=0x7f;
  TR1=1;
}

void main()
{
  uchar a,b,c;
  signed char cc;
  unsigned long tem;
  init();
  while(1)
  {
   tempsta();//启动转换
   dmsec(20);
   readtemp();//读温度值
   c=teml>>4|temh<<4;
   a=c/10+48;
   b=c%10+48;
   senddata(a);//发送整数,(两位)
   senddata(b);
   tem=(teml&0x0f)*625;
   a=tem/1000+48;
   b=(tem/100)%10+48;
   senddata(a);//发送小数,(两位)
   senddata(b);
   TI=0;
   cc=SBUF;	//接受上位机数据
   RI=0;
   if(cc=='o') alarm=0; //如果上位机发送的是"o",报警
	 else if (cc=='p') alarm=1;//为"p"或者其他解除报警
	   else alarm=1; 
   }
 }  

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -