驱动

//onewire.h
#ifndef _ONEWIRE_H
#define _ONEWIRE_H#include<reg52.h>#define OW_SKIP_ROM 0xcc
#define DS18B20_CONVERT 0x44
#define DS18B20_READ 0xbe//定义引脚
sbit DQ = P1^4;//函数声明
void Delay_OneWire(unsigned int t);
bit Init_DS18B20(void);
void Write_DS18B20(unsigned char dat);
unsigned char Read_DS18B20(void);#endif
//onewire.c
/*程序说明: 单总线驱动程序软件环境: Keil uVision 4.10 硬件环境: CT107单片机综合实训平台日    期: 2011-8-9
*/#include<onewire.h>//单总线延时函数
void Delay_OneWire(unsigned int t)
{while(t--);
}//DS18B20芯片初始化
bit Init_DS18B20(void)
{bit initflag = 0;DQ = 0;Delay_OneWire(200);       //拉低总线480us以上DQ = 1;                   //然后释放总线Delay_OneWire(20);        //等待15—60usinitflag = DQ;            //读取DS18B20复位应答信号Delay_OneWire(100);       //等待60—240us后释放总线return initflag;          //应答信号为低电平,表示复位成功
}//DS18B20写操作
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;               //将总线拉低10—15usDQ = dat & 0x01;      //想总线写数据Delay_OneWire(20);    //维持20—45usDQ = 1;               //释放总线dat >>= 1;            //右移一位,发送下一位数据}
}//DS18B20读时序
unsigned char Read_DS18B20(void)
{unsigned char i,dat;for(i=0;i<8;i++){DQ = 0;               //将总线拉低10—15usdat >>= 1;            //右移DQ = 1;               //释放总线if(DQ)                 //读取总线上的电平,如果为高电平则读1{dat |= 0x80;}Delay_OneWire(20);    //延时45us,再度下一位}return dat;
}

主程序

#include<reg52.h>
#include"onewire.h"
unsigned int T_dat;       //存放温度,一定要定义为整型,否则会溢出unsigned char code SEG_code[18] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf,0x7f};                 //定义共阳数码管段码内容:0~F,—,.
unsigned char code SEG_dot[10] = {0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};//端口选择
void Select_HC138(unsigned char n)
{switch(n){case 0:P2 = (P2 & 0x1f) | 0x00;break;case 5:P2 = (P2 & 0x1f) | 0xa0;break;case 6:P2 = (P2 & 0x1f) | 0xc0;break;case 7:P2 = (P2 & 0x1f) | 0xe0;break;}
}//系统初始化
void Init_system()
{Select_HC138(5);P0 = 0x00;      //关闭蜂鸣器和继电器Select_HC138(0);
}//数码管延时函数
void Delay_tube(unsigned char time)
{while(time--);
}//数码管显示
void Show_tube(unsigned char position,value)
{Select_HC138(7);P0 = 0xff;        //注意:先熄灭Select_HC138(6);P0 = 0x01 << position;Select_HC138(7);P0 = value;
}void Show_ALL(unsigned char value)
{Select_HC138(7);  //注意:先熄灭P0 = value;Select_HC138(6);P0 = 0xff;
}//数码管动态显示
void Display_tube(unsigned char dat)
{Show_tube(5,SEG_code[dat/100]);         //显示温度十位Delay_tube(100);Show_tube(6,SEG_dot[(dat/10)%10]);   //显示温度个位Delay_tube(100);Show_tube(7,SEG_code[dat%10]);         //显示温度小数位Delay_tube(100);Show_ALL(0xff);                        //熄灭
}//温度转换延时函数
void Delay_temp(unsigned int t)
{while(t--){Display_tube(T_dat);}
}//读取温度(保留一位小数)
void Read_temperature()
{unsigned char LSB,MSB;     //存放温度Init_DS18B20();            //复位Write_DS18B20(0xcc);       //跳过ROM操作指令Write_DS18B20(0x44);       //温度转换Delay_temp(1000);          //延时约700msInit_DS18B20();            //复位Write_DS18B20(0xcc);       //跳过ROM操作指令Write_DS18B20(0xbe);       //读取RAMLSB = Read_DS18B20();      //读取温度数据的低8位(低位先读)MSB = Read_DS18B20();      //读取温度数据的高8位Init_DS18B20();              //复位,停止读取数据T_dat = 0x0000;T_dat = MSB;T_dat <<= 8;               //左移8位T_dat |= LSB;              //整合温度if((T_dat & 0xf800) == 0x0000)        //取温度的高5位,判读是否为正温度{T_dat >>= 4;                    //取温度的整数部分T_dat *= 10;                    //放大10倍T_dat += (LSB & 0x0f)*0.625;    //取小数部分并放大10倍,与整数部分相加}
}//主函数
void main()
{Init_system();while(1){Read_temperature();Display_tube(T_dat);}
}

蓝桥杯单片机CT107D_14_温度传感器DS18B20的基本应用相关推荐

  1. 【蓝桥杯单片机11】单总线温度传感器DS18B20的基本操作

    [蓝桥杯单片机11]单总线温度传感器DS18B20的基本操作 广东职业技术学院 欧浩源 单总线数字温度传感器DS18B20几乎成了各类单片机甚至ARM实验板的标配模块来,在蓝桥杯的往届省赛和国赛中,这 ...

  2. 蓝桥杯单片机之DS18B20温度传感器

    蓝桥杯单片机之DS18B20温度传感器 简述: 根据提供的芯片数据手册可以获取的信息: ROM操作命令: 存储器操作命令 温度转换及温度获取 温度寄存器格式: 获取温度的具体操作 温度数据处理与数码管 ...

  3. 蓝桥杯单片机DS18b20单总线测温模块常见问题解决

    蓝桥杯单片机DS18b20单总线测温模块常见问题解决 有道是:"溪水声声留我住,梅花朵朵唤人回" DS18b20测温模块作为一个比较简单.稳定的蓝桥杯单片机外设模块, 使用时却经常 ...

  4. 蓝桥杯单片机DS18B20代码注释及部分时序图

    蓝桥杯单片机蓝桥杯单片机DS18B20代码注释及部分时序图 #include<STC15F2K60S2.H> #include<intrins.h>#define uchar ...

  5. 蓝桥杯单片机(九)DS18B20温度测量(四位小数和负数显示)

    上一次讲了DS18B20的整数温度显示 蓝桥杯单片机(八)DS18B20温度测量(整数显示) 但近几年有出题小数部分的温度显示,首先打开DS18B20的数据手册,如图 通过这张表,我就知道读取数据时, ...

  6. 【蓝桥杯单片机(24)】历届单片机客观题及答案解析

    目录 考前冲刺,专栏完结篇 ## 推荐链接: 推荐视频–小蜜蜂老师讲解 赛点资源包下载,提取码:brno 三极管基本知识总结 运算放大电路的基础 第十三届蓝桥杯单片机官方直播课录屏 目录 一些刷题后的 ...

  7. 关于第八届蓝桥杯单片机初赛----电子钟设计的题目分析和编程思路分享

    关于第八届蓝桥杯单片机初赛----电子钟设计的题目分析和编程思路分享 1.前言 蓝桥杯单片机比赛,对于初试者,比如那些没有接触51系列单片机,或者很少编程训练的人而言,确实很有挑战力.而即使对于有基础 ...

  8. 蓝桥杯单片机组——榨干选手资源包(芯片数据手册)

    文章目录 前言 DS18B20 原理图 1-Wire协议简介 赛场技巧 DS1302 原理图 SPI协议简介 赛场技巧 AT24C02 原理图 IIC协议简介 赛场技巧 PCF8591 原理图 赛场技 ...

  9. 蓝桥杯单片机第十二届第一场省赛--张三填坑

    Less interests.More interest. 蓝桥杯单片机第十二届第一场省赛--张三填坑 坑0 坑1 坑2 坑3 坑4 坑5 坑6 坑7 坑8 仅记录试题中可能存在的坑. 源码和PDF题 ...

最新文章

  1. 过关斩将打进Kaggle竞赛Top 0.3%,我是这样做的
  2. Vista光线效果photoshop教程
  3. 基于IAR上搭建开发MM32的环境
  4. 计算一个image的大小_一个方案提升Flutter内存利用率(干货)
  5. Python笔记 【无序】 【一】
  6. 90 % 的 Python 开发者不知道的描述符应用
  7. 漫画科普:芯片是如何设计出来的
  8. ECCV 2020 oral | 基于语义流的快速而准确的场景解析,在Cityscapes上达到80.4%mIoU,26 FPS...
  9. Cannot modify the value of a static config: spark.sql.queryExecutionListeners
  10. 解决JS文件页面加载时的阻塞
  11. win7搭建nas存储服务器_普通用户的低成本家庭文件服务器(伪NAS)的搭建(系统篇)...
  12. extjs 中formPanel提交到action后返回json数据到ext中,但是ext页面不进入sucess也不进入failure
  13. 交换机的工作原理和功能
  14. 【JS】1007- JavaScript实现网页截屏的5种方法
  15. js获取当前是第几周
  16. Mac移动硬盘不正确断开连接导致无法读取加载的解决方法
  17. 抖抖代码-爬取企查查企业信息
  18. 王兴:为什么中国的To B企业都活得这么惨?
  19. 检测整数是否含有7 或 是7的倍数
  20. Matlab中的linspace()函数

热门文章

  1. Visual Basic快捷教程——函数与子程序
  2. 001:网络爬虫基础理论整合
  3. 世界上第一胎电子计算机的主要构成原件,世界上第一台计算机的主要构成原件是什么...
  4. 【格林深瞳22校招开发岗】笔试
  5. 1255B. Fridge Lockers Codeforce题解
  6. 要关闭python解释器可使用函数或者快捷键_超星尔雅中华传统文化之戏曲瑰宝第七章节测验网课答案选修课慕课答案...
  7. C语言-顺序表直接删除重复元素
  8. 任务卡片优先级排序-Leangoo看板工具
  9. pandas如何合并列表_Pandas数据合并与拼接的5种方法
  10. 【个人】近期读书小结+推荐