PIC单片机DS18B20温度报警程序及仿真

发布者:捡漏来了最新更新时间:2019-04-26 来源: eefocus关键字:PIC单片机  DS18B20  温度报警 手机看文章 扫描二维码
随时随地手机看文章

1、采用直插式数字温度传感器DS18B20; 


2、本程序只显示正数部分,负数部分请自行解决,而且精度保留后两位; 


3、使用DS18B20的跳过ROM指令,不支持单总线多个传感器的采集; 


4、采用pic18f45k22芯片及共阴极数码管显示; 


5、源程序如下: 

*#include “p18f45k22.h” 

*#define uchar unsigned char 

*#define DQ PORTBbits.RB0 

*#define DQ_HIGH() TRISBbits.RB0=1 

*#define DQ_LOW() TRISBbits.RB0=0;DQ=0 

uint tempr; 

uchar a1,a2,a3,a4;//鏁扮爜绠℃樉绀虹殑鍊? 

const uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; 

const uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; 

void delayus(uchar x); 

void disp(uchar num1,uchar num2,uchar num3,uchar num4); 

void init(); 

void reset(); 

void write_byte(uchar date); 

uchar read_byte(); 

void get_tem(); 

int main(int argc, char const *argv[]) 

/* code */ 

init(); 

PORTA=0; 

while(1){ 

get_tem(); 

if((tempr/100)>30) 

PORTA=1; 

else 

PORTA=0; 

}


return 0;


