当前位置: 首页 > backend >正文

硬件:51单片机的按键、中断、定时器、PWM及蜂鸣器

一、GPIO(通用输入输出口)

基本概念

GPIO(General Purpose Input/Output)是 51 单片机与外部设备交互的最基础接口,通过引脚的电平变化实现数据的输入和输出。

工作模式

  1. 输出模式:单片机通过引脚输出高电平(5V)或低电平(0V),实现对外部设备的控制。
  2. 输入模式:单片机通过检测引脚的电平状态,获取外部设备的信息。

形象比喻

可以将 GPIO 比作 "水龙头":

  • 输出模式如同控制水龙头开关,决定水流(电平信号)的通断
  • 输入模式如同观察水龙头是否有水流,检测外部是否有信号输入

二、按键

按键的原理

以按键 K1 为例,其两个引脚分别连接到 GND 和 P1_4 引脚。当按键被按下时,P1_4 引脚与 GND 短路,呈现低电平;未按下时,P1_4 引脚呈现高电平。

按键检测方法

判断按键是否被按下,只需检测对应引脚是否为低电平。对于 P1_4 引脚,判断逻辑为:

P1 & 00010000 == 0

即当 P1 端口与 0x10(二进制 00010000)进行与运算结果为 0 时,说明 P1_4 为低电平,按键被按下。

典型应用场景

在实时性要求高的车载中控系统中,按键可用于:

  • 油温、水温等参数的查看切换
  • 发动机转速显示控制
  • 仪表盘数据刷新
  • 安全座椅状态确认
  • 刹车信号检测

三、中断

中断基本概念

  1. 中断:CPU 在执行当前任务时,被更紧急的事件打断,转而去执行紧急任务,完成后再返回原任务继续执行的过程。
  2. 中断源:引发中断的事件或源头,51 单片机有 5 个中断源。
  3. 中断优先级:多个中断同时发生时,CPU 优先处理优先级高的中断。
  4. 中断嵌套:处理一个中断时,可被更高优先级的中断打断,51 单片机最多支持 2 层嵌套。

中断源分类

中断源类型对应引脚 / 模块说明
外部中断 0INT0(P3_2)由 P3_2 引脚电平变化触发
外部中断 1INT1(P3_3)由 P3_3 引脚电平变化触发
定时器 0定时器 0 模块由定时器 0 溢出触发
定时器 1定时器 1 模块由定时器 1 溢出触发
串口串口模块由串口收发完成触发

中断处理流程

  1. 中断源发出中断请求
  2. 检查 CPU 是否允许响应中断及该中断源是否被屏蔽
  3. 比较中断优先级,选择最高优先级中断
  4. 保护现场(保存当前执行状态)
  5. 执行中断服务函数(回调函数)
  6. 恢复现场,返回原任务继续执行

中断寄存器配置

  1. IE 寄存器(中断允许寄存器)

    • EA(bit7)= 1:CPU 允许响应所有中断(总开关)
    • EX0(bit0)= 1:允许外部中断 0 产生中断
  2. TCON 寄存器(定时器控制寄存器)

    • IE0(bit1)= 1:外部中断 0 向 CPU 发起中断请求(CPU 响应后自动清 0)
    • IT0(bit0)= 1:外部中断 0 采用下降沿触发

四、定时器

定时器基本概念

定时器是产生精准定时的模块,51 单片机内部有两个定时器(timer0、timer1),均为 16 位自增型计数器。

时钟与定时关系

  • 51 单片机通常使用 12MHz 或 11.0592MHz 晶振
  • 经过 12 分频后,实际工作频率为 1MHz(12MHz/12)
  • 完成一条指令的时间为 1μs(1/1MHz)

定时器 0 实现 1ms 定时

1ms = 1000μs,需要计数 1000 次
定时器初值 = 65535 - 1000 = 64535(0xFC67)

定时器寄存器配置

  1. TMOD 寄存器(模式选择寄存器)

    • 低四位清 0
    • M0(bit0)= 1:定时器 0 工作在 16 位模式
  2. TCON 寄存器

    • TR0(bit4)= 1:允许定时器 0 开始计数
  3. IE 寄存器

    • EA(bit7)= 1:开启总中断
    • ET0(bit1)= 1:允许定时器 0 产生中断

配置流程

  1. 配置 TMOD 寄存器,设置为 16 位定时器模式
  2. 向 TH0 和 TL0 装入初值 64535(0xFC67)
  3. 置位 TR0,启动定时器计数
  4. 开启总中断和定时器 0 中断
  5. 编写定时器 0 中断服务函数

五、PWM 与蜂鸣器

PWM(脉冲宽度调制)

  • PWM 周期:一个方波的完整周期(从上升沿到下一个上升沿的时间)
  • PWM 占空比:一个周期内高电平所占的比例
  • 作用:通过产生周期性的电平翻转,实现对外部设备的精确控制

蜂鸣器

  1. 有源蜂鸣器:内置震荡源,通电后发出固定频率的声音

  2. 无源蜂鸣器:无内置震荡源,需要外部提供震荡信号才能发声

  3. 声音特性

    • 音调:由频率决定(高频为高音,低频为低音)
    • 音量:由振幅决定(振幅越大,音量越大)
http://www.xdnf.cn/news/19846.html

相关文章:

  • 深入解析MongoDB内部架构设计
  • 深度学习-----简单入门卷积神经网络CNN的全流程
  • 做 DevOps 还在被动救火?这篇让你把监控玩成 “运维加速器”!
  • 【CV】OpenCV基本操作④——算术操作
  • OpenGL视图变换矩阵详解:从理论推导到实战应用
  • 《四川棒球知识百科》球速最快的运动之一·棒球1号位
  • Grok-4 :AI 基准测试霸主,速度与智能并存——但代价几何?
  • 学习 Android (十九) 学习 OpenCV (四)
  • sql项目总结
  • 无人机报警器8G信号技术解析
  • npm install 报错问题解决 npm install --ignore-scripts
  • 嵌入式学习---(单片机)
  • 【Kubernetes知识点】监控升级,备份及Kustomize管理
  • Python 基础语法与控制流程学习笔记
  • 学习笔记:MYSQL(3)(常用函数和约束)
  • 嵌入式人别再瞎折腾了!这8个开源项目,解决按键/队列/物联网所有痛点,小白也能抄作业
  • 【JVS更新日志】低代码、物联网、无忧企业计划9.3更新说明!
  • GitLab Boards 深度解析:选型、竞品、成本与资源消耗
  • 上下文记忆力媲美Genie3,且问世更早:港大和可灵提出场景一致的交互式视频世界模型!
  • MindNode AI:AI辅助思维导图工具,高效整理思路快速搭框架
  • React学习教程,从入门到精通, React 组件语法知识点(9)
  • 【108】基于51单片机智能输液监测系统【Proteus仿真+Keil程序+报告+原理图】
  • 浅谈linux内存管理 的RMAP机制的作用和原理
  • 指针高级(1)
  • leetcode 38 外观数列
  • 线程通信机制
  • 【程序人生】有梦想就能了不起,就怕你没梦想
  • BurpSuite_Pro_V2024.6使用教程-Burp Suite代理设置详解
  • (Me)Adobe Media Encoder 2025音视频格式转码软件及视频编码软件,全新版免激活,安装即永久使用!
  • HTTP协议——理解相关概念、模拟实现浏览器访问自定义服务器