One Wire协议应用篇(c语言板)

2023-12-24 02:15
文章标签 语言 应用 协议 one wire

本文主要是介绍One Wire协议应用篇(c语言板),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一.项目简介

        利用DS18B20实时检测温度并显示在LCD1602显示屏上,同时可以通过K1,K2,K3,K4设置最高温度和最低温度利用AT24C02可以实现掉电不丢失,最后当检测温度大于或小于最高温时,会在LCD1602显示屏上显示OV:H或OV:L。

二.准备材料

        AT89C52、LCD1602显示屏、4只按键、AT24C02、DS18B20。

 

三.操作资料汇总

        AT24C02芯片:2K位串行CMOS E2PROM, 内部含有256个8位字节,AT24C02是一种可以实现掉电不丢失的存储器,可用于保存单片机运行时想要永久保存的数据信息。
存储介质:EEPROM;通讯接口:I2C总线。

  

        DS18B20数字温度传感器:输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。[1]  DS18B20数字温度传感器接线方便,封装成后可应用于多种场合。通讯接口:单总线协议进行通信(One-Wire)

四.One-Wire协议解析与C代码

(1)初始化时序

 

代码

unsigned char onewire_init(void)
{unsigned char i;unsigned char ackbit;onewire_dq = 1;onewire_dq = 0;i = 247;while (--i);  //delay 500usonewire_dq = 1;i = 32;while (--i);   //delay 70usackbit = onewire_dq;i = 247;while (--i);  //delay 500usreturn ackbit;
}

(2)读时序

代码 

unsigned char onewire_receivebit(void)
{unsigned char i;unsigned char Bit;onewire_dq = 0;i = 2;while (--i); //delay 9usonewire_dq = 1;i = 2;while (--i); //delay 9usBit = onewire_dq;i = 22;while (--i); //delay 50usreturn Bit;
}

(3) 写时序

 代码

unsigned char onewire_sendbit(unsigned char Bit)
{unsigned char i;onewire_dq = 0;i = 4;while (--i); //delay 14usonewire_dq = Bit;i = 22;while (--i); //delay 50usonewire_dq = 1;
}

 (4)主函数代码

 

#include <REGX52.H>
#include "LCD1602.h"
#include "onewire.h"
#include "DS18B20.h"
#include "key.h"
#include "AT24C02.h"
float t,tshow;
char tlow,thigh;
unsigned char keynum;
void Delay5ms() //@11.0592MHz
{unsigned char i, j;i = 54;j = 199;do{while (--j);}   while (--i);
}
void main()
{LCD_Init();LCD_ShowString(1,1,"T:");LCD_ShowString(2,1,"TH:");LCD_ShowString(2,9,"TL:");thigh = AT24C02_ReadByte(0);tlow = AT24C02_ReadByte(1);while(1){LCD_ShowSignedNum(2,4,thigh,3);LCD_ShowSignedNum(2,12,tlow,3);keynum = key();ds18b20_convert();t = ds18b20_readt();if(t<0){LCD_ShowChar(1,3,'-');tshow= -t;}else{LCD_ShowChar(1,3,'+');tshow = t;}LCD_ShowNum(1,4,tshow,3);LCD_ShowChar(1,7,'.');LCD_ShowNum(1,8,(unsigned long)(tshow*100)%100,2);if(keynum){if(keynum==1){thigh++;if(thigh>125){thigh=125;}}if(keynum==2){thigh--;if(thigh<=tlow){thigh++;}}if(keynum==3){tlow++;if(tlow>=thigh){tlow--;}}if(keynum==4){tlow-- ;if(tlow<-55){tlow = -55;}}if(tshow>thigh){LCD_ShowString(1,13,"OV:H");}else if(tshow<tlow){LCD_ShowString(1,13,"OV:L");}else{LCD_ShowString(1,13,"    ");}AT24C02_WriteByte(0,thigh);Delay5ms();AT24C02_WriteByte(1,tlow);Delay5ms();}}
}

五.运行结果

        由测试图中的LCD1602显示屏可以得出:当前室温是24.18℃,最高温限制为21℃,最低温限制为-2℃。 

这篇关于One Wire协议应用篇(c语言板)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/530250

相关文章

Redis中Stream详解及应用小结

《Redis中Stream详解及应用小结》RedisStreams是Redis5.0引入的新功能,提供了一种类似于传统消息队列的机制,但具有更高的灵活性和可扩展性,本文给大家介绍Redis中Strea... 目录1. Redis Stream 概述2. Redis Stream 的基本操作2.1. XADD

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