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

📄 ds18b20.c

📁 用于检测DS18B20 用keil生成hex再用
💻 C
字号:
/*****************************************************************************
						MCS8051-III学习板演示程序
							
				(c) Copyright 2007-2007,广州恒芯电子
						All Rights Reserved
*****************************************************************************/

/*****************************************************************************
程序说明
名称: MCS8051-III学习板演示程序(DS18B20测试)
功能: 实现在数码管上显示当前温度
版本:2007-07-01
*****************************************************************************/

/*****************************************************************************
硬件说明
单片机:   兼容MCS-51单片机/STC89C51
晶振频率: 12MHz
*****************************************************************************/

#include "regx52.h"

/****************************************************************************
说明: 程序预定义
*****************************************************************************/
#define LED7A_STATUS P1_7/*数码管第一位控制引脚(0为有效,1为无效)*/
#define LED7B_STATUS P1_6/*数码管第二位控制引脚(0为有效,1为无效)*/
#define LED7C_STATUS P1_5/*数码管第三位控制引脚(0为有效,1为无效)*/
#define LED7D_STATUS P1_4/*数码管第四位控制引脚(0为有效,1为无效)*/

#define LED7_STATUS	P0/*数码管状态引脚(0为有效,1为无效)*/

#define DS18B20_IO P3_2/*DS18B20数据引脚*/

#define	DS18B20_ORDER_READID 	0x33
#define DS18B20_ORDER_JMPROM	0xcc
#define DS18B20_ORDER_START		0x44
#define DS18B20_ORDER_READREG	0Xbe

/****************************************************************************
说明: 变量定义
*****************************************************************************/
code unsigned char m_ucLedTab[]=
{
	0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90,
	0x88, 0x83, 0xC6, 0xa1 ,0x86 ,0x8e, 0xff
};/*数码管十六进制编码表*/

unsigned char m_ucLedBuf[4];/*七段数码管显示值缓存*/

/****************************************************************************
名称: Delay
说明: 程序延时
参数: 无
返回: 无
*****************************************************************************/
void Delay();

/****************************************************************************
名称: Led7Scan()
说明: 数码管动态扫描处理程序	
参数: 无
返回: 无
*****************************************************************************/
void Led7Scan();

/****************************************************************************
名称:DS18B20ReadTemp
说明:DS18B20读取当前温度
参数:无
返回: unsigned char 温度值
****************************************************************************/
unsigned char DS18B20ReadTemp();

/****************************************************************************
名称:DS18B20Init
说明:DS18B20初始化
参数:无
返回: 无
****************************************************************************/
unsigned char DS18B20Init();


/****************************************************************************
名称:DS18B20ReadBit
说明:DS18B20读位操作
参数:无
返回: unsigned char ucData 读位
****************************************************************************/
unsigned char DS18B20ReadBit();

/****************************************************************************
名称:DS18B20ReadChar
说明:DS18B20读字节操作
参数:无
返回: unsigned char ucData 读字节
****************************************************************************/
unsigned char DS18B20ReadChar();

/****************************************************************************
名称:DS18B20WriteBit
说明:DS18B20写位操作
参数:unsigned char ucData 写位
****************************************************************************/
void DS18B20WriteBit(unsigned char ucData);

/****************************************************************************
名称:DS18B20WriteChar
说明:DS18B20写字节操作
参数:unsigned char ucData 写字节
返回: 无
****************************************************************************/
void DS18B20WriteChar(unsigned char ucData);

/****************************************************************************
名称:DS18B20Delay
说明:DS18B20延时
参数:unsigned int uiDelay 时间延时
返回: 无
****************************************************************************/
void DS18B20Delay(unsigned char ucDelay);

/*****************************************************************************
程序开始
*****************************************************************************/
void main()
{	
	unsigned char ucTemp=0;/*计数值置0*/
     
	/*T0中断设定*/
  	TMOD=0x01;/*使用T0:GATE=0,C/T=0(定时),M1 M0=01(工作方式1)*/
	TH0=0xec;/*定时时间5毫秒*/
	TL0=0x78;
	ET0=1;/*允许T0中断*/
	TR0=1;/*使T0工作*/
	EA=1;/*总中断开启*/

	while(1)
	{	
		ucTemp=DS18B20ReadTemp();/*获取当前温度*/

		m_ucLedBuf[0]=16;
		m_ucLedBuf[1]=16;
		m_ucLedBuf[2]=(ucTemp%100)/10;/*取出十位数*/
	   	m_ucLedBuf[3]=ucTemp%10;/*取出个位数*/

	 	Delay();/*延时*/
	}
}

/*****************************************************************************
名称: Interrupt1Handler
说明: T0中断入口
参数: 无
返回 :无
*****************************************************************************/
void Interrupt1Handler() interrupt 1
{
	Led7Scan();/*数码管动态扫描处理程序*/
	TH0=0xec;/*重新设置T0定时值*/
	TL0=0x78;
}


