当前位置: 首页 > news >正文

51单片机制作数字频率计

文章目录

  • 简介
  • 设计思路
  • 工作原理
  • Proteus软件仿真
  • 软件程序
  • 实验现象
  • 测量误差和范围
  • 总结

简介

数字频率计是能实现对周期性变化信号频率测量的仪器。传统的频率计通常是用很多的逻辑电路和时序电路来实现的,这种电路一般运行较慢,而且测量频率的范围较小。这篇文章介绍以单片机STC89C52为核心,通过对输入的脉冲进行计数,运用单片机的运算和控制功能并采用数码管将所测频率显示出来。软件方面采用C语言编程,运用定时计数器测量频率,再调显示函数,将测得的结果显示在数码管上。系统简单可靠、操作简易,能基本满足一般情况下的需要。既保证了系统的测频精度,又使系统具有较好的实时性。

设计思路

本次设计主要分成两大方面:硬件电路的设计和软件程序的设计。硬件电路方面,采用STC89C52单片机最小系统,便可实现要求。程序的设计方面,采用C语言编写程序。其整体框图如图1所示:
在这里插入图片描述

工作原理

此数字频率计是利用单片机的P3.4(T0)引脚作为被测矩形波信号输入端,且单片机晶振FOSC=12MHZ,当外部脉冲信号,即被测矩形波信号从P3.4进入单片机,同时启动定时器T0和计数器T1,T0是工作在计数状态下,对输入的频率信号进行计数,工作在计数状态下的T0的最大计数值为65535则:T0的最大计数频率为65535Hz,T1是工作在定时状态下,每定时1秒,就停止T1的计数,而从T1的计数单元中读取的计数值在进行数据处理后,送到数码显示管显示出来,因为T1工作在定时状态下的最大定时时间为65ms,达不到1秒的定时,所以采用50ms,共定时20次,即可完成1秒的定时功能。

Proteus软件仿真

如图所示,是在proteus软件数字频率计的仿真。
在这里插入图片描述
将要测量的脉冲输入单片机的P3.4引脚。
在这里插入图片描述

软件程序

 #include "reg52.h"
