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

📄 1820.c

📁 18b20的控制程序,适合初学者用的,可以修改使用
💻 C
字号:
/*     程序名:		DS18B20测温程序 												*/
/*                                                                                  */
/*     	CPU型号:AT89S52/STC89C51RC    晶振:11.0592 M                              */

#include <reg51.h>

sbit DQ = P2 ^ 7;  //定义端口DQ
sbit wei1=P2^0;
sbit wei2=P2^1;
sbit wei3=P2^2;
sbit wei4=P2^3;
sbit wei5=P2^4;
sbit wei6=P3^3;

unsigned char code LEDData1 [ ] = {0xc0, 0xf9, 0xa4,
									0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};//0-9数字
unsigned char code LEDData2 [ ] = {0x40, 0x79, 0x24,
									0x30, 0x19, 0x12, 0x02, 0x78, 0x00, 0x10}; //0.-9.LED数值

void Delay(unsigned int num)//延时函数
{
	while( num-- );

}

Init_DS18B20(void)//初始化ds1820
{
	unsigned char x = 0;

	DQ = 1;    //DQ复位
	Delay(8);  //稍做延时

	DQ = 0;    //单片机将DQ拉低
	Delay(80); //精确延时 大于 480us
	//Delay(400); //精确延时 大于 480us

	DQ = 1;    //拉高总线
	Delay(14);

	x = DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
    Delay(20);
}


ReadOneChar(void)//读一个字节
{
	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(15);
	}
	return (dat);
}

/**********************************************************************************/
WriteOneChar(unsigned char dat)//写一个字节
{
	unsigned char i = 0;
	for (i = 8; i > 0; i--)
	{
  		DQ = 0;
  		DQ = dat&0x01;
  		Delay(5);
  		DQ = 1;
  		dat>>=1;
	}
}

/**********************************************************************************/
Read_Disp_Temperature(void)//读取并显示温度
{
	unsigned int a = 0, b = 0, c = 0, t = 0;
	float tt = 0;

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

	Init_DS18B20();
	WriteOneChar(0xCC); //跳过读序号列号的操作
	WriteOneChar(0xBE);
	a = ReadOneChar();	//读取温度寄存器
	b = ReadOneChar();
	t = b;
	t <<= 8;
	t = t | a;

	tt = t * 0.0625;
   	t = tt * 10 + 0.5; //放大10倍输出并四舍五入

	a = t / 100;              //十位
	b = t / 10 - a * 10;      //个位
	c = t - a * 100 - b * 10; //小数位

	P0 = 0xc6;  //显示"C"字符
	wei1=0;
	Delay(200);
	wei1=1;

	P0 = LEDData1[c];  //显示小数位
	wei2 =0;
	Delay(200);
	wei2=1;

	P0 = LEDData2[b];  //显示个位,带小数点
	wei3=0;
	Delay(200);
	wei3=1;

	P0 = LEDData1[a];  //显示十位
	wei4=0;
	Delay(200);
	wei4=1;

   wei5=1;
   wei6=1;
}


void main(void)
{
	wei1=0;wei2=0;wei3=0,wei4=0;wei5=0;wei6=0;
	while(1)
	{
  		Read_Disp_Temperature();
	}
}

⌨️ 快捷键说明

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