蓝桥杯备战——11.NE555测频

news2024/10/7 0:03:21

1.分析原理图

在这里插入图片描述
我们可以看到,上图就是一个NE555构建的方波发生电路,输出方波频率=1.44/2(R8+Rb3)C,如果有不懂NE555内部结构,工作原理的,可以到B站学习。实在不懂仿真也行,比如我下面就是仿真结果:
在这里插入图片描述
然后就是下图,NE555输出的方波信号输入到电容二极管组成的负压生成电路,产生大概4.3V的负压Vee供运放使用。这与本节内容无关,我只是一起讲了。
在这里插入图片描述
再看下图:NE555输出方波信号也接到了排针J3上,而且旁边就是P34引脚,又由于比赛时好像不会提供杜邦线,所以我们也只能用跳线帽将NET_SIG和P34连在一起,然后单片机通过P34引脚来测输出频率。
在这里插入图片描述

2.定时器测频

这里我就不得不狠狠的吐槽一波这板子的设计人员,既然你都用STC15F2K61S2了,为什么不能想着兼容设计把P34改成P35呢?我们知道,定时器0可以对P34引脚输入脉冲计数,定时器1可以对P35引脚输入脉冲计数,STC89C52和STC15F都是一样的。但是STC15F还有一个更好用,更灵活的外设:PCA
在这里插入图片描述
但是呢,槽点来了,CCP功能切换不到P34引脚,只能把PCA计数脉冲源切换到P34引脚,就很无语,你把P34替换成P35,既能兼容STC89C52使用定时器1对外部脉冲计数,也能兼容STC15F使用CCP功能,就不能好好阅读一下STC15F的用户手册嘛?
在这里插入图片描述
不过现在我也不打算就用定时器0来对外部输入脉冲计数,因为我的初衷是把板子上面的各个外设都封装一遍且互不干扰,现在定时器0已经被我用做前后台功能了,所以我得另寻他法。别说,还真有。
这里真的不得不佩服STC芯片的设计者们,使用一个PCA计数阵列就能实现脉冲捕获,PWM输出,软16位定时器,外部中断,D/A功能。关于此外设具体如何使用,请阅读STC15F用户手册!
在这里插入图片描述
在这里插入图片描述

我这里就是使用的PCA计数阵列对P34输入的脉冲进行计数,然后每1S获取计数值,计数值即频率。

3.代码封装库

代码注释即解析,请一定先仔细阅读PCA外设章节。

#include "capture.h"

u32 frequency=0;	//得出频率,单位HZ
u8 Overflow=0;		//PCA计数溢出次数

//PCA软件定时器对P34输入脉冲计数
void Capture_Init()
{
	P_SW1 &=0XCF;	//清除CCP_S1,CCP_S0位
	P_SW1 |=0X10;	//CCP在P34/ECI_2
	CCON = 0;     //清除CF标志 PCA定时器停止 清除模块0/1/2中断标志
	CL = 0;CH = 0;	//复位PCA计数值
	CMOD = 0x07; //设置PCA时钟源:ECI输入,允许PCA溢出中断
	CR = 1;	//启动PCA计数器阵列计数
	EA = 1; //开总中断
}

void PCA_isr() interrupt 7	//发生匹配中断
{
  CF = 0;	//清中断标志
  CL = 0;CH = 0;	//复位PCA计数值
  Overflow++;
}

//每1S获取一次计数值,即频率
void Get_Frequency()
{
	frequency = (Overflow<<16) | (CH<<8) |CL;
	CL = 0;CH = 0;Overflow=0;
}

4.使用示例

#include "main.h"

bit KeyScan_Flag=0;
extern u32 frequency;	//测得频率

void System_Init(void);
void Timer0_Init(void);

void main()
{
	System_Init();
	Timer0_Init();
	Capture_Init();
	while(1)
	{
		Nixie_Display(1,(frequency%100000000)/100000);	
		Nixie_Display(2,(frequency%10000000)/10000);
		Nixie_Display(3,(frequency%1000000)/10000);	
		Nixie_Display(4,(frequency%100000)/10000);	
		Nixie_Display(5,(frequency%10000)/1000);	
		Nixie_Display(6,(frequency%1000)/100);	
		Nixie_Display(7,(frequency%100)/10);	
		Nixie_Display(8,frequency%10);	
	}
}

void Timer0_Isr() interrupt 1	//1ms中断一次
{
	static u16 count1=0;
	if(++count1==1000)	//每1S获取一次计数值
	{
		Get_Frequency();
		count1=0;
	}
}

