第一范文网 - 专业文章范例文档资料分享平台

数字显示温度计 - 图文

来源:用户分享 时间:2025/6/28 12:37:03 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

}

DQ18B20 = 1; return(0); }

//数据线拉高 //初始化失败返回0

else

{

_nNOP_(240); DQ18B20 = 1; return(1); }

//延时240us //数据线拉高

//初始化成功返回1

//================================================================== //函 数 名: Write18B20() //功能描述: 18B20写数据函数 //输入参数: Data //输出参数: 无 //设 计 者:

//创建日期:2012-03-03

//================================================================== void {

uchar data

i;

Write18B20(uchar

Data)

for (i=8; i>0; i--) {

DQ18B20 = 0;

DQ18B20 = Data&0x01; _nNOP_(10); DQ18B20 = 1; Data>>=1; } }

//================================================================== //函 数 名: Read18B20()

//功能描述: 读18B20两字节数据函数 //输入参数: 无 //输出参数: TempReg[] //设 计 者:

25

//创建日期:2012-03-03

//================================================================== uchar Read18B20(void) {

uchar data i=0; uchar data Data = 0; for (i=8;i>0;i--)

{

DQ18B20 = 0; Data>>=1; DQ18B20 = 1; if(DQ18B20) Data|=0x80; _nNOP_(10); }

//给脉冲信号

//给脉冲信号

return(Data); }

//================================================================== //函 数 名: GetTemp() //功能描述: 得到温度数据函数 //输入参数: 无 //输出参数: //设 计 者:

//创建日期:2012-03-03

//================================================================== void {

uchar data TempL,TempH; if(Init18B20()==0);

//初始化不成功则继续初始化 //发出跳过ROM指令 //发出温度转化命令 //延时800us

//初始化不成功则继续初始化 //发出跳过ROM指令 //发出读温度命令 //调用读程序,读出两字节

26

GetTemp(void)

Write18B20( SkipROM ); Write18B20( TempCvt ); _nNOP_(800);

if(Init18B20()==0);

Write18B20( SkipROM ); Write18B20( ReadTemp); TempL = Read18B20();

}

TempH = Read18B20(); TempReg = TempH; TempReg = TempReg<<8; TempReg = TempReg|TempL; if((TempReg&0x800)!=0x800)

NPflag = 0;

//正温度

else

{

TempReg = ~TempReg+1; NPflag = 1; }

//负温度

//================================================================== //函 数 名: DataCovt()

//功能描述: 将读出的温度数据拆分为整数和小数部分,并转为ASIC码 //输入参数: 无 //输出参数: //设 计 者:

//创建日期:2012-03-03

//================================================================== void {

uchar data Rwk1,Rwk2; uint data Rwk3; Rwk1 = (TempReg&0x07f0)>>4; Rwk2 = TempReg&0x000f;

// ssss,s|xxx,xxxx,|xxxx

// 符号位| 整数 | 小数 (整数部分-55--125,为

DataCovt(void)

//11位有效位

7位) }

27

IntgerH = Rwk1/100; IntgerM = Rwk10/10; IntgerL = Rwk1; Rwk3 = TempTab[Rwk2];

//整数部分

DecimalL = Rwk3&0x000f; //小数部分

DecimalML = (Rwk3&0x00f0)>>4; DecimalMH = (Rwk3&0x0f00)>>8; DecimalH = (Rwk3&0xf000)>>12;

//================================================================== //函 数 名: MnDS18B20() //功能描述: DS18B20驱动函数 //输入参数: 无 //输出参数: 无 //设 计 者:

//创建日期:2012-03-03

//================================================================== void { }

//================================================================== //文件名称: 数码管动态扫描

//功能说明: 4位数码管动态扫描,根据LedNum可配置为低于8位

//硬件描述: 段口P1,位口P0.0-P0.3,模拟声光报警的发光二极管占用P2.0,P2.1 //使用晶体: 11.0592M晶体 //创建日期: 2012。02.25 //软件版本: v 1.0

//================================================================== #include

#define uchar unsigned char #define uint unsigned int

//=====================常量=========================================

#define LedNum

4

//数码管个数6

//扫描时间,根据实际情况调整

Init18B20(); GetTemp(); DataCovt(); flag=1;

//采集值变换为BCD码

//初始化 //温度采集

MnDS18B20(void)

#define ScanTime 200

#define DataPort #define ComPort

P1 P0

//段口 //位口(4 bit)

//=====================变量========================================= sbit sbit

DotPort=P1^7; ring=P0^4;

28

搜索更多关于: 数字显示温度计 - 图文 的文档
数字显示温度计 - 图文.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c6u59i8a03j9mzf00wd2e_7.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top