[蓝桥杯单片机]学习笔记——555定时器与频率测量

这篇具有很好参考价值的文章主要介绍了[蓝桥杯单片机]学习笔记——555定时器与频率测量。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、原理部分

1、什么是555定时器

2、频率测量 

3、频率测量相关配置

二、程序案例


一、原理部分

1、什么是555定时器

555定时器是一种集成电路芯片,常被用于定时器、脉冲产生器和振荡电路。555可被作为电路中的延时器件、触发器或起振元件。而在蓝桥杯的板子上,555定时器是一个信号发生电路,通过调节电位器Rb3可产生频率不同的方波

 

[蓝桥杯单片机]学习笔记——555定时器与频率测量

2、频率测量 

 NET_SIG为方波信号输出引脚,通过接线帽可以将NET_SIG与P3.4(定时器0计数器输入引脚)相连。则可以使用定时器0进行计数,定时器1进行定时,当定时器1经过1秒后,定时器0的计数数值即为555定时器的信号频率。

[蓝桥杯单片机]学习笔记——555定时器与频率测量

3、频率测量相关配置

频率测量使用到两个定时器,这个可以查看前面写的的定时器原理及其应用。 频率测量需要编写三个函数,分别是两个定时器初始化的初始化函数,定时器0的中断服务函数,定时器1的中断服务函数:

(1)定时器初始化函数:

①配置工作模式,TMOD=0x16,高4位为0001,即定时器T1为定时模式,且为16位不可重装载模式,低4位为0110,即定时器T0为计数模式,且为8位自动装载模式

②设置定时器初始值

TH0=0xff;

TL0=0xff;

定时器0计数初始值为255,则每次有一个信号,就触发中断

TH1=(65535-50000+1)/256;
TL1=(65535-50000+1)%256;

定时器1定时时长为50ms

③使能定时器中断,使能总中断

ET0=1;

ET1=1;

EA=1;

④使能定时器

TR0=1;
TR1=1;

(2)定时器0中断服务函数(中断号为1):

①count_f++;(信号次数加1)

(3)定时器1中断服务函数(中断号为3):

①对THx和TLx重新赋值

TH1=(65535-50000+1)/256;
TL1=(65535-50000+1)%256;

②定时逻辑处理

count_t++;

if(count_t==20)
    {
        dat_f=count_f;
        count_f=0;
        count_t=0;
    }

定时50ms*20即1秒后,将频率计数值赋给dat_f,记录下555定时器频率,再将频率计数值count_f以及定时计数值count_t清零,重新测量频率

 

此时获得的dat_f即为555定时器输出信号的频率

二、程序案例

例子:测量555定时器,并将定时器频率显示在数码管上 

#include "reg52.h"

unsigned char code SMG_duanma[18]=
	{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,
	0x90,0x88,0x80,0xc6,0xc0,0x86,0x8e,0xbf,0x7f};//定时器断码表

/*****************************************************************
*@Function: SelectHC573     //
*@Description: 锁存器选择    //
*@Input:channel:通道选择 //
*@Output:无 //
*@Return: 无 //
*@Others: 无 //
/*****************************************************************/
	
void SelectHC573(unsigned char channel)
{
	switch(channel)
	{
		case 4:
			P2=P2&0x1f|0x80;
		break;
		case 5:
			P2=P2&0x1f|0xa0;
		break;
		case 6:
			P2=P2&0x1f|0xc0;
		break;
		case 7:
			P2=P2&0x1f|0xe0;
		break;
		case 0:
			P2=P2&0x1f|0x00;
		break;
	}		
}

/*****************************************************************
*@Function:DisplaySMG_Bit      //
*@Description:单个数码管显示     //
*@Input:value:数码管显示的内容
*       pos:数码管显示的位置      //
*@Output:无 //
*@Return:无  //
*@Others:无  //
/*****************************************************************/
void DisplaySMG_Bit(unsigned char value,unsigned char pos)
{
	SelectHC573(6);
	P0=0x01<<pos;
	SelectHC573(7);
	P0=value;
}

/*****************************************************************
*@Function: Delay_SMG     //
*@Description: 数码管延时函数    //
*@Input:t:延时长短 //
*@Output:无 //
*@Return:无  //
*@Others:无  //
/*****************************************************************/
void Delay_SMG(unsigned char t)
{
	while(t--);
}

