程序问题,外部中断触发不了,请大神指点

2019-07-15 12:50发布

#include<reg52.h>
sbit key_1 = P3^7;//按键对应这个口
sbit count = P3^3;//外部中断触发端口是这个
unsigned int i,z;
char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯对应这个的位操作
void delay(uint);
void main()
{
        count = key_1;
        P2 = table[i];
        EA = 1;
        EX1 = 1;外部中断1
        IT1 = 0;低电平触发
        while(1);
}
void int1_int()interrupt 2
{
        i++;//按一次键,i加一次,数组对应的位数变化一次,
        if(i >= 8)i =0;       
}
void delay(z)
{
        unsigned int x,y;
        for(x = z;x>0;x--)
                for(y = 110;y>0;y--);
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
明天同学
1楼-- · 2019-07-16 02:27
修改好的程序如下,我语法不规范。明显,应用程序写到了初始化的前面,其实 i 在中断里面确实自加,但是, count = key_1; P2 = table[i];实际上就执行了一次,后面都是while(1);自己在玩。小结:这里修改之后,按一次按键,灯有时候跳了多次,而不是一个个的亮。。所以还要加一个按键消抖才好。
#include<reg52.h>
sbit key_1 = P3^7;//按键对应这个口
sbit count = P3^3;//外部中断触发端口是这个
unsigned int i,z;
char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯对应这个的位操作
void delay(uint);
void main()
{
      
        EA = 1;
        EX1 = 1;外部中断1
        IT1 = 0;低电平触发
        while(1)
           {
               count = key_1;
               P2 = table[i];
          }
}
void int1_int()interrupt 2
{
        i++;//按一次键,i加一次,数组对应的位数变化一次,
        if(i >= 8)i =0;        
}
void delay(z)
{
        unsigned int x,y;
        for(x = z;x>0;x--)
                for(y = 110;y>0;y--);
}

一周热门 更多>