c51用中断控制按键实现数码管显示数字的加减,,main函数里已经声明了num,为什么在中断函数里还是不可以直接使用?
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit K1 = P3^0; // 定义K1键
sbit K2 = P3^1; // 定义K2键
uchar code display_code[10] = { 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90 }; // 数码管段选编码,0-9
void delay(uint xms) // 延时函数
{
uint i, j;
for (i=xms;i>0;i--)
for (j=112;j>0;j--);
}
void External1_Isr() interrupt 2 // 外部中断1中断服务函数
{
delay(10); // 延时去抖
if (K1 == 0) // 确认按下K1键
{
num++; // 数码管显示数值加1
if (num > 99) num = 0; // 数据范围为00-99
}
}
void External2_Isr() interrupt 0 // 外部中断0中断服务函数
{
delay(10); // 延时去抖
if (K2 == 0) // 确认按下K2键
{
num--; // 数码管显示数值减1
if (num > 99) num = 99; // 数据范围为00-99
}
}
void main()
{
uchar num = 0; // 数码管显示数值
uchar ten, unit; // 十位和个位数字
IT0 = 1; // 外部中断0下降沿触发
EX0 = 1; // 允许外部中断0
IT1 = 1; // 外部中断1下降沿触发
EX1 = 1; // 允许外部中断1
EA = 1; // 允许总中断
while(1)
{
ten = num / 10; // 获取十位数字
unit = num % 10; // 获取个位数字
P0 = display_code[ten]; // 显示十位数字
P2 = 0xFE; // 选择第一个数码管
delay(5); // 延时一段时间
P2 = 0xFF; // 关闭数码管显示
P0 = display_code[unit]; // 显示个位数字
P2 = 0xFD; // 选择第二个数码管
delay(5); // 延时一段时间
P2 = 0xFF; // 关闭数码管显示
}
}