51的外部中断问题求解
是你自己马虎所致!是你自己马虎所致!是你自己马虎所致!
你写的第一个错误:
sbit K3=P3^3; //INT1
sbit K4=P3^4; //T0,这一点从你最后一张图片里即可看到。
应改为: //请看独立键盘图片!
sbit K3=P3^2; //INT0,右移
sbit K4=P3^3; //INT1,左移
你写的第二个错误:
while(1) {
if(KeyValue)
GPIO_LED=_crol_(GPIO_LED,1); //下一行没有延时函数,LED会急速运行你自然是无法看到了!
else
GPIO_LED=_cror_(GPIO_LED,1);
Delay(20); //这一行虽然添加了延时函数,但参数较小!
}
至于怎么改就不需要我多说了吧 ~~~^_^~~~
程序如下:
#include <reg51.h>
#include <intrins.h>
#define GPIO_LED P2
void IntConfiguration(); //中断程序
void Delay (unsigned int n); //延时程序
sbit K3=P3^3;
sbit K4=P3^4;
unsigned char KeyValue=0;
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main (void)
{
GPIO_LED=0xfe;
IntConfiguration();
while(1)
{
if(KeyValue)
GPIO_LED=_crol_(GPIO_LED,1);
else
GPIO_LED=_cror_(GPIO_LED,1);
Delay(20);
}
}
/*******************************************************************************
* 函 数 名 : IntConfiguration
* 函数功能 : 中断
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void IntConfiguration()
{
IT0=1;
EX0=1;
IT1=1;
EX1=1;
EA=1;
}
void Int0() interrupt 0
{
Delay(1);
if(K3==0)
KeyValue=1;
}
void Int1() interrupt 2
{
Delay(1);
if(K4==0)
KeyValue=0;
}
/*******************************************************************************
* 函 数 名 : Delay
* 函数功能 : 延时 10*n ms
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Delay (unsigned int n)
{
unsigned char i,j;
for(;n>0;n--)
for(i=130;i>0;i--)
for(j=38;j>0;j--) ;
}
这是独立按键,led原理图,k3连接p3.2 k4连接p3.3



你这样粘程序没人会看的,说说问题的关键,具体现象
是我自己粗心了,谢谢解答!
谢谢解答!另外我试了一下这个延时函数参数够了(大概200ms),前面写的太粗心了……谢谢啦!^_^
