发布时间:2026/6/30 22:00:30
51单片机外部中断实战:数码管数字切换
点灯学习—51单片机外部中断写文章巩固一下顺便学习Markdown使用STC59C52外部中断修改数码管数字外部中断的原理图为AT89C52中断系统结构*51单片机中断整体结构原理图*1INT0 外部中断interrupt 00中断请求由P3.2引脚输入当检测到中断信号中断标志位IE0TCON.0置1。2INT1 外部中断1interrupt 1中断请求由P3.3引脚输入当检测到中断信号中断标志位IE0TCON.3置1。3IT 外部中断方式控制位TCON.0,TCON.2当ITx 1时外部中断下降沿触发图中学习乱标记当ITx 0时为低电平触发*特殊功能寄存器TCON*4EXx 外部中断允许寄存器() 只有当中断被允许时EXx 1 才会触发中断*中断允许寄存器IE*(5)中断优先级51单片机中断的优先级*中断优先级查询次序*外部中断的编程实现理解了外部中断的原理后我们就可以开始编写代码了。下面以 STC89C52 单片机为例演示如何使用外部中断 0 (INT0) 来响应按键并控制一个 LED 灯的亮灭。1. 硬件连接使用51单片机开发板原理图如下*单片机开发板原理图*数码管通过连接74HC573与单片机连接独立按键3连接P3.22. 代码示例 (C语言)#includeREGX52.H#includeintrins.hsbit WELAP2^7;sbit DULAP2^6;unsignedcharstate0;voiddelay(unsignedi){intk0;intj0;for(k;ki;k){for(j;j110;j){_nop_();}}}/*-----------------数码管驱动-------------*/// 0~9数字段码unsignedcharseg_num[10]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};// 常用字母 A,b,C,d,E,F,H,L,P,Uunsignedcharseg_char[10]{0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x38,0x73,0x3E};voidsegment_num(unsignedintlocation,unsignedcharnum){unsignedchari0XFE;WELA0;DULA0;P0_crol_(i,location);WELA1;delay(1);WELA0;P0seg_num[num];DULA1;delay(2);DULA0;P00X00;DULA1;delay(1);DULA0;}voidsegment_char(unsignedintloc,unsignedcharch){unsignedchari0XFE;WELA0;DULA0;P0_crol_(i,loc);WELA1;delay(1);WELA0;P0seg_char[ch];DULA1;delay(2);DULA0;P00X00;DULA1;delay(1);DULA0;}voidchange_state()interrupt0{delay(20);if(P3_20){state!state;}}voidmain(){IT01;//下降沿触发EX01;//开启外部中断0EA1;//允许总中断while(1){if(state1){segment_num(0,1);segment_num(1,2);}elseif(state0){segment_char(0,0);segment_char(1,1);}}}3. 代码解析这段代码实现了一个简单的外部中断应用通过按键触发外部中断 0INT0对应 P3.2 引脚切换数码管显示内容——在数字 “1、2” 和字母 “A、b” 之间切换。1. 头文件与宏定义#includeREGX52.H#includeintrins.hREGX52.HSTC89C52 系列单片机的特殊功能寄存器定义头文件。intrins.h包含内部函数如_nop_()空操作和_crol_()循环左移。2. 引脚与变量定义sbit WELAP2^7;sbit DULAP2^6;WELA位选锁存器控制引脚连接 P2.7控制哪个数码管亮。DULA段选锁存器控制引脚连接 P2.6控制数码管显示什么内容。unsignedcharstate0;state显示状态标志位。0时显示字母 “A、b”1时显示数字 “1、2”。外部中断触发时会翻转该值。3. 延时函数delayvoiddelay(unsignedi){intk0;intj0;for(k;ki;k){for(j;j110;j){_nop_();}}}通过双重循环和_nop_()空操作实现粗略的毫秒级延时主要用于数码管动态扫描和按键消抖。4. 段码表定义unsignedcharseg_num[10]{0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};unsignedcharseg_char[10]{0x77,0x7C,0x39,0x5E,0x79,0x71,0x76,0x38,0x73,0x3E};seg_num0~9 数字对应的共阴极数码管段码。seg_char常用字母A~U 中选出的 10 个段码程序中用索引 0 对应 ‘A’索引 1 对应 ‘b’。5. 数码管显示函数segment_num(unsigned int location, unsigned char num)在location位显示数字num。segment_char(unsigned int loc, unsigned char ch)在loc位显示字母段码seg_char[ch]。两个函数的操作流程一致关闭位选和段选WELA0; DULA0;。通过P0口送出位选信号_crol_()循环左移选择位置拉高WELA锁存。通过P0口送出段码数据拉高DULA锁存。短暂延时后清除段码并再次锁存消除残影。6. 外部中断 0 服务函数change_statevoidchange_state()interrupt0{delay(20);if(P3_20){state!state;}}interrupt 0外部中断 0 的中断号。消抖处理先延时约 20ms再检测P3.2是否仍为低电平过滤按键抖动。状态翻转确认按键按下后执行state !state实现显示内容的切换。7. 主函数mainvoidmain(){IT01;// 下降沿触发EX01;// 开启外部中断 0EA1;// 允许总中断while(1){if(state1){segment_num(0,1);segment_num(1,2);}elseif(state0){segment_char(0,0);segment_char(1,1);}}}中断初始化直接在main中设置——IT01下降沿触发、EX01开外部中断 0、EA1开总中断。主循环不断扫描显示。state 1第 0 位显示数字 “1”第 1 位显示数字 “2”。state 0第 0 位显示字母 “A”seg_char[0]第 1 位显示字母 “b”seg_char[1]。每次按下按键外部中断翻转state数码管显示就会在两组内容之间切换。总结这个程序用最精简的方式演示了 51 单片机外部中断的使用——按键触发中断、消抖确认、状态切换、数码管动态扫描显示非常适合初学者入门理解中断的触发与响应机制。4. 进阶思考消抖处理: 实际按键会产生机械抖动可能导致一次按下触发多次中断。可以在中断服务函数开头添加延时消抖或在主循环中采用软件定时器进行消抖判断。中断优先级: 如果系统中还有定时器中断等其他中断可以通过设置IP寄存器来调整它们的优先级。通过这个简单的例子你应该能够将原理图中的寄存器配置与实际代码对应起来并动手实现一个基本的外部中断应用。2026年6月29日第三次学习

