蓝桥杯单片机学习13——NE555方波发生器&频率测量

简介

NE555是一种高度稳定的控制器,内部用三个阻值为5KΩ的电阻分压,因此叫做555芯片。能够产生精确的定时脉冲。单稳态工作时,延时由一个外部电阻和一个电容控制。工作稳定,频率和占空比由两个外部电阻和一个电容器精确控制。具有以下特点:
【1】:大电流驱动能力(200mA)
【2】:占空比可调
【3】:温度稳定性高,灵敏度高
【4】:定时范围广,(微妙级~小时级)
【5】:广泛应用于精确定时,产生脉冲、方波信号

引脚图

在这里插入图片描述

引脚名称功能
1地线接地
2输入端用于输入,和1/3Vcc比较
3输出端输出信号
4复位端低电平复位
5电压控制端一般不用,通常连接一个0.1uf的电容用来滤除杂波
6输入端用于输入,和2/3Vcc比较
7放电端用于放电
8电源线给芯片供电

原理图

在这里插入图片描述
我们可以看到:

  • 2脚和6脚是接到一起的,因此两引脚电平保持一致
  • 4脚直接接到了GND,芯片处于正常工作状态。
  • 5脚接一个0.1uf的电容后直接接地,用来滤除杂波。

真值表

前面讲过,NE555芯片的2脚和6脚以此两引脚电平保持一致,所以下表直接给出了电平一致的情况,忽略了其他不存在的情况。

4引脚(复位引脚)6引脚(输出)2引脚(输入)3引脚(输出)
0XX0
1>2/3Vcc>2/3Vcc0
11/3Vcc < Vth <2/3Vcc1/3Vcc < Vth <2/3Vcc保持上一个状态
1<1/3Vcc<1/3Vcc1

接下来我们简单的分析以下NE555的工作原理。

工作原理

  • 刚刚上电时,因为电容没有电,两端电压几乎相等,为低电平,此时,二号引脚和六号引脚电压都 < 1/3Vcc,输出为高电平
  • 随着电源通过R8和Rb3接入电路的部分给电容C14充电,二号引脚和六号引脚电压逐渐升高至1/3Vcc和2/3Vcc之间,NE555的输出保持上一个状态,输出为高电平
  • 再往后,二号引脚和六号引脚电压上升至2/3Vcc以上,输出为低电平,此时二号引脚和六号引脚电压大于输出引脚的电压,电容开始放电,二号引脚和六号引脚电压随之下降
  • 当二号引脚和六号引脚电压下降到1/3Vcc和2/3Vcc之间,NE555的输出保持上一个状态,输出为低电平
  • 二号引脚和六号引脚电压继续下降,回到状态1,输出高电平,之后往复循环以上步骤,输出一个方波信号。

[注] : 通过调节Rb3的阻值,可以改变电容充电和放电的时间Rb3越大,充放电时间越长,频率越小,反之越大。

频率测量原理

我们知道:要测量一个方波信号的频率,可以通过计算信号经过一个完整的高低电平所用的时间t,然后那么f (频率)= 1s/t(一个完整高低电平所用的时间) ,即可即可测量出这个信号的频率。
但是要测得一个完整高低电平所用的时间是很困难的,所以这个方法显然行不通…………
除此之外,我们还有一个相对简单的方法,就是通过单片机的计数功能,测得在1S内,脉冲信号的数量就是方波信号的频率。至于这种方法的原理,我这里不做介绍,感兴趣的可以自己查找相关资料。

定时器测量频率方法

  • 通过定时器测量频率需要同时用到的定时器1和定时器0
  • 定时器0作为计数器,工作模式为八位自动重装载
  • 定时器1为定时器,工作模式为十六位自动重装载

[注意]:定时器0为计数器和定时器1为定时器,两者工作模式不建议调换,至于为什么是这样,理由如下:
在这里插入图片描述

定时器0作为计数器使用时,每当引脚P34捕获到一个脉冲信号,定时器0数值加一,
而定时器1作为计数器使用时,则需要P35捕获到脉冲信号,定时器1数值加一。

