51 单片机外部中断 + 定时器中断实验(P3.2 按键清零,无消抖)

1. 实验目的

  • 学习定时器中断:单片机内部硬件溢出触发,后台计时;
  • 学习外部中断 0(INT0,P3.2 引脚):外部按键信号触发;
  • 功能:定时器自动计数;按下 P3.2 按键,计数清零。

2. 硬件电路

plaintext 复制代码
按键外部中断电路
VCC → 按键一端
按键另一端 → P3.2(INT0)
P3.2 再接 10K 下拉电阻到 GND

显示电路:复用上面 2 位共阴极数码管
P0 段码,P1.0 个位位选,P1.1 十位位选

IT0 = 1,配置为下降沿触发。按键按下时电平从高变低,产生下降沿触发外部中断。

⚠️ 本实验不做软件消抖,实际会出现按一次多次触发,仅用于学习原理。

3. 示例核心代码

c 复制代码
#include <reg52.h>

sbit EN1 = P1^0;
sbit EN2 = P1^1;

unsigned char code seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

volatile unsigned char cnt=0;
unsigned int num=0;

void delay(unsigned int t){ while(t--); }

void display(unsigned int n)
{
    unsigned char shi = n/10;
    unsigned char ge  = n%10;

    EN1=1; P0=seg[ge];  delay(400); EN1=0;
    EN2=1; P0=seg[shi]; delay(400); EN2=0;
}

//定时器0中断,中断号1
void Timer0_ISR(void) interrupt 1
{
    TH0=0x3C; TL0=0xAF;
    cnt++;
    if(cnt >= 20){
        cnt = 0;
        num++;
    }
}

//外部中断0,中断号0,P3.2,【无消抖】
void Int0_ISR(void) interrupt 0
{
    num = 0;
    cnt = 0;
}

void Timer0_Init(void)
{
    TMOD |= 0x01;
    TH0=0x3C; TL0=0xAF;
    ET0 = 1;
    TR0 = 1;
}

void Ext0_Init(void)
{
    IT0 = 1;   //下降沿触发
    EX0 = 1;   //使能外部中断0
    EA  = 1;   //总中断开关
}

void main(void)
{
    Timer0_Init();
    Ext0_Init();
    while(1)
    {
        display(num);
    }
}

4. 实验现象

  • 定时器后台工作,数码管数字每秒加一;
  • 按下 P3.2 按键,触发外部中断,计数值清零;
  • 因为没有消抖:按键机械抖动会导致偶尔按一次清零好几次,这是正常现象,工程实际需要增加消抖。

5. 知识点对比表格

中断 中断号 触发来源
定时器 0 中断 1 单片机内部计数器溢出,不需要外部引脚
外部中断 0 INT0 0 P3.2 引脚外部信号(按键)

6. 重要要点

  • EA=1 总中断,缺少则全部中断无效;
  • 中断服务函数硬件自动调用,代码里不能手动调用;
  • 本次实验故意去掉消抖,仅学习中断原理;
  • 真实项目建议增加软件或者硬件消抖。
相关推荐
创界工坊工作室7 小时前
55-基于STC89C52宠物智能饲喂控制系统设计
stm32·单片机·嵌入式硬件·51单片机·proteus·宠物
极客 - L U10 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
AMASENSYS艾马斯10 小时前
变频器滤波器选型与EMC合规建议
驱动开发·单片机·其他·硬件工程·精益工程
码小文11 小时前
CAM350使用笔记(6)---Gerber文件铺铜间距检查
嵌入式硬件·cam350软件·cam350使用笔记
Yiran_G13 小时前
双频 Wi-Fi 6 + 蓝牙 5.4:无声讯通 WS8712 模组的开发与集成要点
网络·嵌入式硬件·物联网·智能家居
光子物联单片机14 小时前
ESP32传感器模块编程实践(一)DIY智能WIFI视频控制小车
嵌入式硬件·esp32·智能硬件·硬件
2501_9226395814 小时前
率能半导体 SS6628E直流双向马达驱动芯片:20V/7A,覆盖电子锁、玩具、无线充电、机器人四大应用场景
单片机·嵌入式硬件·硬件工程
硅基造物主14 小时前
STM32 从 0 到 1 做智能家居(五):工程结构与代码骨架
stm32·单片机·嵌入式硬件·智能家居
深圳老胡14 小时前
STM32F103 硬件 SPI 与软件 IO 模拟 SPI 最高速度差异详解
笔记·stm32·单片机·代码规范·1024程序员节
smartpi_ai15 小时前
机芯智能离线语音模块实战问答:SU-03T、CI-03T、SU-63T 与 JX-A7T 高频问题排查
人工智能·单片机·嵌入式硬件·ci/cd·语音识别