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

news2024/12/26 11:36:47

一、原理分析

 

3fcf3a0afc2e4370a7b32c35078cf7e4.png

08fac7fdfc774e05a9c73a975e410296.png

        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. 利用定时器/计数器来测量信号的频率。

二、思维导图

5d9df40400174998934b61be5f4fc295.png

定时器设置部分可以参考本栏:蓝桥杯单片机快速开发笔记——定时器-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 函数中初始化系统并进入一个无限循环,不断更新数码管显示。

 

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

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

相关文章

鸿蒙Harmony应用开发—ArkTS-转场动画(组件内转场)

组件内转场主要通过transition属性配置转场参数&#xff0c;在组件插入和删除时显示过渡动效&#xff0c;主要用于容器组件中的子组件插入和删除时&#xff0c;提升用户体验。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记…

leetcode代码记录(移除链表元素

目录 1. 题目&#xff1a;2. 我的代码&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例 1&#xff1a; 输入&#xff1a;head […

学点Java打小工_Day2Day3_一点作业

1 猜数字&#xff08;10次机会&#xff09; 随机生成[1,1000]的一个数&#xff0c;输入你猜的数程序会给出反馈&#xff0c;直到猜对或次数用尽(10次)。 //猜数字 10次机会Testpublic void guessNumber() {Random random new Random();// [0, 1000) 1// [1, 1000]int num ra…

基于 Echarts + Python Flask ,我搭建了一个动态实时大屏监管系统

一、效果展示 1. 动态实时更新数据效果图 2. 鼠标右键切换主题 二、确定需求方案 支持Windows、Linux、Mac等各种主流操作系统&#xff1b;支持主流浏览器Chrome&#xff0c;Microsoft Edge&#xff0c;360等&#xff1b;服务器采用python语言编写&#xff0c;配置好python环…

linux---文件查找

知识点&#xff1a; whereis 可以搜索传统命令的可执行文件路径和说明文档 which 搜索可执行文件 #whereir包含了which locate 在数据库中进行快速查找 find . -name 文件名/文件名要求 #按文件名查找. -iname 文件名 #按文件名查找且…

【史上最全万字mysql进阶语法】

前言&#xff1a; &#x1f49e;&#x1f49e;大家好&#xff0c;书生♡&#xff0c;今天主要和大家分享一下mysql的进阶语法,数据库的分组/分页/排序/子查询以及详细案例&#xff0c;希望对大家有所帮助。 &#x1f49e;&#x1f49e;前路漫漫&#xff0c;希望大家坚持下去&am…

2024年最新Anaconda3 2024版中Jupyter Notebook安装

一、 Anaconda3 2024版下载 1.下载&#xff1a;Free Download | Anaconda 2.等待 解释&#xff1a;默认选择等等下载 &#xff0c;时间可能数分钟 3.安装 解释&#xff1a;打开刚刚下载的Anaconda Navigator&#xff0c;并如图安装低版本&#xff0c;高版本会直接报错 4. …

ES8生产实践——性能压测工具esrally

引言 什么是压测 压测&#xff0c;即压力测试&#xff0c;是指对计算机系统、软件应用或网络服务等进行负载测试&#xff0c;以模拟实际使用场景中的高负载情况&#xff0c;检验系统在压力下的性能、稳定性和可靠性。压测旨在确定系统在正常或极端负载下的性能极限&#xff0…

首个业内DNA存储技术规范发布

在DNA数据存储的检索过程中&#xff0c;采用了三个输入对应一个输出逻辑实现的算法模式来生成数据表示的模式。这一算法模式的设计是为了有效编码和解码存储在DNA分子上的信息。 其中提到的“扰动比例”δ(n)是一个关键概念&#xff0c;它衡量的是在总的细胞数目&#xff08;此…

【MySQL】图形化界面工具DataGrip安装&配置&使用

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

Redis6.0多线程的疑惑解答

1.Redis6.0之前的版本真的是单线程吗&#xff1f; Redis在处理客户端的请求是&#xff0c;包括获取(socket读)、解析、执行、内容返回(socket 写)等都有一个 顺序串行的主线程处理&#xff0c;这就是所谓的"单线程"。但如果严格来讲并不是单线程&#xff0c;除了主线…

2024蓝桥杯每日一题(并查集)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;奶酪 试题二&#xff1a;合并集合 试题三&#xff1a;连通块中点的数量 试题四&#xff1a;网络分析 试题一&#xff1a;奶酪 【题目描述】 现有一块大奶酪&#xff0c;它的高度为 hℎ…

Java SE入门及基础(44)

目录 I / O流(上) 1. 什么是I / O流 过程分析 I / O的来源 Java 中的 I / O流 2. 字节流 OutputStream 常用方法 文件输出流 FileOutputStream 构造方法 示例 InputStream 常用方法 文件输入流 FileInputStream 构造方法 示例 综合练习 字节流应用场景 Java SE文…

命名空间——初识c++

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 经典的Hello Word 起航c关键字c语言的命名冲突问题域作用限定符::命名空间 namespace命名空间定义命名空间的使用1.加命名空间名称及作用域限定符2.使用…

web集群-lvs-DR模式基本配置

目录 环境&#xff1a; 一、配置RS 1、安装常见软件 2、配置web服务 3、添加vip 4、arp抑制 二、配置LVS 1、添加vip 2、安装配置工具 3、配置DR 三、测试 四、脚本方式配置 1、LVS-DR 2、LVS-RS 环境&#xff1a; master lvs 192.168.80.161 no…

数据结构与算法4-冒泡排序

文章目录 1. 认识冒泡排序2. 图示2.1 图示12.2 图示2 3. 代码 1. 认识冒泡排序 双层for循环&#xff0c;每次选出最大的数“浮”到数组的最后面&#xff1b;时间复杂度O( n 2 n^2 n2)&#xff0c;空间复杂度O(1);重复地遍历待排序的数列&#xff0c;一次比较两个元素&#xff…

HCIP配置实验(路由配置)

要求&#xff1a; 1、R6为ISP&#xff0c;接口IP地址均为公有地址&#xff0c;该设备只能配置IP地址&#xff0c;之后不能冉对其进行任何配置; 2、R1-R5为局域网&#xff0c;私有IP地址192.168.1.0/24;请合理分配; 3、R1、R2、R4&#xff0c;各有两个环回IP地址; R5, R6各有一个…

小字辈[天梯赛]

文章目录 题目描述思路AC代码 题目描述 思路 深度优先搜索 具体流程 1.读入每个人的祖先&#xff0c;标记辈分最高的老祖宗对应的下标pos 2.从pos开始dfs&#xff0c;每次判断当前遍历的深度&#xff0c;如果>原来的深度&#xff0c;更新&#xff0c;并将存储最小辈分的数组…

【C语言】文件操作揭秘:C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为【C语言】文件操作揭秘&#xff1a;C语言中文件的顺序读写、随机读写、判断文件结束和文件缓冲区详细解析【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 欢迎来到本篇博客&…

Linux编程4.9 网络编程-建立连接

1、TCP的连接与断开 三次握手与四次挥手 2、服务器端并发性处理 2.1 多进程模型 一个父进程&#xff0c;多个子进程父进程负责等待并接受客户端连接子进程: 完成通信&#xff0c;接受一个客户端连接&#xff0c;就创建一个子进程用于通信。 2.2 多线程模型 多线程服务器是…