sbit L1 = P1^0;
sbit S1 = P3^2;
unsigned char code SMG_duanma[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};
unsigned char count = 0;unsigned int frequency = 0;
unsigned char start=1;
unsigned char flag = 0;
void InitTimer()	  
{TMOD = 0x15;  //T1定时,T0计数,TH1 = (65535 - 50000) / 256;TL1 = (65535 - 50000) % 256;TH0 = 0x00;TL0 = 0x00;ET1 = 1;ET0 = 1;EA = 1;TR1 = 1;TR0 = 1;}unsigned int i = 0;
void ServiceTimer1() interrupt 3
{TH1 = (65535 - 50000) / 256;TL1 = (65535 - 50000) % 256;i++;  if(i==20){i = 0;TR0=0; //停止计数TR1=0; //停止定时frequency=(TH0*256+TL0); //求出频率值 就是1秒内脉冲次数TH0=0x00; //计数值清零TL0=0x00;TH1 = (65535 - 50000) / 256;TL1 = (65535 - 50000) % 256;start=1; //启动定时器开启变量}
}void Init_INT0()
{IT0 = 1;EX0 = 1;EA = 1;
}void ServiceINT0() interrupt 0
{	if(flag == 0){	frequency = 0;}if(flag!=0)frequency++;flag = 1;}void DisplaySMG_Bit(unsigned char value, unsigned char pos)
{P0 = 0xff;P2 = 0x01 << pos; P0 = value;
}void DelaySMG(unsigned int t)
{while(t--);
}void Display_Dynamic()
{DisplaySMG_Bit(SMG_duanma[frequency/100000],0);	       DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%100000/10000],1);		 DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%10000/1000],2);			 DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%1000/100],3);	DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%100/10],4);			 DelaySMG(500);DisplaySMG_Bit(SMG_duanma[frequency%100%10],5);	DelaySMG(500);}void Delay(unsigned char t)
{while(t--){Display_Dynamic();}
}void DelayK(unsigned char t)
{while(t--);
}void ScanKeys_Alone()
{if(S1 == 0){DelayK(100);if(S1 == 0){TR0=0; //停止计数TR1=0; //停止定时if(flag == 0){frequency = 0;}if(flag!=0)frequency++;flag = 1;while(!S1);}}
}
void main()
{	InitTimer();Init_INT0();while(1){ 	 ScanKeys_Alone();if(start==1){TR0=1; //启动定时器TR1=1; //启动计数器start=0; //关闭启动变量位 保证1秒时间}Display_Dynamic();Delay(200);if(flag == 1)				                      {start = 0;}}
}

实验现象

双击器件DCLOCK对外部输入矩形脉冲的频率进行设置:
50hz:
在这里插入图片描述
在这里插入图片描述
100hz:
在这里插入图片描述

在这里插入图片描述
500hz:
在这里插入图片描述
在这里插入图片描述
1000hz:
在这里插入图片描述
在这里插入图片描述

测量误差和范围

当测频时,启动定时计数器时,若从T0(P3.4)输入矩形波刚好为高电平,而当1s定时到时刚好为高电平时,此时测得的频率值最准确。若启动定时计数器时,输入的矩形波刚好处于低电平,而当定时1s到时矩形波刚好要发生负跳变时,此时测得的频率误差最大。定时计数器的工作方式选择与初值的赋予不一定精准,容易引起误差。定时计数器的工作方式选择不同,最后的结果也会有所差异。工作方式2相比于工作方式0和工作方式1误差更小。其次,采用中断或查询的方式也会影响实验结果。采用查询方式的误差比采用中断误差更小。

电子计数器测频法主要是将被测频率信号加到计数器的计数输入端,然后让计数器在标准时间 Ts1 内进行计数,所得的计数值 N1。与被测信号的频率 fx1 的关系如下:
在这里插入图片描述
主要误差源是由于计数器只能进行整数计数而引起的±1 误差:
在这里插入图片描述
工作在计数状态下的16位计数器T0的最大计数值为65535,理论上可以测的频率范围是0-65535hz,实际仿真测试最大为65.5KHz,测量显示值为65530hz,误差为0.04%
在这里插入图片描述
经过测试在一定误差允许和测量范围内,数字频率计可以正常工作。下图是基于上述方案的数字频率计原理图设计参考。可实现下面功能:
(1)将外部矩形脉冲输入T0引脚,即将外部输入脉冲用导线连接到P3.4引脚,可以做外部脉冲输入数字频率计。
(2)扩展功能:当按下按键,停止对外部矩形脉冲计数,改为单脉冲计数。当按下一次按键,计数值加1,并显示到数码管上。(PS:LED可作为其它功能扩展使用)。

在这里插入图片描述

总结

频率的测量可以采用数字逻辑电路来实现,也可以采用单片机进行控制。前者不仅实现的电路复杂,而且测量频率的范围较小,而利用单片机的定时器可以很方便的进行信号频率的测量,只需要在电脑上编写程序,然后在相应的显示电路进行显示就可以了,可以使用STC89C51单片机的定时器、计数器的定时和计数功能,外部扩展6位LED数码管,累计每秒进入单片机的外部脉冲个数,用LED数码管显示出来,实现基于单片机数字频率计的制作。

相关文章:

51单片机制作数字频率计

文章目录 简介设计思路工作原理Proteus软件仿真软件程序实验现象测量误差和范围总结 简介 数字频率计是能实现对周期性变化信号频率测量的仪器。传统的频率计通常是用很多的逻辑电路和时序电路来实现的&#xff0c;这种电路一般运行较慢&#xff0c;而且测量频率的范围较小。这…...

java中强引用、软引用、弱引用、虚引用的区别是什么?

Java中的引用类型主要分为强引用、软引用、弱引用和虚引用&#xff0c;它们之间的区别主要体现在垃圾回收的行为上。 强引用&#xff08;Strong Reference&#xff09;&#xff1a;这是使用最普遍和默认的引用类型。如果一个对象具有强引用&#xff0c;那么垃圾回收器就永远不会…...

springboot -事务管理

事务 概念 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败。 操作 开启事务&#xff1a; start transaction / begin提交事务&#xff1a;commit回滚事务&#xff1a; rollback 注解 Transactional …...

商城系统通过Kafka消息队列,实现订单的处理和状态更新

以下是一个简单的Spring Boot应用程序示例&#xff0c;演示如何使用Kafka实现订单的处理和状态更新。 首先&#xff0c;我们创建一个名为“order”的topic&#xff0c;在application.yaml配置文件中添加Kafka的配置&#xff1a; spring:kafka:bootstrap-servers: localhost:9…...

IntelRealSense深度相机D455在ROS1运行中的消息内容

IntelRealSense深度相机D455在ROS1运行中的消息内容 通过下面命令所有相关信息通过ros topic的方式发布出去rosnode查看rqt_graph查看rostopic查看通过下面命令直接查看RVIZ中点云信息rosnode查看rqt_graph查看rostopic查看 Physical Port:&#xff1a; /sys/devices/pci0000:0…...

公有云迁移研究——AWS Translate

大纲 1 什么是Translate2 Aws Translate是怎么运作的3 Aws Translate和Google Translate的区别4 迁移任务4.1 迁移原因 5 Aws Translate的Go demo6 迁移中遇到的问题6.1 账号和权限问题&#xff1a;6.2 小语种 1 什么是Translate Translate是一种文本翻译服务&#xff0c;它使…...

【laBVIEW学习】4.声音播放,自定义图标,滚动条设置,保存参数以及恢复参数

一。声音播放&#xff08;报错&#xff0c;未实现&#xff09; 1.报错4810 2.解决方法&#xff1a; 暂时未解决。 二。图片修改 1.目标&#xff1a;灯泡---》自定义灯泡 2.步骤&#xff1a; 1.右键点击--》自定义运行 表示可以制作自定义类型 2.右键--》打开自定义类型 这样就…...

《论文阅读》使用条件变分自动编码器学习神经对话模型的语篇水平多样性 2017 ACL

《论文阅读》使用条件变分自动编码器学习神经对话模型的语篇水平多样性 2017 ACL 前言简介相关知识Stochastic Gradient Variational BayesMultivariate Gaussian DistributionIsotropic Gaussian DistributionReparameterization Trickprior network & posterior network …...

【win32_003】不同字符集下的通用字符串语法TCHAR、TEXT、PTSTR、PCTSTR

TCHAR 通用 根据项目属性是否使用Unicode字符集&#xff0c;TCHAR被解释为CHAR(char)或WCHAR(wchar_t)数据类型。 TCHAR a ‘A’ ; TCHAR arr [] TEXT(“AA”); TCHAR arr [100] TEXT(“AA”); TCHAR *pstr TEXT(“AA”); TEXT宏 #ifdef UNICODE #define __TEXT(quote) L#…...

《漫长的等待》—— 读后感

前几天下班地铁上&#xff0c;人太多&#xff0c;看技术书籍看不进去&#xff0c;翻阅微信读书&#xff0c;看到了这本书&#xff0c;看了几章免费的章节&#xff0c;因为后续需要买会员就没有继续读&#xff0c;但是这几天偶尔还是会想到书籍中的情节&#xff0c;所以今天充了…...

基于ROPNet项目训练modelnet40数据集进行3d点云的配置

项目地址&#xff1a; https://github.com/zhulf0804/ROPNet 在 MVP Registration Challenge (ICCV Workshop 2021)&#xff08;ICCV Workshop 2021&#xff09;中获得了第二名。项目可以在win10环境下运行。 论文地址&#xff1a; https://arxiv.org/abs/2107.02583 网络简介…...

力扣215. 数组中的第K个最大元素

堆排序 前言 面试中著名的 TopK 排序&#xff1b;常见的解法有冒泡排序、堆排序&#xff1b;更深入的思路可以参考&#xff1a;拜托&#xff0c;面试别再问我TopK了&#xff01;&#xff01;&#xff01;使用了堆排序的算法&#xff0c;关于堆可以参考&#xff1a;堆数据结构的…...

轻量封装WebGPU渲染系统示例<40>- 多层材质的Mask混合(源码)

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/MaskTextureEffect.ts 当前示例运行效果: 两层材质效果: 三层材质效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下&#xff1a; export c…...

程序员的实用网站导航与推荐

当你遇到问题时 Stack Overflow&#xff1a;订阅他们的每周新闻和任何你感兴趣的主题Google&#xff1a;全球最大搜索引擎必应&#xff1a;在你无法使用Google的时候CSDN&#xff1a;聊胜于无AI导航一号AI导航二号 新闻篇 OSCHINA&#xff1a;中文开源技术交流社区 针对初学…...

上午面了个腾讯拿 38K 出来的,让我见识到了基础的天花板

今年的校招基本已经进入大规模的开奖季了&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好…...

【halcon】C# halcon 内存暴增

1 读取图片需要及时手动释放 一个6M的图片通过halcon进行加载&#xff0c;大约会消耗200M的内存&#xff0c;如果等待GC回收&#xff0c;而你又在不停的读取图片&#xff0c;你的内存占用&#xff0c;将在短时间内飙升。 2 halcon控件显示图片需要清空。 /// <summary>…...

LeetCode130. Surrounded Regions

文章目录 一、题目二、题解 一、题目 Given an m x n matrix board containing ‘X’ and ‘O’, capture all regions that are 4-directionally surrounded by ‘X’. A region is captured by flipping all O’s into X’s in that surrounded region. Example 1: Input…...

【实战教程】PHP如何轻松对接腾讯云COS,实现文件上传下载?

腾讯云提供了一系列丰富的云服务&#xff0c;其中包括对象存储&#xff08;Cloud Object Storage&#xff0c;简称COS&#xff09;&#xff0c;它是一种高可靠性、可扩展性强的云存储服务。本文将介绍如何使用PHP对接腾讯云COS存储服务&#xff0c;实现文件的上传和下载功能。 …...

pytorch学习10-网络模型的保存和加载

系列文章目录 pytorch学习1-数据加载以及Tensorboard可视化工具pytorch学习2-Transforms主要方法使用pytorch学习3-torchvisin和Dataloader的使用pytorch学习4-简易卷积实现pytorch学习5-最大池化层的使用pytorch学习6-非线性变换&#xff08;ReLU和sigmoid&#xff09;pytorc…...

SQL Server 2016(分离和附加数据库)

1、实验环境。 基于上一个实验《SQL Server&#xff08;创建数据库&#xff09;》 2、需求描述。 class数据库的数据文件和事务日志文件都位于C:\db_class目录下。现在需要把class数据库的数据文件和事务日志文件分开存放&#xff0c;数据文件class.mdf存放于原位置&#xff0…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Qt Widget类解析与代码注释

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码&#xff0c;写上注释 当然可以&#xff01;这段代码是 Qt …...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...