相关新闻

IPXWrapper终极指南:5分钟让经典游戏在现代Windows上复活联机功能
2026/6/30 21:00:30

IPXWrapper终极指南:5分钟让经典游戏在现代Windows上复活联机功能

IPXWrapper终极指南:5分钟让经典游戏在现代Windows上复活联机功能 【免费下载链接】ipxwrapper 项目地址: https://gitcode.com/gh_mirrors/ip/ipxwrapper 还在为《红色警戒2》、《星际争霸》、《暗黑破坏神》等经典游戏无法联机而烦恼吗?IPXWra…

阅读更多
告别LED闪烁:用串口助手和printf()给你的51单片机代码做个“体检”
2026/6/30 21:00:30

告别LED闪烁:用串口助手和printf()给你的51单片机代码做个“体检”

告别LED闪烁:用串口助手和printf()给你的51单片机代码做个“体检”当你第一次点亮LED时,那种成就感无与伦比。但随着项目复杂度提升,闪烁的LED就像医生只用听诊器诊断疑难杂症——明明需要X光片,却只能靠猜。我在调试温控系统时就…

阅读更多
深度解析CXPatcher:CrossOver依赖升级与兼容性增强技术
2026/6/30 21:00:30

深度解析CXPatcher:CrossOver依赖升级与兼容性增强技术

深度解析CXPatcher:CrossOver依赖升级与兼容性增强技术 【免费下载链接】CXPatcher A patcher to upgrade Crossover dependencies and improve compatibility 项目地址: https://gitcode.com/gh_mirrors/cx/CXPatcher CXPatcher是一款专为macOS平台设计的Cr…