/*****************************************************************
*@Function:InitTimer      //
*@Description: 定时器初始化函数    //
*@Input:无 //
*@Output:无 //
*@Return:无  //
*@Others: 无 //
/*****************************************************************/
void InitTimer()
{
	
	TH0=0xff;
	TL0=0xff;
	
	//定时器1用作定时,时间为50ms
	TH1=(65535-50000+1)/256;
	TL1=(65535-50000+1)%256;
	
	TMOD=0x16;    //高四位0001,低四位0110,定时器1做定时,16位不自动重装载;定时器0作计数,8位重装
	
	ET0=1;//使能定时器0中断
	ET1=1;//使能定时器1中断
	EA=1;//使能总中断
	
	TR0=1;//开启定时器0
	TR1=1;//开启定时器1
}

unsigned int count_f=0;//用于频率计数
unsigned int dat_f=0;//用于频率记录
unsigned char count_t=0;//用于定时器定时

/*****************************************************************
*@Function:ServiceT0      //
*@Description:定时器0中断服务函数     //
*@Input:无 //
*@Output:无 //
*@Return:无  //
*@Others:无  //
/*****************************************************************/
void ServiceT0() interrupt 1
{
	count_f++;//每有一个信号,定时器0溢出进入中断,频率计数count_f加1
}

/*****************************************************************
*@Function:ServiceT1      //
*@Description:定时器1中断服务函数     //
*@Input:无 //
*@Output:无 //
*@Return:无  //
*@Others:无  //
/*****************************************************************/
void ServiceT1() interrupt 3
{
	TH1=(65535-50000+1)/256;//重载定时器1计数初始值
	TL1=(65535-50000+1)%256;
	
	count_t++;//定时器定时加1
	if(count_t==20)//如果定时器1溢出20次,即50ms*20=1秒后,将count_f赋给dat_f,再将count_f,count_t清零,重新计数
	{
		dat_f=count_f;
		count_f=0;
		count_t=0;
	}
}

/*****************************************************************
*@Function:Display_ALL      //
*@Description:全部数码管显示     //
*@Input:value:显示的内容 //
*@Output:无 //
*@Return: 无 //
*@Others:无  //
/*****************************************************************/
void Display_ALL(unsigned char value)
{
	SelectHC573(6);
	P0=0xff;
	SelectHC573(7);
	P0=value;
}

/*****************************************************************
*@Function: Dispaly_f     //
*@Description: 将频率显示在数码管    //
*@Input:无 //
*@Output:无 //
*@Return:无  //
*@Others:无  //
/*****************************************************************/
void Dispaly_f()
{
	DisplaySMG_Bit(0x8e,0);//1号数码管显示字符'F'
	Delay_SMG(500);
	
	DisplaySMG_Bit(0xff,1);//1、2号数码管不显示
	Delay_SMG(500);
	DisplaySMG_Bit(0xff,2);
	Delay_SMG(500);
	
	if(dat_f>9999)//如果频率大于9999
	{
		DisplaySMG_Bit(SMG_duanma[dat_f/10000],3);//3号数码管显示第五位
		Delay_SMG(500);
	}
	
	if(dat_f>999)//如果频率大于999
	{
		DisplaySMG_Bit(SMG_duanma[(dat_f/1000)%10],4);//4号数码管显示第四位
		Delay_SMG(500);
	}
	
	if(dat_f>99)//如果频率大于99
	{
		DisplaySMG_Bit(SMG_duanma[(dat_f/100)%10],5);//5号数码管显示第三位
		Delay_SMG(500);
	}
	
	if(dat_f>9)//如果频率大于9
	{
		DisplaySMG_Bit(SMG_duanma[(dat_f/10)%10],6);//6号数码管显示第二位
		Delay_SMG(500);
	}

	DisplaySMG_Bit(SMG_duanma[dat_f%10],7);//7号数码管显示最后一位
	Delay_SMG(500);

	Display_ALL(0xff);//将全部数码管清零
}

/*****************************************************************
*@Function:InitSystem      //
*@Description:单片机初始化,关闭蜂鸣器,继电器以及LED灯     //
*@Input:无 //
*@Output:无 //
*@Return: 无 //
*@Others: 无 //
/*****************************************************************/
void InitSystem()
{
	SelectHC573(5);
	P0=0x00;
	SelectHC573(4);
	P0=0xff;
	SelectHC573(0);
}

void main()
{
	InitSystem();//单片机初始化
	InitTimer();//定时器初始化
	while(1)
	{
		Dispaly_f();//显示频率
	}
}

蓝桥杯的学习笔记持续更新中~

要是文章有帮助的话,就点赞收藏关注一下啦!

感谢大家的观看

欢迎大家提出问题并指正~文章来源地址https://www.toymoban.com/news/detail-411635.html