void init(){ 

ANSELA=0; 

ANSELB=0; 

ANSELC=0; 

ANSELD=0; 

TRISA=0; 

TRISC=0; 

TRISD=0; 

void reset(){ 

uchar st=1; 

DQ_HIGH(); 

Nop();Nop(); 

while(st){ 

DQ_LOW(); 

delayus(121);//750us 

DQ_HIGH(); 

delayus(8);//70us 

if(DQ==1) 

st=1; 

else 

st=0; 

delayus(80); 

void write_byte(uchar date){ 

uchar i,temp; 

DQ_HIGH(); 

Nop();Nop(); 

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

temp=date&0x01; 

DQ_LOW(); 

delayus(0);//20us~15us 

if(temp==1) 

DQ_HIGH(); 

delayus(4);//45us 

DQ_HIGH(); 

date=date>>1; 

uchar read_byte(){ 

uchar i,date; 

//static bit j; 

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

date=date>>1; 

DQ_HIGH(); 

Nop();Nop(); 

DQ_LOW(); 

Nop();Nop();Nop();Nop();Nop();Nop(); 

DQ_HIGH(); 

Nop();Nop();Nop();Nop(); 

//j=DQ; 

//if(j==1) 

if(DQ==1) 

date=date|0x80; 

delayus(1); 

return (date); 

void get_tem(){ 

uchar tem1,tem2; 

uint i; 

reset(); 

write_byte(0xcc);//璺宠繃 rom 

write_byte(0x44);//娓╁害杞崲 

// delayus(121);//750us


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

    disp(a1,a2,a3,a4);

    }

reset();

write_byte(0xcc);

write_byte(0xbe);//璇昏浆鎹㈢粨鏋?鍏堣鐨勬槸浣庡瓧鑺?

tem1=read_byte();

tem2=read_byte();

tempr=(tem2*256+tem1)*6.25;

a1=tempr/1000;

a2=tempr%1000/100;

a3=tempr%100/10;

a4=tempr%10;


void delayus(uchar x){ 

uchar i; 

for(i=x;i>0;i–); 

// delayus(0);//22 

// delayus(1);//29 

// delayus(4);//47 

// delayus(8);//71 

// delayus(80);//503 

// delayus(121);//751 

void disp(uchar num1,uchar num2,uchar num3,uchar num4) 

PORTC=table[num1];//显示第一个数码管 

PORTD=0xfe;//0010 0000 

delayus(250); 

PORTD=0xff; 

PORTC=table1[num2];//显示第二个数码管 

PORTD=0xfd;//0001 0000 

delayus(250); 

PORTD=0xff; 

PORTC=table[num3];//显示第三个数码管 

PORTD=0xfb;//0000 1000 

delayus(250); 

PORTD=0xff; 

PORTC=table[num4];//显示第四个数码管 

PORTD=0xf7;//0000 0100 

delayus(250); 

PORTD=0xff; 

delayus(250); 

}//部分文字乱码,不兼容,没办法; 

6、仿真图: 

 
这里写图片描述 

7、这里补充说明一下,由于编译器的版本较低不能使用bit类型,没有配置状态字; 

8、对于18B20的使用主要注意通信协议:延时有2us到750us不等,所以需要注意,这里以read_byte()函数为例,读取每个18B20的byte,首先我们要一个位一个位的读取,使用右移指令来或0x80这样就可以得到一个8位数据,最后返回date;


关键字:PIC单片机  DS18B20  温度报警 引用地址:PIC单片机DS18B20温度报警程序及仿真

上一篇:PIC单片机配置字
下一篇:PIC单片机ISP下载外围链接电路

推荐阅读最新更新时间:2024-11-08 09:02

蓝桥杯STC15单片机复习——DS18B20
前言 温度检测也是蓝桥杯的常考点,有时候需要显示小数点后一到两位,有时候只需要显示整数位(一般是要显示的东西太多了小数放不下了)。由于比赛的时候官方直接给出看底层的驱动,就不再去纠结底层实现的原理和方法了,只需要针对数据手册分析温度解析与获取部分即可。 实现 国信长天的开发板上的DS18B20接线如上图所示,其实官方给的底层驱动已经定义好了引脚,当然看原理图检查也是不可或缺的一步。 根据数据手册写出,在每次对DS18B20操作之前,我们都需要对其进行一个初始化,初始化时序如上图所示。 相关命令翻译已经给出,简而言之就是:使用18B20获取温度,我们需要启动其温度转换(0x44单个温度转换),然后才能使用读取命
[单片机]
蓝桥杯STC15单片机复习——<font color='red'>DS18B20</font>
PIC单片机之数码管
大家好, 通过前一期的学习, 我们已经对ICD2 仿真烧写器和增强型PIC 实验板的使用方法及学习方式有所了解与熟悉,学会了如何用单片机来控制发光管、继电器、蜂鸣器、按键等资源,体会到了学习板的易用性与易学性,特别是当自己第一次动手编程点亮一个发光管时,相信对于初学者来说,一定很兴奋,很有成就感吧!现在我们就趁热打铁,再向上跨一步,一起来学习一下数码管的工作原理及使用方法,这一期实验将会更具生动性。 说到七段数码管,它在家电及工业控制中有着很广泛的应用, 例如用来显示温度、数量、重量、日期、时间等,具有显示醒目、直观的优点。在一般的人机对话中,输入器件一般都是以按键为主,但输出器件则以数码管或LCD 为主。数码管作为一种应用十
[单片机]
<font color='red'>PIC单片机</font>之数码管
PIC单片机循环程序实例
  在这里介绍一种定时程序,说明循环程序在PIC单片机上的应用。笔者仍以PIC16F84单片机为例建立其定时源程序清单。该定时器源程序只需改变一条指令的常数设置,即可使定时时间从分钟级到3?8小时的连续变化(4MHz晶振条件)。在该源程序上再多设置一次循环,可使定时时间长达1月以上。   该PIC16F84单片机定时源程序可直接在MPLAB集成开发环境软件下进行汇编,其汇编后生成的HEX文件可在实验编程器1?01上对源程序进行固化并可在相应的实验板上直接观察实验的结果。PIC16F84单片机时的源程序清单如下(文件各可自定义):    LIST    P=PIC16F84    #INCLUDE P16F84?INC    COU
[单片机]
基于PIC单片机的智能湿度测量仪电路
  由HM1500/1520型湿度传感器和单片机构成的智能湿度测量仪电路如下图所示。该仪表采用+5V电源,配4只共阴极LED数码管。电路中共使用了3片IC:IC1为HM1500/1520型湿度传感器,IC2是由美国微芯片(Microchip)公司生产的带10位ADC的单片机PIC16F874,IC3为7达林顿反相驱动器阵列MC1413。PIC16F874是一种高性价比的8位单片机,内含8路逐次逼近式10位A/D转换器,最多可对8路湿度信号进行模数转换,现仅用其中一路。JT为4MHz石英晶体,配上振荡器电容C1、C2之后可为单片机提供4MHz时钟频率。PIC16F874的电源电压范围较宽(+2.5~+5V),适合低压供电,静态电流小
[电源管理]
基于<font color='red'>PIC单片机</font>的智能湿度测量仪电路
PIC单片机之第一个工程分析,点亮LED
电路图如下: 新建一个工程: 然后用工程向导设置工程 Project-》project wizard: 选择芯片: 设置编译器: 选择文件位置: 这里设置工程就完成了 添加C文件,这里只是添加一个文件罢了 内容如下: 到这里文件编辑完成了 下面是下载设置,这里要选择上PICkit3,因为我们的仿真器是这个: 最后就是比较关键的配置字了,这里我们使用默认的配置字,configure-》configuration bits...如下: 整个工程可以说配置完毕了,最后下载: 这样就能够把代码数据下载成功进去了 实验现象如下所示: 到这里就结束了整个的工程 但是有几个地方要说的
[单片机]
基于LPC2104的温度测量系统设计
1. 引言 嵌入式系统是能够运行操作系统的软、硬件综合体,且多数系统的应用软件和操作系统是紧密结合在一起的。选配好RTOS(Real-Time Operating System)开发平台,就能合理的实现多任务调度,系统资源利用。 嵌入式系统较一般单片机系统而言,软件资源利用率较高,开发周期短;系统精度较高;实时性也更好。特别适合于数据处理量较大,有联网、通信等要求的场合。 为了利用嵌入式系统构造一个分布式多点温度测控系统,本文做了一些前期的尝试和开发工作。结合可编程单总线数字式温度传感器DS18B20,用嵌入式系统构造了一个具有温度测量、相关数据处理以及与上位机通信等功能的现场温度测量单元,上位机则主要完成系统监控和人机交互等功能
[单片机]
基于LPC2104的<font color='red'>温度</font>测量系统设计
ds18b20 温度模块串口显示简单代码
今天晚上没事干编了一个极简的一个小程序,虽然简单但是还是很稳定的,连接也很简单,用最小系统板p0.0口接上ds18b20模块就可以了 #include reg51.h #include intrins.h #include stdio.h #include DS18B20.h #define OSC 11059200 //晶振频率 #define BAUDRATE 9600 //波特率 void main(void) { unsigned int i; unsigned char tmph,tmpl; Temp t; unsigned char strTemp ; //显示到屏幕的温度数据
[单片机]
<font color='red'>ds18b20</font> <font color='red'>温度</font>模块串口显示简单代码
PIC单片机软件异步串行口实现方法
在用单片机开发各种嵌入式应用系统时,异步串行通信是经常要用到的一种通信模式,很多应用中还要求实现多路异步串行通信。大家平时熟悉的各种厂家的单片机,绝大部分片上只提供一个硬件UART模块,利用它可以方便实现一路串行通讯。PIC系列单片机也不例外,在其丰富的产品家族成员中,除高端系列(PIC17/18)一些型号片上带有两路硬件UART模块外,其它大部分型号片上只有一路UART,一些低端廉价的PIC单片机甚至还不带硬件UART。为了提高系统的性能价格比,就要求设计工程师用软件增加实现一路或多路异步串行通信。很多工程师对用软件实现的UART在可靠性和效率方面持怀疑态度,其实关键问题是看软件采用何种方式来实现可靠的UART功能。   在
[单片机]
<font color='red'>PIC单片机</font>软件异步串行口实现方法
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved