单片机上电复位后共阳极数码管显示0,按键K1触发外部中断1实现数码管十进制循环计数(0-9循环计数),每当K1按下,数码管显示数码加1代码
时间: 2024-03-11 13:50:30 浏览: 84
单片机一位数码管循环显示0~9实验_into3fo_51仿真_
5星 · 资源好评率100%
以下是一个简单的51单片机上电复位后共阳极数码管显示0,按键K1触发外部中断1实现数码管十进制循环计数的代码:
```
#include <reg52.h>
sbit KEY = P3^2; // 定义按键K1所接的IO口
// 数码管显示0-9的段码表
unsigned char code segTable[] = {
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90
};
// 数码管显示函数
void display(unsigned char num)
{
P0 = segTable[num];
}
// 外部中断1处理函数
void int1_isr() interrupt 2
{
static unsigned char cnt = 0;
cnt++;
if (cnt > 9) {
cnt = 0;
}
display(cnt);
}
// 主函数
void main()
{
display(0);
// 外部中断1初始化
IT1 = 1;
EX1 = 1;
EA = 1;
// 主循环
while (1) {
// 检测按键是否按下
if (KEY == 0) {
// 按键按下后延时一段时间,防止抖动
delay(1000);
// 再次检测按键是否按下
if (KEY == 0) {
int1_isr(); // 触发外部中断1
}
// 等待按键释放
while (KEY == 0);
}
}
}
```
该代码使用了外部中断1来控制数码管的计数。在外部中断1处理函数中,通过一个计数器来记录当前显示的数字,每次按下按键时计数器加1,当计数器超过9时,重新从0开始计数。在主函数中,通过无限循环来检测按键是否按下,若按键按下,则触发外部中断1来更新数码管的显示。同时,在按键按下后需要延时一段时间,防止按键抖动造成误触发。
阅读全文