STC15单片机获取容栅测量仪表(数显百分表)数据

2023-11-06 18:10

本文主要是介绍STC15单片机获取容栅测量仪表(数显百分表)数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

STC15单片机读取容栅测量仪表(数显百分表)数据

  • 1. 系统概述
  • 2. 容栅测量仪表及发送数据格式
    • 2.1 数据输出线路
    • 2.2 输出数据格式说明
  • 3. STC15单片机
    • 3.1 STC15MCU单片机的外部中断
    • STC15程序编制

1. 系统概述

项目中需要用容栅测量仪表测量位移信号,然后将测量的数据由STC15MCU获取,然后通过Lora模块发送给集中控制器。系统框图:
在这里插入图片描述

2. 容栅测量仪表及发送数据格式

容栅测量仪表的芯片研发是一个谜,是那个公司研发的,谁生产的,在国内还是在国外生产的是一个谜,只有在这个行业当中的人才可以知道其中的奥秘。局外人无从知晓。经过仔细查找,看到市面上有GC7605芯片在销售,有兴趣的朋友可以继续搜索。

2.1 数据输出线路

以国内天目厂家的芯片为例,芯片的接线如下图,一般对外宣称有数据输出的厂家的产品会带有这种数据输出的连接接口。
在这里插入图片描述
从这个图上可以看出,仪表接线一般是这种形式,有电源正极,负极,清零,SCLK及SDATA数据端。

2.2 输出数据格式说明

输出的数据是28位串行信号,每个SCLK时钟信号代表一个位,这个位是高电平还是低电平由SDATA数据决定。信号时序图如下:
在这里插入图片描述
发送的数据按4位二进制数代表一个10进制位,以BCD码形式翻译。比如测量仪表最低10进制位是8,前4位二进制就是1000,若测量仪表的第一位10进制数是7,则5-8位的二进制数位0111. 如果收到的数据是54321,则显示数据为12.345. 所有的28位时钟传递28位二进制数据,每四位二进制代表一个十进制的数据,24位代表6位十进制数据,后面的四位是作为符号位及单位表示的。

3. STC15单片机

如果按上面的时序图看可以采用轮询的方式编制程序,但为了更好的适应各种仪表,采用外部中断的形式编制程序。

3.1 STC15MCU单片机的外部中断

MCU单片机外部中断的地址是固定的,INT0外部中断是P3.2接口,INT1外部中断是P3.3接口。这两个接口可以工作在2种中断模式下:

  • 低电平中断
  • 上跳沿和下跳沿中断

为了使用SCLK信号,采用上跳沿中断方式。接线图如下:
在这里插入图片描述
从这里可以看到,STC15的P3.2 - SCLK, P3.3 - SDATA。上跳沿中断的处理方法是:

  • 采用上升沿和下降沿中断有效方式
  • 中断发生后判断是上跳还是下跳发生
  • 上跳发生进入中断程序,下跳发生返回

STC15程序编制

首先要对INT0进行初始化

void exint0_Init(void)
{INT0 = 1;ITO = 0// 设置INT0的中断模式,1:下降沿,0:上升沿和下降沿EXT0 = 1;				// 使能INT0;
}

然后要编制中断服务程序:

void exint0() interrupt INT0_VECTOR       //INT0中断入口
{int i;FLAG = INT0;                //保存INT0口的状态, INT0=0(下降沿); INT0=1(上升沿)bTemp = SDATA;    	// 保存此次的DATA数据。if (FLAG == 0) 		// 这里判断是上跳沿还是下跳沿{				// 如果是下跳沿,直接用return返回。ihTemp++;	// 如果上上跳沿,继续执行程序return;     // 是下跳沿,返回。数据加1} 	if ( u16UpCount < 4 )  					// get first 4 bits{if ( bTemp == 1 )nib0 = setbit(nib0, u16UpCount);elsenib0 = clrbit(nib0, u16UpCount);}if ( (u16UpCount >= 4) && ( u16UpCount < 8))  // second 4 bits{if ( bTemp == 1 )nib1 = setbit(nib1, (u16UpCount - 4 ));elsenib1 = clrbit(nib1, (u16UpCount - 4));} if ((u16UpCount >= 8) && (u16UpCount < 12))   // third 4 bits{if ( bTemp == 1 )nib2 = setbit(nib2, (u16UpCount - 8));elsenib2 = clrbit(nib2, (u16UpCount - 8));}................if (( u16UpCount >= 27 ) && (bType_nSum == 0)){uReadData = 0;nib0 = 0x000F & nib0;nib1 = 0x000F & nib1;nib2 = 0x000F & nib2;nib3 = 0x000F & nib3;nib4 = 0x000F & nib4;nib5 = 0x000F & nib5;  uReadData = nib0;uReadData = nib1;uReadData = (nib2 * 10) + uReadData;uReadData = (nib3 * 100) + uReadData;uReadData = nib4 * 10000 + uReadData;uReadData = nib5 * 100000 + uReadData;if ( bType_neg == 1 )uReadData = -1 * uReadData;bType_nSum = 1;}u16UpCount++;P20 = !P20;}

当编译执行程序后,在串口上可以显示仪表读取的数值:
在这里插入图片描述
仪表及线路连接如图:
在这里插入图片描述

这篇关于STC15单片机获取容栅测量仪表(数显百分表)数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

微信公众号脚本-获取热搜自动新建草稿并发布文章

《微信公众号脚本-获取热搜自动新建草稿并发布文章》本来想写一个自动化发布微信公众号的小绿书的脚本,但是微信公众号官网没有小绿书的接口,那就写一个获取热搜微信普通文章的脚本吧,:本文主要介绍微信公众... 目录介绍思路前期准备环境要求获取接口token获取热搜获取热搜数据下载热搜图片给图片加上标题文字上传图片

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Python实现将MySQL中所有表的数据都导出为CSV文件并压缩

《Python实现将MySQL中所有表的数据都导出为CSV文件并压缩》这篇文章主要为大家详细介绍了如何使用Python将MySQL数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到... python将mysql数据库中所有表的数据都导出为CSV文件到一个目录,并压缩为zip文件到另一个

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa