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

📄 1820.c

📁 ds18b20温度测量 ds18b20温度测量
💻 C
字号:
#include<at89x52.h>
#include <INTRINS.H>


#define uchar unsigned char
#define uint unsigned int

sbit DQ=P1^5;
sbit rs=P2^0;
sbit rw=P2^1;
sbit e=P2^2;

unsigned char code table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39};
uchar i;


/******************************
* 函数名称://1毫秒延时子程序
* 功    能:写函数
* 入口参数:N
* 出口参数:无
  *******************/
void delay1ms(int n)/* 1毫秒延时子程序*/
{
 unsigned char i,j;
 for (j=0;j<n;j++)
 for(i=124;i>0;i--);  /*延时124*8+10=1002us*/
}

/*************************************************
 1602液晶使能
*************************************************/
void enable(void)
{
    rs=0;
    rw=0;
    e=0;
    delay1ms(3);
    e=1;
}

/*************************************************
 1602初始化
*************************************************/
void start1602()
{
    P0=0X01;
    enable();
    P0=0X38;
    enable();
    P0=0X0c;
    enable();
    P0=0X06;
    enable();
}

/*************************************************
 1602位选择0X80:第一行,,,0XC0:第二行
*************************************************/
void checkbit(unsigned char address)
{
    P0=address;
    enable();
}

/*************************************************
 1602显示
*************************************************/
void dis1602(unsigned char buf)
{
    P0=buf;
    rs=1;
    rw=0;
    e=0;
    delay1ms(3);
    e=1;
}

/******************
* 函数名称://延时函数
* 功    能:写函数
* 入口参数:dat
* 出口参数:无
  *******************/
void Delay(uint num)
{
	while( num-- );
}

/******************
* 函数名称:Init_DS18B20()
* 功    能:初始化18B20
* 入口参数:无
* 出口参数:无
  *******************/
Init_DS18B20(void)
{
	uchar x = 0;

	DQ = 1;    //DQ复位
	Delay(8);  //DQ复位

	DQ = 0;    //单片机将DQ拉低
	Delay(80);

	DQ = 1;
	Delay(14);

	x = DQ;
    Delay(20);
}

/******************
* 函数名称:ReadOneChar()
* 功    能:读函数 //读一个字节
* 入口参数:无
* 出口参数:无
  *******************/
ReadOneChar(void)
{
	uchar i = 0;
	uchar dat = 0;

	for (i = 8; i > 0; i--)
	{
  		DQ = 0;
  		dat >>= 1;
  		DQ = 1;

  		if(DQ)
  			dat |= 0x80;
  		Delay(4);
	}

	return (dat);
}

/******************
* 函数名称:WriteOneChar()
* 功    能:写函数 //向1820写一个字节
* 入口参数:dat
* 出口参数:无
  *******************/
WriteOneChar(unsigned char dat)
{
	uchar i = 0;
	for (i = 8; i > 0; i--)
	{
  		DQ = 0;
  		DQ = dat&0x01;
  		Delay(5);

  		DQ = 1;
  		dat>>=1;
	}
}

/******************
* 函数名称:Read_Disp_Temperature()
* 功    能://读取温度
* 入口参数:无
* 出口参数:无
  *******************/
Read_Disp_Temperature(void)
{
	uint a = 0, b = 0, c = 0,d=0x30,e=0xa0,t = 0;

    i++;
	Init_DS18B20();
	WriteOneChar(0xCC); /*跳过读序号列号的操作*/
	WriteOneChar(0x44); /* 启动温度转换 */

	Init_DS18B20();
	WriteOneChar(0xCC); /*跳过读序号列号的操作*/
	WriteOneChar(0xBE); /*/读取温度寄存器 */

	a = ReadOneChar();
	b = ReadOneChar();

    if((a&0x08)==0x08)/*有小数*/
    d=0x35;
    if((b&0xf8)==0xf8)/*温度为负*/
    {
     e=0x2d;
     t=((~b+1)<<4)+((~a+1)>>4);
    a=table[t/100];
    b=table[(t%100)/10];
    c=table[(t%100)%10];
     if(i>2)
     {
      i=0;
      checkbit(0xc0);
      dis1602('t');
      dis1602('e');
      dis1602('m');
      dis1602('p');
      dis1602('_');
      dis1602('_');
      dis1602('_');
      dis1602('_');
      dis1602('_');
      dis1602(':');
      dis1602(e);
      dis1602(a);
      dis1602(b);
      dis1602(c);
      dis1602(0x2e);/*小数点*/
      dis1602(d);
     }
    }

    t=(b<<4)+(a>>4);
    a=table[t/100];
    b=table[(t%100)/10];
    c=table[(t%100)%10];
     if(i>2)
     {
      i=0;
      checkbit(0xc0);
      dis1602('t');
      dis1602('e');
      dis1602('m');
      dis1602('p');
      dis1602('_');
      dis1602('_');
      dis1602('_');
      dis1602('_');
      dis1602('_');
      dis1602(':');
      dis1602(e);
      dis1602(a);
      dis1602(b);
      dis1602(c);
      dis1602(0x2e);/*小数点*/
      dis1602(d);
     }
}

 /******************
* 函数名称:main()
* 功    能:主函数
* 入口参数:无
* 出口参数:无
  *******************/
void main(void)
{
    start1602();

    while(1)
	{
     Read_Disp_Temperature();
     delay1ms(255);
	}
}

⌨️ 快捷键说明

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