单片机C语言编程:中断实现100内按键计数与显示
5星 · 超过95%的资源 71 浏览量
更新于2023-03-03
9
收藏 120KB PDF 举报
"本教程主要讲解如何使用单片机C语言程序设计中的计数器中断来实现100以内的按键计数。通过T0计数器中断和外部中断0,实现对P3.4引脚负跳变的计数,并利用数码管显示计数值。"
在单片机编程中,计数器中断是一种常见的功能,用于在特定事件发生时暂停当前执行的程序,执行中断服务子程序,然后返回到被中断的位置继续执行。在这个例子中,我们使用了8051系列单片机的T0(定时器0)作为计数器中断,同时利用外部中断0来清零计数值。
首先,我们看到程序中定义了一个全局变量`uchar Count=0`,用于存储计数值。当P3.4引脚检测到一个负跳变(下降沿)时,T0计数器会增加,直到达到预设的初值(256-1,即255),触发中断。中断服务子程序`Key_Counter()`会在每次中断时将计数值`Count`加1,并确保其不超过100(`Count=(Count+1)%100`)。这样,我们就得到了0到99的递增计数。
TMOD寄存器用于设置定时器/计数器的工作模式,`TMOD=0x06`将T0设置为工作在方式2,这是一个16位的自动重装载定时器/计数器。TH0和TL0分别设置计数器的高8位和低8位初值,`TH0=TL0=256-1`使得计数器初始值为1。
中断的使能是通过设置相应标志位实现的。`ET0=1`和`EX0=1`分别使能T0中断和外部中断0,`EA=1`则使能整个CPU中断。`IP=0x02`设置了中断优先级,T0中断优先级高于外部中断0。`IT0=1`将INT0中断触发方式设置为下降沿触发,这意味着当P3.4引脚由高电平变为低电平时,将触发中断。
主程序`main()`中,初始化了P0和P2口用于数码管显示,通过P0显示十位,P2显示个位。`TR0=1`启动T0计数器。在主循环中,数码管的段码根据`Count`的值动态更新,实现了计数值的实时显示。
外部中断0的中断服务子程序`Clear_Counter()`用于将计数值重置为0,当P3.4引脚上的信号线被按下并释放时,会触发这个中断,实现计数器的清零操作。
总结起来,这个实例展示了如何结合单片机的定时器/计数器中断和外部中断功能,实现简单的按键计数器。通过理解这个例子,学习者可以更好地掌握单片机C语言程序设计中的中断系统、计数器操作以及中断服务子程序的设计方法。
2021-10-01 上传
2022-05-23 上传
2022-05-07 上传
2024-03-23 上传
2020-08-28 上传
weixin_38736529
- 粉丝: 2
- 资源: 875
最新资源
- Android圆角进度条控件的设计与应用
- mui框架实现带侧边栏的响应式布局
- Android仿知乎横线直线进度条实现教程
- SSM选课系统实现:Spring+SpringMVC+MyBatis源码剖析
- 使用JavaScript开发的流星待办事项应用
- Google Code Jam 2015竞赛回顾与Java编程实践
- Angular 2与NW.js集成:通过Webpack和Gulp构建环境详解
- OneDayTripPlanner:数字化城市旅游活动规划助手
- TinySTM 轻量级原子操作库的详细介绍与安装指南
- 模拟PHP序列化:JavaScript实现序列化与反序列化技术
- ***进销存系统全面功能介绍与开发指南
- 掌握Clojure命名空间的正确重新加载技巧
- 免费获取VMD模态分解Matlab源代码与案例数据
- BuglyEasyToUnity最新更新优化:简化Unity开发者接入流程
- Android学生俱乐部项目任务2解析与实践
- 掌握Elixir语言构建高效分布式网络爬虫