void Timer0_Init()		//1毫秒@12.000MHz
{
	AUXR &= 0x7F;			//12T模式
	TMOD &= 0xF0;			//定时器0:16位自动重装载
	TL0 = 0x18;				//设置定时初始值
	TH0 = 0xFC;
	TF0 = 0;	//清除TF0标志
	ET0 = 1;	//使能定时器0中断
	EA = 1;		//开总中断
	TR0 = 1;	//定时器0开始计时
}

void System_Init()//系统上电初始化
{
	//先锁存蜂鸣器,继电器所在573输出低电平,防止上电乱叫
	P25=1;P26=0;P27=1; //74HC138-->Y5=0,else=1-->Y5C=1,else=0
	P04=0;P06=0;	//ULN2003输入经过非门送入达林顿管,低电平有效
	P25=0;P26=0;P27=0;//锁存数据
	
	//关闭所有LED灯
	P25=0;P26=0;P27=1; //74HC138-->Y4=0,else=1-->Y4C=1,else=0
	P0=0XFF;
	P25=0;P26=0;P27=0;//锁存数据
}

我们通过旋转滑动变阻器RB3就能改变输出频率,演示效果如下,由于手头没有示波器,只能到学校再验证误差了。

NE555测频演示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1427849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

洛谷 P1803 凌乱的yyy / 线段覆盖

本聪明帅气文武双全的史上无敌代码猿来发题解了. 题目背景 快 noip 了&#xff0c;yyy 很紧张&#xff01; 题目描述 现在各大 oj 上有 n 个比赛&#xff0c;每个比赛的开始、结束的时间点是知道的。 yyy 认为&#xff0c;参加越多的比赛&#xff0c;noip 就能考的越好&…

企业架构TOGAF?

企业架构 企业架构&#xff08;Enterprise architecture&#xff09;是指整个公司或企业中软件和其他技术的整体视图和方法。 通常&#xff0c;企业架构不仅仅是组织各种内部基础设施的结构。相反&#xff0c;我们的目标是通过以正确的方式分析、设计、规划和实施正确的技术&…

数据结构—动态查找

动态查找介绍 1. 动态查找的引入&#xff1a;当查找表以线性表的形式组织时&#xff0c;若对查找表进行插入、删除或排序操作&#xff0c;就必须移动大量的记录&#xff0c;当记录数很多时&#xff0c;这种移动的代价很大。 2. 动态查找表的设计思想&#xff1a;表结构本身是…

ffmpeg合成mp3音频,解决音频属性不一致问题

1. 需求&#xff0c;amr转成mp3&#xff0c;再将此mp3和其他mp3合成 2. 问题&#xff1a;拼接后的第一段音频可以播放&#xff0c;第二段自动跳过&#xff0c;无法播放。 3. 解决&#xff1a; 3.1 查看各文件属性 # 查看amr转为mp3文件的属性&#xff1a;ffprobe 文件名&am…

Java基础 反射详解

目录 简介 反射的基本使用 获取 Class 对象的四种方式 基本使用示例 常用方法 生产中的常用方式 获取注解 SpringIoc容器的制作 反射 抽象工厂模式 双亲委派 反射缺点 前言-与正文无关 生活远不止眼前的苦劳与奔波&#xff0c;它还充满了无数值得我们去体验和珍…

认识文件和目录

单用户&多用户操作系统(科普) 单用户操作系统:指一台计算机在同一时间 只能由一个用户 使用,一个用户独自享用系统的全部硬件和软件资源Windows XP 之前的版本都是单用户操作系统 多用户操作系统:指一台计算机在同一时间可以由 多个用户 使用,多个用户共同享用系统的全…

