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

相关文章

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Go语言中三种容器类型的数据结构详解

《Go语言中三种容器类型的数据结构详解》在Go语言中,有三种主要的容器类型用于存储和操作集合数据:本文主要介绍三者的使用与区别,感兴趣的小伙伴可以跟随小编一起学习一下... 目录基本概念1. 数组(Array)2. 切片(Slice)3. 映射(Map)对比总结注意事项基本概念在 Go 语言中,有三种主要

C语言中自动与强制转换全解析

《C语言中自动与强制转换全解析》在编写C程序时,类型转换是确保数据正确性和一致性的关键环节,无论是隐式转换还是显式转换,都各有特点和应用场景,本文将详细探讨C语言中的类型转换机制,帮助您更好地理解并在... 目录类型转换的重要性自动类型转换(隐式转换)强制类型转换(显式转换)常见错误与注意事项总结与建议类型

Go语言利用泛型封装常见的Map操作

《Go语言利用泛型封装常见的Map操作》Go语言在1.18版本中引入了泛型,这是Go语言发展的一个重要里程碑,它极大地增强了语言的表达能力和灵活性,本文将通过泛型实现封装常见的Map操作,感... 目录什么是泛型泛型解决了什么问题Go泛型基于泛型的常见Map操作代码合集总结什么是泛型泛型是一种编程范式,允

Android kotlin语言实现删除文件的解决方案

《Androidkotlin语言实现删除文件的解决方案》:本文主要介绍Androidkotlin语言实现删除文件的解决方案,在项目开发过程中,尤其是需要跨平台协作的项目,那么删除用户指定的文件的... 目录一、前言二、适用环境三、模板内容1.权限申请2.Activity中的模板一、前言在项目开发过程中,尤

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

基于Go语言实现一个压测工具

《基于Go语言实现一个压测工具》这篇文章主要为大家详细介绍了基于Go语言实现一个简单的压测工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录整体架构通用数据处理模块Http请求响应数据处理Curl参数解析处理客户端模块Http客户端处理Grpc客户端处理Websocket客户端

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex