微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 外部中断 控制数码管 为什么K4按键 不能使数码管熄灭?

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

时间:10-02 整理:3721RD 点击:

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;
}


你写的程序不行,重新写一个。
main()函数要有死循环,要不然程序跑飞了。
外部中断是来响应快速的外设的,按键不适合,完全没有必要用中断控制,直接按键扫描就行了。
把功能写main函数里,不要写在中断里。
中断里不要有delay()这种软件延时函数。

。刚学  程序是根据开发板卖家给的  程序改的  

P0口有没有接上拉电阻,另外可以把消抖延时缩短一些试试

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top