阅读更多
Java程序设计(第3版)第四章——错误:无法实例化
2026/6/30 23:00:30

Java程序设计(第3版)第四章——错误:无法实例化

错误:无法实例化 例:

阅读更多
word使用总结
2026/6/30 23:00:30

word使用总结

文章目录段落样式新建样式字符样式段落样式清除格式格式刷的使用样式的保存方式除了段落样式,字符样式,为啥还要出现左上角,针对选中的内容进行字体,大小,对齐方式,行距修改的第三种方式。字体或字号不显示…

阅读更多
氧化应激直接标志物!过氧化氢(H₂O₂)含量检测试剂盒
2026/6/30 23:00:30

氧化应激直接标志物!过氧化氢(H₂O₂)含量检测试剂盒

内容概要过氧化氢是细胞内活性氧家族的核心成员,既是氧化应激的重要产物,也是参与细胞信号传导的关键信使分子;其水平异常与炎症反应、细胞凋亡、衰老、肿瘤发生等多种生理病理过程密切相关,是评估机体氧化还原状态最直接的生化指…

阅读更多
全域智能营销决策平台(Uni-MDP)架构设计
2026/6/30 23:00:30

全域智能营销决策平台(Uni-MDP)架构设计

全域智能营销决策平台(Uni-MDP)架构设计 一、架构设计理念 以全域数据融合为基础,以智能算法驱动为核心,以全链路决策闭环为目标,平台的核心定位是企业营销数字化转型的基础设施——将分散的营销能力沉淀为可复用、可编…

阅读更多
DesktopNaotu:你的离线思维整理神器,跨平台思维导图解决方案
2026/6/30 23:00:30

DesktopNaotu:你的离线思维整理神器,跨平台思维导图解决方案

DesktopNaotu:你的离线思维整理神器,跨平台思维导图解决方案 【免费下载链接】DesktopNaotu 桌面版脑图 (百度脑图离线版,思维导图) 跨平台支持 Windows/Linux/Mac OS. (A cross-platform multilingual Mind Map Tool) 项目地址: https://g…

阅读更多
PHP 6前瞻项目评估指南:从环境部署到功能验证的完整流程
2026/6/30 22:00:30

PHP 6前瞻项目评估指南:从环境部署到功能验证的完整流程

这次我们来看一个名为“ŗPHP6SżķēĊņ”的项目。从项目名称看,它似乎是一个与PHP 6相关的技术项目,可能涉及某种框架、工具或性能优化方案。对于PHP开发者而言,任何与PHP 6相关的探索都值得关注,因为它可能预示着新的语言特性…

阅读更多
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告
2026/6/30 17:40:54

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

阅读更多
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?
2026/6/30 17:40:17

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

阅读更多
如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案
2026/6/30 0:00:27

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.co…

阅读更多
AScript异步执行与await关键字
2026/6/30 0:00:27

AScript异步执行与await关键字

、异步解析执行 AScript提供了 Script.EvalAsync 异步方法,异步执行脚本,可设置 CancellationToken 参数。 AScript执行模式有解析执行和编译执行两种模式,这两种模式下的异步执行又有所不同: 1)解析执行模式&#…

阅读更多
AI时代真的风水轮流转,前段时间最火的还是Claude Code,转眼间Codex就火得一塌糊涂。Codex是由OpenAI 推出的AI智能体。
2026/6/30 0:00:27

AI时代真的风水轮流转,前段时间最火的还是Claude Code,转眼间Codex就火得一塌糊涂。Codex是由OpenAI 推出的AI智能体。

它不仅能回答问题,编写代码,还能读取电脑本地文件,修改项目,浏览网页,调用外部工具,自动化执行任务,操作浏览器甚至桌面应用。 也是早早的就给身边不是程序员的亲朋好友安利了,都是用…

阅读更多
GIT修改用户名
2026/6/28 5:47:46

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/30 14:19:49

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/30 14:19:48

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多