外部中断 控制数码管 为什么K4按键 不能使数码管熄灭????????

2019-07-15 10:10发布


void Int1()        interrupt 2                //外部中断1的中断函数
{
        delay(1000);         //延时消抖
        if(k4==0)
        P0=0xff;
}
  P0 是阴极     这是我对   外部中断1的使用程序  不知道 为什么不能实现数码管的熄灭 ??? 下面是完整的程序   如果 有大佬烦请花一分钟帮我看下  吧 谢谢 !!!!
#include "reg51.h"                         
#include<intrins.h>

typedef unsigned int u16;         
typedef unsigned char u8;

sbit SRCLK=P3^6;
sbit RCLK=P3^5;
sbit SER=P3^4;
sbit k3=P3^2;
sbit k4=P3^3;

void Int0Init()
{
        IT0=1;
        EX0=1;       
        EA=1;
}

void Int1Init()
{
        IT1=1;
        EX1=1;
        EA=1;
}

u8 ledduanZ[]={0x00,0x42,0x46,0x4a,0x52,0x62,0x42,0x00};
u8 ledweiZ[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
u8 ledduanY[]={0x80,0x40,0x20,0x1f,0x20,0x40,0x80,0x00};
u8 ledweiY[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};


void delay(u16 i)
{
        while(i--);       
}

void Hc595SendByte(u8 dat)
{
        u8 a;
        SRCLK=0;
        RCLK=0;
        for(a=0;a<8;a++)
        {
                SER=dat>>7;
                dat<<=1;

                SRCLK=1;
                _nop_();
                _nop_();
                SRCLK=0;       
        }

        RCLK=1;
        _nop_();
        _nop_();
        RCLK=0;
}


void main()
{
Int0Init();                       
Int1Init();                       
       
}
void Int0()        interrupt 0               
{
        delay(1000);         
        if(k3==0)
        {
                u8 i;
        while(1)
        {
                u16 j=100;
                P0=0x7f;
                while(j--)
                {
                for(i=0;i<8;i++)
                {
                        P0=ledweiZ[i];                 
                        Hc595SendByte(ledduanZ[i]);       
                        delay(100);                  
                        Hc595SendByte(0x00);
                }
            }
             j=100;
       
                P0=0x7f;
                        while(j--)
                {
                for(i=0;i<8;i++)
                {
                        P0=ledweiY[i];                 
                        Hc595SendByte(ledduanY[i]);       
                        delay(100);                  
                        Hc595SendByte(0x00);
                }
                }               
        }               
        }
}
void Int1()        interrupt 2               
{
        delay(1000);       
        if(k4==0)
         P0=0xff;
}




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。