蓝桥杯单片机快速开发笔记——NE555测频

一、原理分析

        NE555作为一种多功能集成电路,在信号发生和频率测量方面具有广泛的应用。通过合理配置和连接外部元件,可以实现不同类型的信号发生和频率测量功能。

原理:

  1. 信号发生器

    • NE555可以配置为多种不同的振荡器电路,包括单稳态(单脉冲)和多谐振荡器(方波、正弦波等)。
    • 在单稳态模式下,NE555可以生成一个脉冲信号,当输入触发脉冲时,输出会产生一个固定宽度的脉冲。
    • 在多谐振荡器模式下,NE555可以生成稳定的方波信号,其频率由外部电路元件(电阻和电容)决定。
  2. 频率测量

    • NE555可以用作频率测量器的基础元件,通过测量NE555输出的方波信号的周期来计算频率。
    • 频率测量的原理是利用NE555输出的方波信号的周期与频率成反比的关系,通过测量周期来计算频率。

应用:

  1. 信号发生器

    • NE555可以用于产生各种频率的信号,常用于音频信号发生器、脉冲信号发生器等。
    • 在电子实验和原型设计中,NE555经常被用作简单的信号发生器,用于测试和验证电路功能。
  2. 频率测量

    • NE555可以用作简单的频率测量器,通过测量NE555输出的方波信号的周期来计算频率。
    • 频率测量在电子实验、通信领域和控制系统中具有广泛的应用,用于测量信号的频率和周期。

考点分析

  1. 使用短路环将J13中的NAL与P34引脚短接,将NE555产生的信号输入到单片机的P34引脚。

  2. NE555电路是一个信号发生器,其输出信号连接到单片机的P34引脚。

  3. 通过调节Rb3可调电位器,可以改变该信号的频率大小。

  4. 利用定时器/计数器来测量信号的频率。

二、思维导图

定时器设置部分可以参考本栏:蓝桥杯单片机快速开发笔记——定时器-CSDN博客

三、示例框架

unsigned int dat_f = 0;
unsigned int count_f = 0;
unsigned char count_t = 0;

#define TSMG 500

void delay_smg(unsigned int t)
{
	while(t--);
}

void hc573(unsigned char channel, unsigned char dat)
{
	P2 = (P2 & 0x1f) | 0x00;
	P0 = dat;
	
	switch(channel)
	{
		case 4:
			P2 = (P2 & 0x1f) | 0x80;   //LED  0亮
		break;
		case 5:
			P2 = (P2 & 0x1f) | 0xa0;   //蜂鸣器、继电器  1开
		break;
		case 6:
			P2 = (P2 & 0x1f) | 0xc0;   //数码管位选  1亮
		break;
		case 7:
			P2 = (P2 & 0x1f) | 0xe0;   //数码管段选  0亮
		break;
		
	}
	
	P2 = (P2 & 0x1f) | 0x00;
	
}

code unsigned char Seg_Table[] = 
{
0xc0, //0
0xf9, //1
0xa4, //2
0xb0, //3
0x99, //4
0x92, //5
0x82, //6
0xf8, //7
0x80, //8
0x90, //9
0x88, //A
0x83, //b
0xc6, //C
0xa1, //d
0x86, //E
0x8e //F
};

void smg_all(unsigned char dat)
{
	hc573(6, 0xff);
	hc573(7, dat);
}

void smg_bit(unsigned char pos, unsigned char dat)
{
	hc573(6, 0x01 << pos);
	hc573(7, dat);
	delay_smg(TSMG);
	hc573(6, 0x01 << pos);
	hc573(7, 0xff);
}

void smg_display()
{
	if(dat_f > 99999)
	{
		smg_bit(2, Seg_Table[(dat_f / 100000) % 10]);
	}
	
	if(dat_f > 9999)
	{
		smg_bit(3, Seg_Table[(dat_f / 10000) % 10]);
	}
	
	if(dat_f > 999)
	{
		smg_bit(4, Seg_Table[(dat_f / 1000) % 10]);
	}
	
	if(dat_f > 99)
	{
		smg_bit(5, Seg_Table[(dat_f / 100) % 10]);
	}
	
	if(dat_f > 9)
	{
		smg_bit(6, Seg_Table[(dat_f / 10) % 10]);
	}
	
	if(dat_f > 0)
	{
		smg_bit(7, Seg_Table[dat_f % 10]);
	}
}


