求at89c51例程:三个按键控制三个灯亮,用外部中断C程序

如题所述

......................抱歉,之前没看到用中断,现在在程序上稍作修改

P3口为控制口(中断int0——p3.2),P1口为输出口,p2口提供高电平,LED为共阳极,程序如下:

#include <reg51.h>

#define   uchar   unsigned char

#define   uint    unsigned int

sbit     k1=P2^0;

sbit     k2=P2^1;

sbit     k3=P2^2;

sbit     LED_1=P1^0;

sbit  LED_2=P1^1;

sbit     LED_3=P1^2;

void relay(uint ms)

{

   uint i,j;

   for(i=ms;i>0;i--)

        for(j=110;j>0;j--);

}

void main()

{

    while(1)

   {

     EA=1;

 ET0=1;

  while(P3^2==0)

  {

   if(k1==0)

{

LED_1=0;     

relay(100);

 }

      

if(k2==0)

{

LED_2=0;

   relay(100);

 }

      if(k3==0)

   {

LED_3=0;

relay(100);

 }

  }   

           

      

    }

程序完毕!

下面是电路图:

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-01-19
提问要求使用中断,但是采纳答案,并没有用中断。

按照采纳答案的电路,正确程序如下:

#include <reg51.h>

sbit P32 = P3^2;

void main()
{
EX0 = 1; //开外部中断
EA = 1;
while(1); //等待中断来临
}

X0_INT () interrupt 0
{
P1 = P2; //LED 发光
while(!P32);//等待按键释放
P1 = P2;
}
第2个回答  2011-07-10
给个思路:定义三个引脚做为控制开关 然后写引脚状态扫描程序 根据引脚状态热 设置外部中断引脚 的状态 是P3.x 然后置P0口的引脚的高低电平控制LED灯
第3个回答  2011-07-22
应该是在中断程序中,点亮相应的LED吧!!
在中断中查询是哪一个按键被触发!!!!!
我也是刚学!!不知道能否不加门电路!!!?
相似回答