syntax error: expected ‘:‘ | ‘IDENT‘ | ‘INT‘, got ‘(‘

问题 使用 go-zero时&#xff0c;执行api命令报错user.api 55:9 syntax error: expected : | IDENT | INT, got (。报错信息提醒文件55行有错&#xff0c;但是源文件55行没有问题。 解决 这里我的goctl版本是1.6.1 执行如下命令&#xff0c;将版本改为1.6.0&#xff0c;即可解…

Maven的安装以及配置(超级详细版)

前言 至于什么是Maven&#xff0c;大家可以理解为之前的Vue一样&#xff0c;也是通过操控对象映射来使用的 他内部还有很多的插件用于实现对应的功能&#xff0c;例如打包插件&#xff0c;或是测试 maven下载 Maven – Download Apache Maven apache下的开源项目&#xff0…

基于C/C++的MFC的IDC_MFCEDITBROWSE2控件不显示ico问题记录

打开资源文件 *.rc文件 &#xff0c;在最上方添加 #if !defined(_AFXDLL) #include "afxribbon.rc" // MFC ribbon and control bar resources #endif 如下图所示&#xff1a;

SpringBoot security 安全认证(二)——登录拦截器

本节内容&#xff1a;实现登录拦截器&#xff0c;除了登录接口之外所有接口访问都要携带Token&#xff0c;并且对Token合法性进行验证&#xff0c;实现登录状态的保持。 核心内容&#xff1a; 1、要实现登录拦截器&#xff0c;从Request请求中获取token&#xff0c;从缓存中获…

liunx服务器下vim无法:wq解决方案

当你vim某一个文件是&#xff0c;由于其他人在操作&#xff0c;或者上次操作中断&#xff0c;造成的 解决方案&#xff0c;不要&#xff0c;vim -r /etc/****&#xff0c;不然你会得到 正确方案 然后在&#xff0c;直接sudo vim /ect/xxx&#xff0c;还出现第一幅图就直接选…

QML自定义ComboBox组件,支持动态筛选

QtQuick.Controls提供了ComboBox组件&#xff0c;该组件能够满足日常的下拉选择框的需求&#xff0c;但当需要用户在ComboBox中通过输入关键字进行自动匹配时&#xff0c;原生的组件虽然提供了editable属性用于输入关键字&#xff0c;但是匹配内容不弹出下拉框&#xff0c;无法…

winform冒泡排序和快速排序实现

winform冒泡排序和快速排序实现 冒泡排序和快速排序是两种常用的排序算法&#xff0c;可以在Winform程序中实现以提高排序效率。冒泡排序是一种简单但效率较低的排序算法&#xff0c;它通过相邻元素间的比较和交换来实现排序。它的基本思想是每一轮比较相邻两个元素的大小&…

浅析Redis③:命令处理之数据返回Client(下)

写在前面 Redis作为我们日常工作中最常使用的缓存数据库&#xff0c;其重要性不言而喻&#xff0c;作为普通开发者&#xff0c;我们在日常开发中使用Redis&#xff0c;主要聚焦于Redis的基层数据结构的命令使用&#xff0c;很少会有人对Redis的内部实现机制进行了解&#xff0c…

YOLOv8-Segment C++

YOLOv8-Segment C https://github.com/triple-Mu/YOLOv8-TensorRT 这张图像是运行yolov8-seg程序得到的结果图&#xff0c;首先是检测到了person、bus及skateboard(这个是检测错误&#xff0c;将鞋及其影子检测成了滑板&#xff0c;偶尔存在错误也属正常)&#xff0c;然后用方…

4D毫米波雷达——ADCNet 原始雷达数据 目标检测与可行驶区域分割

前言 本文介绍使用4D毫米波雷达&#xff0c;基于原始雷达数据&#xff0c;实现目标检测与可行驶区域分割&#xff0c;它是来自2023-12的论文。 会讲解论文整体思路、输入分析、模型框架、设计理念、损失函数等&#xff0c;还有结合代码进行分析。 论文地址&#xff1a;ADCNe…

Flink实时数仓同步:快照表实战详解

一、背景 在大数据领域&#xff0c;初始阶段业务数据通常被存储于关系型数据库&#xff0c;如MySQL。然而&#xff0c;为满足日常分析和报表等需求&#xff0c;大数据平台采用多种同步方式&#xff0c;以适应这些业务数据的不同存储需求。这些同步存储方式包括离线仓库和实时仓…

nvm 工具使用介绍

目录 1.背景2.nvm介绍3.下载和安装4.配置环境变量5.配置淘宝镜像5.1 方式一&#xff1a;直接执行命令5.2 方式二&#xff1a;修改配置文件 6.常用命令7.总结 下载地址&#xff1a; https://github.com/coreybutler/nvm-windows/releases 1.背景 在工作中&#xff0c;我们可能…

总分类账户和明细分类账户

目录 一. 设置二. 联系与区别三. 平行记账规则 \quad 一. 设置 \quad 根据总分类科目设置总分类账户 根据明细分类科目设置明细分类账户 \quad 二. 联系与区别 \quad \quad 三. 平行记账规则 \quad

【C++11(一)】列表初始化and右值引用

一、 统一的列表初始化 1.1 &#xff5b;&#xff5d;初始化 在C98中&#xff0c;标准允许 使用花括号{}对数组或者结构体元素 进行统一的列表初始值设定 C11扩大了用大括号 括起的列表(初始化列表)的使用范围 使其可用于所有的内置类型和 用户自定义的类型 使用初始化列表时…