89c51单片机用一个外部中断(按键),实现对一位LED数码管从0加到9加的控制,可循环。
时间: 2024-05-10 13:19:40 浏览: 8
以下是89C51单片机实现按键控制LED数码管从0加到9的程序示例:
```c
#include <reg51.h>
// 定义LED数码管对应的端口
#define LED P0
// 定义按键对应的端口
sbit KEY = P3^2;
// 延时函数,用于消除按键抖动
void delay(unsigned int i)
{
while(i--);
}
// 外部中断0的中断服务程序
void int0() interrupt 0
{
static unsigned char num = 0; // 数码管显示的数字
num++; // 数字加1
if(num > 9) num = 0; // 循环显示0~9
LED = ~num; // 在数码管上显示数字
delay(10000); // 消除按键抖动
}
// 主函数
void main()
{
IT0 = 1; // 外部中断0下降沿触发
EX0 = 1; // 打开外部中断0
EA = 1; // 打开总中断开关
while(1);
}
```
程序中,我们定义了LED数码管对应的端口为P0,按键对应的端口为P3.2。在主函数中,我们打开外部中断0,然后进入死循环等待中断事件的发生。
当按键被按下时,会产生一个下降沿触发的外部中断0,此时会执行中断服务程序int0()。在中断服务程序中,我们先定义一个静态变量num,用于记录当前数码管显示的数字。然后将num加1,如果超过9则循环回0。接着在数码管上显示数字,注意数码管是低电平有效的,所以要取反。最后调用延时函数delay()消除按键抖动。
这样,我们就实现了一个简单的按键控制LED数码管的程序。