蓝桥杯单片机必备知识—–(8)NE555测频

蓝桥杯单片机必备知识—–(8)NE555测频


蓝桥杯单片机必备知识—–(8)NE555测频


NE555测频原理

很多人不知道NE555测频怎么搞,其实很简单。

在这里插入图片描述

已经使用跳线帽将P34和NE555的输出端接在一起了,关乎NE555,有些许数电基础的都明白,NE555就是改变RB3,改变负载电阻,使其输出方波的频率发生改变,其中并不涉及任何对NE555的编程,当然你也没法对其编程。

官方的CT107D的NE555输出频率范围是50-20K赫兹(以上)。

那么我们怎么测频呢。

P34对应的是单片机的定时器0的脉冲输入口,那么我们可以把定时器0设置为计数模式,每接收到NE555的一个脉冲,定时器0计数值就加1,然后500ms读取一次定时器0的计数值,再乘以2大约就是1s内的脉冲,不就是NE555输出的方波的频率吗。

然后按键、LED、数码管等等其余需要使用定时器的就使用定时器1来完成。

主要代码:

//记500ms,乘以2就是频率
if(f_flag)							//500ms
		{
   
			f_flag = 0;
			TR0 = 0;				//关闭定时器0
			FRE = TH0 * 256 + TL0;	//二进制转十进制
			FRE *= 2;				//乘2就为频率
			TH0 = TL0 = 0;			//将计数器的高低位置0
			TR0 = 1;				//打开定时器0
		}

测试结果:

但是自己的显示结果肯定是不够的的,需要结合示波器来判断自己测量是否准确;我的测试结果之前在学校实验室校对过。
在这里插入图片描述

完整代码粘贴:

#include <stc15f2k60s2.h>

#define uchar unsigned char
#define uint unsigned int

uchar tab[] = {
   0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};
uchar dspbuf[] = {
   10,10,10,10,10,10,10,10};
long int FRE;
uchar f_flag;

void load();
void display();
void cls()
{
   
	P2 = (P2 & 0x1f) | 0x80;
	P0 = 0xff;
	P2 = 0x1f;
	
	P2 = (P2 & 0x1f) | 0xa0;
	P0 = 0x00;
	P2 = 0x1f;
}

void main()
{
   
	cls();
	AUXR = 0xc0;
	TMOD = 0x04;
	
	TL1 = 0xcd;
	TH1 = 0xd4;
	TL0 = TH0 = 0;
	
	TR0 = 1;
	TR1 = 1;
	ET1 = 1;
	EA = 1;
	
	while(1)
	{
   
		if(f_flag)
		{
   
			f_flag = 0;
			TR0 = 0;
			FRE = TH0 * 256 + TL0;
			FRE *= 2;
			TH0 = TL0 = 0;
			TR0 = 1;
		}
	}
}

void time1() interrupt 3
{
   
	static unsigned int intr = 0;
	if(++intr == 500){
   intr = 0;f_flag = 1;}
	display();
}

void load()
{
   
	dspbuf[7] = FRE % 10;
	dspbuf[4] = FRE / 1000;
	dspbuf[5] = FRE / 100 - dspbuf[4] * 10;
	dspbuf[6] = FRE / 10 - dspbuf[4] * 100 - dspbuf[5] * 10;
	
}

void display()
{
   
	static unsigned char dspcom = 0;
	
	load();
	
	P2 = (P2 & 0x1f) | 0xe0;
	P0 = 0xff;
	P2 = 0x1f;
	
	P2 = (P2 & 0x1f) | 0xc0;
	P0 = 1<<dspcom;
	P2 = 0x1f;
	
	P2 = (P2 & 0x1f) | 0xe0;
	P0 = tab[dspbuf[dspcom]];
	P2 = 0x1f;
	
	if(++dspcom == 8) dspcom = 0; 
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/100130.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 有哪些优化mysql索引的方式请举例(sqlserver索引优化)

    目录0存储引擎介绍1SQL性能分析2常见通用的JOIN查询SQL执行加载顺序七种JOIN写法3索引介绍3.1索引是什么3.2索引优劣势3.3索引分类和建索引命令语句3.4索引结构与检索原理3.5哪些情况适合建索引3.6哪些情况不适合建索引4性能分析4.1性能分析前提知识4.2Explain使用简介4.3执行计划包含的信息字段解释(重中之重)id(表的读取顺序)select_type(数据读取操作的操作类型)table(显示执行的表名)type(访问类型排列)possible_k

    2022年4月10日
    70
  • HTML实用的网页代码大全[通俗易懂]

    HTML实用的网页代码大全[通俗易懂]【一】:符号&lt;p&gt;段落&lt;/p&gt; &lt;h&gt;标题&lt;/h&gt;(h1—h6) &lt;br&gt;:换行 &lt;hr&gt;:分割线 左右尖括号:&amp;lt;&amp;gt; &amp;表示为:&amp;amp "表示为:&amp;quot; 表格形式&lt;table&gt;

    2022年6月3日
    61
  • PKU A Simple Problem with Integers (段树更新间隔总和)

    PKU A Simple Problem with Integers (段树更新间隔总和)

    2022年1月5日
    39
  • mapreduce-shuffling

    mapreduce-shufflingmap->reducemap和reduce之间的过程,成为shuffling,官方图是这样介绍的.(这样描述不是很准确)MapTask每个map任务都有一个环形内存缓冲区用于存储任务的输出.默认100MB(MRJobConfig.IO_SORT_MB修改)一旦缓冲达到阈值(MRJobConfig.MAP_SORT_SPILL_PERCENT)0.8,后台

    2025年6月26日
    3
  • linux复制文件scp命令,Linux scp命令详解(服务器之间复制文件或目录)

    linux复制文件scp命令,Linux scp命令详解(服务器之间复制文件或目录)scp:服务器之间复制文件或目录一、命令格式:scp[-1246BCpqrv][-ccipher][-Fssh_config][-iidentity_file][-llimit][-ossh_option][-Pport][-Sprogram][[user@]host1:]file1[…][[user@]host2:]file2简易写法:scp[可选参数]…

    2022年8月22日
    6
  • server2003怎么进入安全模式_windows2003server

    server2003怎么进入安全模式_windows2003serverWINDOWS SERVER 2003 上出现 超过响应缓冲区限制 错误,如何解决?Response 对象 错误 ASP 0251 : 80004005超过响应缓冲区限制/py11g/list.asp,行 0此 ASP 页的执行造成响应缓冲区超过其配置限制。我要RESPONSE.WRITE 的数据量的确非常大,但是必须回写的,如何更改设置或者程序 ———————–

    2022年8月31日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号