单片机C语言编程:中断实现100内按键计数与显示

5星 · 超过95%的资源 20 下载量 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语言程序设计中的中断系统、计数器操作以及中断服务子程序的设计方法。