外部中断 控制数码管 为什么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口有没有接上拉电阻,另外可以把消抖延时缩短一些试试