蓝桥杯单片机必备知识—–(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; 
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Hystrix原理与实战

    Hystrix原理与实战转:Hystrix原理与实战背景分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个基础服务。如下图,对于同步调用,当库存服务不可用时,商品服务请求线程被阻塞,当有大批量请求调用库存服务时,最终可能导致整个商品服务资源耗尽,无法继续对外提供服务。并且这种不可用可能沿请求调用链向上传递,这种现象被称为雪崩效应。雪崩效应常见场景硬件故障:如服务器宕机,机房断电,光…

    2022年10月23日
  • IplImage中的widthStep大小计算及原理[通俗易懂]

    IplImage中的widthStep大小计算及原理[通俗易懂]一直以为IplImage结构体中的widthStep元素大小等于width*nChannels,大错特错!查看OpenCV2.1的源码,在src/cxcore/cxarray.cpp文件中,找到cvInitImageHeader函数,函数中对widthStep大小赋值如下:image->widthStep=(((image->width*image->nChannels*

  • 常见的数据交换方式有电路交换,报文交换_电路交换网络有哪些

    常见的数据交换方式有电路交换,报文交换_电路交换网络有哪些Q:如何实现数据通过网络核心从源主机到达目的主机(互联的路由器网络)A:采用的方法:数据交换网络结构包括网络边缘、接入网络和网络核心网络核心主要解决的问题就是将源主机发送数据送达目的主机对于一

  • pycharm2022.01.13怎么激活_在线激活[通俗易懂]

    (pycharm2022.01.13怎么激活)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1PA3AFINM4-eyJsaWNlb…

  • PyCharm汉化之后,点击设置没反应,完美解决方法[通俗易懂]

    PyCharm汉化之后,点击设置没反应,完美解决方法[通俗易懂]请先检查下pycharm的安装目录lib下是不是有中文汉化包resources_cn.jar有过有的话建议:1.更换一个汉化包或者将原来的resources_en.jar也放进lib目录下2.将中文汉化包resources_cn.jar删除,只留下原版的resources_en.jar…

  • goland 2021激活码(破解版激活)

    goland 2021激活码(破解版激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

发表回复

您的电子邮箱地址不会被公开。

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