/****************************************************************************
名称: Delay
说明: 程序延时
参数: 无
返回: 无
*****************************************************************************/
void Delay()
{
	unsigned char a,b;

	for(a=0;a<255;a++)
		for(b=0;b<255;b++);
}

/****************************************************************************
名称: Led7Scan()
说明: 数码管动态扫描处理程序
参数: 无
返回: 无
*****************************************************************************/
void Led7Scan()
{	
	static unsigned char a=0;

	switch(a)/*判断数码管动态扫描值*/
	{
	case 0:/*处理数码管第一位*/
		LED7D_STATUS=1;/*设置数码管第四位为无效*/
		LED7A_STATUS=0;/*设置数码管第一位位有效*/
		break; 

	case 1:/*处理数码管第二位*/
		LED7A_STATUS=1;/*设置数码管第一位为无效*/
		LED7B_STATUS=0;/*设置数码管第二位位有效*/
		break; 

	case 2:/*处理数码管第三位*/
		LED7B_STATUS=1;/*设置数码管第二位为无效*/
		LED7C_STATUS=0;/*设置数码管第三位位有效*/
		break; 

	case 3:/*处理数码管第四位*/
		LED7C_STATUS=1;/*设置数码管第三位为无效*/
		LED7D_STATUS=0;/*设置数码管第四位位有效*/
		break; 
	}

	LED7_STATUS=m_ucLedTab[m_ucLedBuf[a]];/*将显示码送数码管状态引脚*/	
	
	a++;/*数码管动态扫描值加1,若该值4则置为0*/
	if(a>3)
		a=0;
}

/****************************************************************************
名称:DS18B20Delay
说明:DS18B20延时
参数:unsigned int uiDelay 时间延时
返回: 无
****************************************************************************/
void DS18B20Delay(unsigned char ucDelay)
{
	unsigned char a;

	for(a=0;a<ucDelay;a++);
}

/****************************************************************************
名称:DS18B20Init
说明:DS18B20初始化
参数:无
返回: 无
****************************************************************************/
unsigned char DS18B20Init()
{
	DS18B20_IO=0;
	DS18B20Delay(30);
	DS18B20_IO=1;
	DS18B20Delay(30);
	return DS18B20_IO;
}

/****************************************************************************
名称:DS18B20WriteChar
说明:DS18B20写字节操作
参数:unsigned char ucData 写字节
返回: 无
****************************************************************************/
void DS18B20WriteChar(unsigned char ucData)
{
	unsigned char a,b;

	EA=0;
	for(a=0;a<8;a++)
	{
		b=ucData>>a;
		b&=0x01;
		DS18B20WriteBit(b);
	}
	EA=1;

	DS18B20Delay(5);
}

/****************************************************************************
名称:DS18B20WriteBit
说明:DS18B20写位操作
参数:unsigned char ucData 写位
****************************************************************************/
void DS18B20WriteBit(unsigned char ucData)
{
	DS18B20_IO=0;

	if(ucData==1)
		DS18B20_IO=1;

	DS18B20Delay(5);
	DS18B20_IO=1;
}

/****************************************************************************
名称:DS18B20ReadChar
说明:DS18B20读字节操作
参数:无
返回: unsigned char ucData 读字节
****************************************************************************/
unsigned char DS18B20ReadChar()
{
	unsigned char a,b=0;

	for(a=0;a<8;a++)
	{	   
		EA=0;
		if(DS18B20ReadBit())
			b|=0x01<<a;
		EA=1;

		DS18B20Delay(6);
	}

	return b;
}

/****************************************************************************
名称:DS18B20ReadBit
说明:DS18B20读位操作
参数:无
返回: unsigned char ucData 读位
****************************************************************************/
unsigned char DS18B20ReadBit()
{
	unsigned char a;

	DS18B20_IO=0;

	DS18B20_IO=1;

	for(a=0;a<3;a++);

	return(DS18B20_IO);
}


/****************************************************************************
名称:DS18B20ReadTemp
说明:DS18B20读取当前温度
参数:无
返回: unsigned char 温度值
****************************************************************************/
unsigned char DS18B20ReadTemp()
{
	unsigned char ucTempL,ucTempM;
	unsigned char ucTemp;

	DS18B20Init();	
	DS18B20WriteChar(DS18B20_ORDER_JMPROM);	
	DS18B20WriteChar(DS18B20_ORDER_START);
	DS18B20Delay(5);
	
	DS18B20Init();	
	DS18B20WriteChar(DS18B20_ORDER_JMPROM);
	DS18B20WriteChar(DS18B20_ORDER_READREG);
	ucTempL=DS18B20ReadChar();
	ucTempM=DS18B20ReadChar();

	ucTempL=ucTempL>>4;           
	ucTemp=(ucTempM&0x3)<<4;          
	ucTemp=ucTempL|ucTemp;   

	return ucTemp;	
}



			   

⌨️ 快捷键说明

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