外部中断测脉冲个数

点击打开在线编译器,边学边练

1.外部中断的常用功能

外部中断经常用来记录外部脉冲的个数,也就是当我们使用外部中断1时,如果想记录自身单片机的某个引脚的下降沿个数,只需用杜邦线把这个引脚和P3.3连接即可。

比如P2.3引脚产生这样的电平无规律跳转,则下降沿的个数为5

中断函数6

所以我们就用外部中断1来实现记录K4按键从按下到松手的抖动过程中经历了多少个下降沿,把下降沿的个数显示在数码管上。

 

2.程序思路

我们定义一个16位的全局变量pulse用来记录P2.3下降沿的个数,在中断函数中的任务就是简单的pulse自加,因为引脚遇到下降沿就会进入中断函数。

在主函数里就是负责数码管显示即可。

 

3.代码

#include <reg52.h> 
#include <function.h>//详见第六章第8讲

u16 pulse=0;
void main()
{  
    u16 x,PULSE_buf;
    IT1 = 1;   //下降沿触发模式
    EX1 = 1;
    EA  = 1;
  
    LED_Init();//初始化LED硬件模块 
    KEY_Init();//初始化按键功能模块
    ShowNumber(pulse);
    while(1)
    {
        SEG_Scan();  
        if(PULSE_buf!=pulse)ShowNumber(pulse);//pulse不再是前一次的值,也就是pulse数值更新了,所以数码管缓存区也要更新pulse的数值以便显示出来
    
        x++;
        if(x>=50)//隔一段时间过来记录此时的pulse数值
        {
            x=0;
            PULSE_buf=pulse;
        }
    }
}
 
//请把P3.3和P2.3用杜邦线连接起来
void EXTI1_IRQHandler() interrupt 2
{
    pulse++;
}

大家多按几次K4,发现按下后松手的一个动作里有时pulse就自加了几次,显示在数码管上的数加了好几下。

 

4.稳定测试

我们再用P2.3提前设定好会产生多少个脉冲,然后观察数码管显示的是不是我们设定好的脉冲数。这里我们让P2.3跳变电平15次,看看数码管显示的数值是多少。

#include <reg52.h> 
#include <function.h>//详见第六章第8讲

u16 pulse=0;
void main()
{  
    u8 i=0;
    IT1 = 1;   //下降沿触发模式
    EX1 = 1;
    EA  = 1;
  
    LED_Init();//初始化LED硬件模块 
    KEY_Init();//初始化按键功能模块
  
    while(i<15)//让P2.3产生脉冲数,然后结束循环
    {
        KEY4=!KEY4;
        i++;
        delay_ms(1);  //让电平保持的时间多一点
    }
  
    ShowNumber(pulse);//更新数码管缓存区内容
  
    while(1)
    {
        SEG_Scan();   //显示脉冲数  
    }
}
 
//请把P3.3和P2.3用杜邦线连接起来
void EXTI1_IRQHandler() interrupt 2
{
    pulse++;
}

数码管显示的是8,画出状态图一目了然!

中断函数7

拔了杜邦线再复位开发板就是显示0了。


本文固定URL:https://www.dotcpp.com/course/370

上一课:中断的实验现象
第一章 单片机入门
第二章 LED
第三章 蜂鸣器
第四章 数码管
第五章 独立按键
第六章 多文件编程
第七章 外部中断
第八章 定时器
第九章 舵机与超声波模块
第十章 串口通信
第十一章 1602液晶屏
第十二章 IIC通信
第十三章 红外遥控与温度传感器
第十四章 AD与DA
第十五章 混合例程
第十六章 完结
Dotcpp在线编译      (登录可减少运行等待时间)