到了这里,关于[蓝桥杯单片机]学习笔记——555定时器与频率测量的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习笔记|定时器|STC中断|定时器时间计算|STC32G单片机视频开发教程(冲哥)|第十一集:定时器的作用和意义

    什么是定时器:定时器-与非网 上节课的一段代码: TimeCount++然后一个延时1毫秒,每运行1ms,变量就会加一。 系统已经运行了多少个毫秒。 实际使用时的代码如下, 判断按键有沿有按下的时候,我们等待按键松开,还有一个while循环。 如果没有松开,会一直死在这一行。所以,

    2024年02月09日
    浏览(59)
  • 蓝桥杯单片机学习13——NE555方波发生器&频率测量

    NE555是一种高度稳定的控制器,内部用三个阻值为5KΩ的电阻分压,因此叫做555芯片。能够产生精确的定时脉冲。单稳态工作时,延时由一个外部电阻和一个电容控制。工作稳定,频率和占空比由两个外部电阻和一个电容器精确控制。具有以下特点: 【1】:大电流驱动能力(

    2024年02月03日
    浏览(32)
  • 51单片机笔记:定时器/计数器

    定时器/计数器的结构 AT89S51内部两个16位定时器/计数器:T0(P3.4),T1(P3.5),定时器/计数器T0由特殊寄存器TH0,TL0构成,T1由特殊功能寄存器TH1,TL1构成 T0,T1都有定时器和计数器两种工作模式,两种模式实质都是对脉冲信号进行计数,只不过技术信号来源不同。 计数器模式 是对

    2024年02月06日
    浏览(42)
  • 51单片机——定时器中断实验,小白讲解,相互学习

    定时器介绍 1,CPU时序的有关知识 震荡周期:为单片机提供定时信号的震荡源的周期(晶振周期或外加震荡周期)。 状态周期:2个震荡周期为1个状态周期,用S表示。震荡周期又称S周期或时钟周期。 机器周期:1个机器周期含6个状态周期,12个震荡周期 指令周期:完成1条指

    2024年02月03日
    浏览(42)
  • 单片机学习 11-中断系统(定时器中断+外部中断)

    ​ 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。它也是单片机最重要的功能之一,是我们学习单片机必须要掌握的。很多初学者被困在中断中,学了很久仍然不知道中断究竟是

    2024年02月05日
    浏览(47)
  • 51单片机学习--按键控制流水灯模式&定时器时钟

    TMOD负责确定T0和T1的工作模式,TCON控制T0和T1的启动或停止计数,同时包含定时器状态 TF1:定时器1溢出标志 TF0:定时器0溢出标志 0~65535 每隔1微秒计数器+1,总时间65535微秒,赋上初值64535,则只有1000微秒即1毫秒 首先配置TMOD 所以初始化TMOD = 0x01; //0000 0001 整体操作:TMOD = TM

    2024年02月14日
    浏览(43)
  • 【51单片机】:定时器的详解(包括对单片机定时解释、各类定时方式,以及中断方式)

              51定时/计数器的详解。                   码字不易,如有帮助请收藏,点赞哦。         前提:首先我们知道51单片机内部有21~26个特殊功能寄存器: P.x口寄存器:P0、P1、P2、P3 数据指针寄存器:DP0H、DP0L、DP1H、DP1L 定时器: TH1、TL1、TH0、TL0、TMOD、TCON 串口:

    2024年02月07日
    浏览(95)
  • 【笔记】6位数码管显示定时器定时的时分秒,通过按键控制时间,自定义串口通信协议,根据单片机接收到的指令控制数码管显示

              目的:利用PROTUES仿真软件、串口调试助手、虚拟串口,搭建单片机与PC通信仿真平台,熟悉单片机串口的配置及与PC机的通信方法;尝试制定通信协议(含开始码、指令、数据、停止码),单片机根据通信协议解析接收到的内容,并根据接收的指令执行相应的操

    2024年02月05日
    浏览(52)
  • 【单片机】STM32单片机的各个定时器的定时中断程序,标准库

    高级定时器和普通定时器的区别(https://zhuanlan.zhihu.com/p/557896041): TIM1是高级定时器,使用的时钟总线是RCC_APB2Periph_TIM1,和普通定时器不一样。 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用 timer.c timer.h 调用

    2024年02月11日
    浏览(48)
  • 单片机实验七 NE555脉冲发生器实验(定时/计数器)

    1.熟悉实验软件和硬件,进行正确的接线; 2.1602显示脉冲频率,调节电位器可改变频率。 1.Keil uVision4 2.PZISP自动下载软件 3.HC6800S开发板 实验界面及跳线帽位置 NE555是一种应用特别广泛作用很大的的集成电路,属于小规模集成电路,在很多电子产品中都有应用。 NE555的作用是

    2024年02月06日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包