但是在蓝桥杯官方提供的单片机上,NE555芯片的输出端通过排针连接到了P34的旁边,只需要一个跳线帽将P34和NE555芯片的输出端连接即可实现通过通过定时器0对NE555产生的方波信号捕获,
如果强行使用定时器1进行计数,则需要另外使用杜邦线将P35和NE555的输出端连接,然而在比赛的时候好像是不会额外提供杜邦线的…………

代码实现

以下是通过定时器0&定时器1完成对NE555方波信号的频率测量。并通过数码管显示出来的代码示例,数码显示范围为0~99999Hz

#include <STC15F2K60S2.H>
#include "LS138.h"
unsigned int Count = 0;         //定义计数变量,计算频率
unsigned int Frequence = 0;     //频率

//定时器初始化函数
void Timer_Init(void)
{
    TMOD |= 0x06;    //设置定时器0为计数器,八位自动重装载,定时器1为定时器,16位自动重载载
    ET0 = 1;
    ET1 = 1;
    EA = 1;         //开启定时器中断
    TH0 = 0xFF;     //设置初值,使P3^4每产生一个脉冲,触发一次定时器0中断
    TL0 = 0xFF;
    TL1 = 0x18;     //设置处置,使定时器1每1ms参生一次中断
    TH1 = 0xFC;
    TR0 = 1;        //打开定时器0
    TR1 = 1;        //打开定时器1
}

//初始化函数
void Init()
{
    Timer_Init();   //定时器初始化
    LS138_Init();   //和LS138相关部分初始化
}

//数码管显示函数,Fre为需要显示的频率值
void SEG_Show(unsigned int Fre)
{
    if(Fre%10)  //显示个位
    {
        SEG_Write(7,Fre%10);    
        if(Fre/10%10)       //显示十位
        {
            SEG_Write(6,Fre/10%10);
            if(Fre/100%10)      //显示百位
            {
                SEG_Write(5,Fre/100%10);
                if(Fre/1000%10) //显示千位
                {
                    SEG_Write(4,Fre/1000%10);
                    if(Fre/10000%10)    //显示万位
                        {
                            SEG_Write(3,Fre/10000%10);
                            
                        }
                }
            }   
        }
    }
}

main()
{
    Init();     //初始化函数调用
    while(1)
    {
        SEG_Show(Frequence);        //显示频率
    }
}
//定时器0中断服务函数
void Timer0_Handler() interrupt 1
{
    Count++;        //频率加一
}
//定时器1中断服务函数,,每1ms触发一次
void Timer1_Handler() interrupt 3
{
    static int i =0;

    i++;
    if(i>=1000)     //1s进来一次
    {
        Frequence = Count;  //读取当前的频率值
        Count = 0;          //Count清零
        i = 0;              //i清零
    }
}

实现原理如下:

  • 定时器0设置为计数器,八位自动重装载模式,初值为0xFF,即每捕获到一个脉冲信号,触发一次定时器0中断,Count++;
  • 定时器1设置为定时器十六位自动重装载,初值位65535-1000,即每1ms触发一次,内部变量i++;当i >=1000,即时间到达1S,读取Conut的值,为测量到的频率
  • 通过读取到的频率,通过数码管显示出来。
  • 调节Rb3的阻值,改变产生的方波信号频率,测量得到的频率随之改变。

总结(一堆废话)

到这里,我们蓝桥杯单片机上常考的内容就已经全部介绍完了,接下来我会出几期关于历年省赛题目的实现示例、及代码思路,然后就结束蓝桥杯单片机学习的系列…………

再然后就是关于,以后会不会继续写博客的事情。这里我想讲一些题外话,或者说是废话…………

起初,我开始写蓝桥杯单片机学习的博客,主要目的就是记录我自己的学习过程,希望可以那个奖什么的…………

到后来,写博客成为了我学习的一部分,我发现我有很多的问题可以在写博客的过程中解决,我学到了很多…………

与此同时,我也渐渐的不知所措,不知道接下来该怎么办,是要继续写,还是停笔封书,不知道我的内容会不会有人看,会不会有人喜欢,总之,我迷茫了…………

如果可以的话,给我点建议,留下你们的看法