void init_sys()
{
	hc573(5, 0x00);
	smg_all(0xff);
	Init_Timer();
}

void Init_Timer()
{
	TH0 = 0xff;        
	TL0 = 0xff;
	
	TH1 = (65536 - 50000) / 256;        
	TL1 = (65536 - 50000) % 256;
	
	TMOD = 0x16;     //0x16 = 0001 0110
	                 //定时器1用方式1,16位定时器;
	                 //定时器0用方式2,自动重装载8位计数器
	
    ET0 = 1;
    ET1 = 1;
	EA = 1;
	
	TR0 = 1;
	TR1 = 1;
}

void Service_T0() interrupt 1
{
	count_f++;
}
 
void Service_T1() interrupt 3
{
    TH1 = (65536 - 50000) / 256;        
	TL1 = (65536 - 50000) % 256;
	count_t++;
	if(count_t == 20)
	{
		dat_f = count_f;
		count_f = 0;
		count_t = 0;
	}
}

void main()
{
	init_sys();
	while(1)
	{
		smg_display();
	}
}

        通过NE555产生的信号频率来测量并显示在数码管上,通过定时器来计算频率并更新显示。

  1. 定义了全局变量 dat_fcount_f 和 count_t,分别用于存储数据、计数和时间。

  2. 定义了宏 TSMG 用于设置数码管显示的延时时间。

  3. 实现了 delay_smg 函数用于实现延时功能。

  4. 实现了 hc573 函数用于控制数码管、LED、蜂鸣器等外设的显示和控制。

  5. 定义了数码管显示的编码表 Seg_Table,包含了0到F的显示编码。

  6. 实现了 smg_allsmg_bit 和 smg_display 函数用于数码管的全显、位显和数据显示。

  7. 初始化系统的函数 init_sys 中设置了初始状态和调用了 Init_Timer 函数初始化定时器。

  8. Init_Timer 函数初始化了定时器0和定时器1,并设置了定时器的工作模式和中断使能。

  9. 定时器0中断服务函数 Service_T0 用于计数。

  10. 定时器1中断服务函数 Service_T1 用于定时并更新数码管显示的数据。在每20次中断后,将计数值赋给 dat_f,并清零计数器。

  11. 在 main 函数中初始化系统并进入一个无限循环,不断更新数码管显示。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【你也能从零基础学会网站开发】Web建站之jQuery进阶篇 jQuery常见属性和方法概述与使用

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;程序猿、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 jQuery创建新的…

Minio快速入门

Minio快速入门 1.1 Minio使用 1.1.1 Minio介绍 目前可用于文件存储的网络服务选择也有不少&#xff0c;比如阿里云OSS、七牛云、腾讯云等等&#xff0c;可是收费都有点小贵。为了节约成本&#xff0c;很多公司使用MinIO做为文件服务器。 官网&#xff1a;https://www.minio…

【教学类-44-06】20240318 0-9数字描字帖 A4横版整页(宋体、黑体、文鼎虚线体)

背景需求&#xff1a; 大四班老师要以前的姓名描字帖 【教学类-35-02】20231207大班姓名描字帖&#xff1a;A4单面3*10个姓名&#xff0c;双面共60个名字-CSDN博客文章浏览阅读402次&#xff0c;点赞5次&#xff0c;收藏8次。【教学类-35-02】20231207大班姓名描字帖&#xf…

前端工程化(二)(精品、面试必备基础)(春招、秋招)

目录 什么是模块化?CommonJS规范和Node关系模块化的核心exports 导出 & require 导入模块加载(持续更新) 什么是模块化? 事实上模块化开发最终的目的是将程序划分成一个个小的结构&#xff1b; 这个结构中编写属于自己的逻辑代码&#xff0c;有自己的作用域&#xff0c;…

Python爬虫 Day1

要注意看网页的请求方式是request还是get 一、小型爬虫 &#xff08;爬百度首页&#xff09; from urllib.request import urlopen url "https://www.baidu.com" resp urlopen(url) print(resp.read().decode(utf-8)) print("over!") //&#xff01;&am…

软件杯 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

HarmonyOS鸿蒙开发常用4种布局详细说明

