第十四集 IO中断 课后小练习 多路抢答器

由于手头上暂时只有擎天柱,就用擎天柱上的P41-P43模拟三个抢答按键,序号为1,2,3,用虚拟数码管最左边一位显示抢答的序号,用外部中断1重置
代码如下:
u8 nu;void INT1_Init (void){
IT1=1; //下降沿中断
EX1=1; //打开中断允许
EA =1; //打开总中断}void INT_ISR(void) interrupt 2
{
nu=0;
P4INTE=0X0E; //打开总中断1110,P41,p42,p43}void IO_ISR_Init(void){P4IM0=0X00; //下降沿触发
P4IM1=0X00;P4INTE=0X0E; //打开总中断1110,P41,p42,p43}void P4_IO_ISR(void) interrupt 41
{
u8 intf;
intf=P4INTF;if(intf)
{
P4INTF=0;
if(intf&0x02){
nu=1;
P4INTE=0X00;
}
if(intf&0x04){
nu=2;
P4INTE=0X00;
}
if(intf&0x08){
nu=3;
P4INTE=0X00;
}
}
if(intf)
{
P4INTF=0;
if(intf&0x02){
nu=1;
P4INTE=0X00;
}
if(intf&0x04){
nu=2;
P4INTE=0X00;
}
if(intf&0x08){
nu=3;
P4INTE=0X00;
}
}
}void SEG_PC(void){u8 cod[8];
cod[0] = SEG_NUM[nu]; //小时的十位
cod[1] = SEG_NUM[16];
cod[2] = SEG_NUM[16];
cod[3] = SEG_NUM[16];
cod[4] = SEG_NUM[16];
cod[5] = SEG_NUM[16];
cod[6] = SEG_NUM[16];
cod[7] = SEG_NUM[16];
SEG7_ShowCode(cod);
}
附件:demo.rar