在这里插入图片描述

&lt;think&gt;好的,我现在需要帮助用户查找关于蓝桥杯竞赛中单片机NE555定时器相关的资料或教程。首先,我需要回顾用户提供的引用内容,看看有哪些相关信息可以提取。 根据引用[1],蓝桥杯单片机比赛的第十届和十二届涉及使用NE555测量频率和周期,这说明NE555在比赛中主要用于频率测量。引用[3]进一步指出,测量频率时实际上考察的是定时/计数器的使用,而不是NE555本身的配置,这提示用户需要重点学习如何配置单片机的定时器。同时,用户需要注意硬件连接,比如跳线帽的设置和电位器的调整。 接下来,用户可能需要具体的教程或资料。引用[2]提到了蓝桥杯模板中的NE555定时器和频率测量部分,包括定时器的初始化代码和中断服务函数,这可能对用户有帮助。此外,引用[4]提供了一个CSDN的下载链接,里面有全模块代码和部分竞赛程序,这可能是一个重要的资源来源。 用户的问题集中在蓝桥杯竞赛相关的资料,因此需要将信息整理成结构化的回答,包括硬件连接、编程要点、参考资料以及相关问题。需要确保回答符合系统级指令,比如使用正确的中文和LaTeX格式,不过在这个回答中数学公式可能较少,但要注意代码块的格式。 还要注意生成相关问题,帮助用户深入理解。例如,关于定时器配置、频率计算方法或常见问题处理等。需要确保问题与用户查询的主题紧密相关,并且基于提供的引用内容。 最后,检查所有引用是否正确标注,例如在提到跳线帽设置时引用[3],在提到代码模板时引用[2],在提供资料链接时引用[4]。确保回答清晰,步骤明确,帮助用户系统地掌握相关内容。&lt;/think&gt;### 蓝桥杯竞赛中单片机NE555定时器的关键知识点 #### 一、NE555蓝桥杯中的应用场景 NE555蓝桥杯单片机竞赛中主要用于**频率测量**,例如第十届和第十二届比赛中要求通过单片机测量NE555生成的信号频率和周期[^1]。其核心原理是利用单片机的定时器/计数器功能,而非直接操作NE555芯片[^3]。 #### 二、硬件连接与配置 1. **跳线帽设置**:需将开发板的J3接口的`SIGNAL`与`P34`短接,使NE555输出信号接入单片机的P34引脚(即定时器T0引脚)[^3]。 2. **信号调节**:通过Rb3可调电位器改变NE555输出信号的频率。 #### 三、编程要点 1. **定时器/计数器配置**: - 定时器0(T0)初始化为**计数器模式**,用于统计NE555信号的脉冲数。 - 定时器1(T1)初始化为**定时器模式**,用于生成固定时间窗口(如1秒)以计算频率。 ```c // 定时器0配置为计数器模式(模式1) TMOD |= 0x05; // 低四位设置为0101(T0为计数器,模式1) TH0 = 0; TL0 = 0; TR0 = 1; // 启动T0计数 // 定时器1配置为定时器模式(50ms中断) TMOD |= 0x10; // 高四位设置为0001(T1为定时器,模式1) TH1 = 0x4C; TL1 = 0x00; // 50ms定时 ET1 = 1; EA = 1; TR1 = 1; ``` 2. **中断服务函数**: ```c void Timer1_ISR() interrupt 3 { static uint8_t cnt = 0; TH1 = 0x4C; TL1 = 0x00; // 重装初值 if (++cnt == 20) { // 20次中断累计1秒 frequency = TH0 &lt;&lt; 8 | TL0; // 读取T0计数值 TH0 = 0; TL0 = 0; // 重置计数器 cnt = 0; } } ``` #### 四、参考资料推荐 1. **代码模板与教程**: - 引用[2]提供了定时器初始化、中断函数编写的模板代码。 - 引用[4]包含完整的模块化代码和历届赛题程序(下载地址:[CSDN链接](https://download.csdn.net/download/qq_25218501/87965874))。 2. **常见问题**:引用[3]强调需注意硬件连接和定时器配置的细节。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不想写代码的我

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值