介绍一下鸿蒙开发常用4种布局 1、线性布局 2、层叠布局 3、网格布局 4、列表布局 ​1. 线性布局&#xff08;Column/Row&#xff09; 线性布局&#xff08;LinearLayout&#xff09;是开发中最常用的布局&#xff0c;通过线性容器Row&#xff08;行&#xff09;和Column&…

linux驱动开发面试题

1.linux中内核空间及用户空间的区别&#xff1f; 记住“22”&#xff0c;两级分段两级权限。 例如是32位的机器&#xff0c;从内存空间看&#xff1a;顶层1G是内核的&#xff0c;底3G是应用的&#xff1b;从权限看&#xff1a;内核是0级特权&#xff0c;应用是3级特权。 2.用…

关于Ubuntu虚拟机突然上不了网的问题

今天刚重新把Ubuntu虚拟机下回来准备大干一场&#xff0c;结果去吃饭回来虚拟机就上不去网了&#xff0c;具体体现为右上角没有网络的图标&#xff0c;下图是有网络的情况&#xff0c;废话不多说&#xff0c;直接给出解决方案&#xff1a;博客在此 我就是运行了这三行代码就成功…

记一些有关Element Plus的样式修改

先记一个放着&#xff0c;后续慢慢补充。。。 一个 Vue 3 UI 框架 | Element Plus Radio 单选框 1、去除radio的圆圈 .box-radio {/deep/ .el-radio__input {display: none;} }

jupyter notebook 突然莫名奇妙的白屏

jupyter notebook 突然莫名奇妙的白屏 事件背景&#xff1a; 最近在折腾openai&#xff0c;哎&#xff0c;一言难尽&#xff0c;使用的是conda管理python版本的切换&#xff0c;使用jupyter notebook来运行python程序&#xff0c;其实PyCharm也行&#xff0c;但是&#xff0c;…

python二级备考(2)-简单应用题

第1套 使用turtle库的turtle. right()函数和turtle.fd()函数绘制一个菱形&#xff0c;边长为200像素&#xff0c;4个内角度数为2个60度和2个120度 键盘输入一组人员的姓名、性别、年龄等信息&#xff0c;信息间采用空格分隔&#xff0c;每人一行&#xff0c;空行回车结束录入&a…

【基于HTML5的网页设计及应用】——改变文字和背景颜色

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

如何通过蓝牙获取手机时间同步时钟RTC万年历走ble或者edr经典蓝牙

一、功能简介 KT6368A支持连接手机获取手机的时间信息&#xff0c;可以同步时钟 无需安装任何app&#xff0c;直接使用系统蓝牙即可实现 走的就是edr的经典蓝牙 同时它不影响音频蓝牙&#xff0c;还能保持低功耗的运行 实现的方式就是手机连接好蓝牙芯片KT6368A&#xff0…

Jz32从上往下打印二叉树

//add()和remove()方法在失败的时候会抛出异常(不推荐) // 用offer 和poll 替代 import java.util.ArrayList; import java.util.*; /** public class TreeNode {int val 0;TreeNode left null;TreeNode right null;public TreeNode(int val) {this.val val;}} */ public …

NSSCTF 403,444,2145,3845,404,445

[SWPUCTF 2021 新生赛]简简单单的逻辑 py文件&#xff0c;使用pycharm打开进行分析 其中&#xff0c;hex()[2:]&#xff1a;将十进制转化为十六进制 zfill(2)&#xff1a;位数不足2&#xff0c;前补0 这里即将flag的ASCII码与key进行异或&#xff0c;再将每位转化为十六进制…

大数据 - Spark系列《十四》- spark集群部署模式

Spark系列文章&#xff1a; 大数据 - Spark系列《一》- 从Hadoop到Spark&#xff1a;大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 大数据 - Spark系列《…

kubernetes学习总结

kubernetes学习大纲 kubernetes的发展历程 Kubernetes的组件和架构 Kubernetes API对象基本组成 Kubernetes中的yml详解1 Kubernetes中的yml详解2 Deployment与Service

【GIS系列】GeoTools简介及工具类分享

本文将对GeoTools相关概念进行介绍&#xff0c;同时会给大家分享我工作中用到的工具类及使用方法。 作者&#xff1a;后端小肥肠 目录 1.前言 2. GeoTools简介 3. Geotools使用示例 3.1. 开发环境搭建 3.1.1. 所需版本和工具 3.1.2. pom依赖 3.1.3. 示例代码 4. 工具类…