【求单片机C语言程序】STC89C52通过两个外部中断P3.2和P3.3,来控制P1.0和P1.1的数码管亮和灭,一定keil C

说明:通过外部中断0【P3.2】,P1.0的数码管亮,中断结束后,数码管灭;再由外部中断1【P3.3】,P1.1的数码管亮,次中断结束后,数码管灭;简言之就是一个中断只控制一个数码管,中断之间在功能上没有必然的联系,编程环境keil C51。
以下是我编的程序,就是一个中断控制一个数码管,但是当有两个中断时,我就抓瞎了
#include <reg52.h>
sbit D1=P1^0;
void main()
{
D1=1;
EA=1;
EX0=1;
}
void exter() interrupt 0
{
D1=0;
}
求高手帮我改改程序,改成两个中断的那种,功能要求都写在上面了~【希望能有程序注释】3Q,我会去keil里面模拟的~~o()^))o
P1.0和P1.1口上接的都是普通LED小灯,上面说的数码管=LED小灯,希望别误会,急用~

/*模块低电平有效、外部中断0、1为低电平出发*/
#include "reg52.h"
void delay( char i)
{
unsigned char t;
while(i--)
{
for(t=0;t<108;t++);
}
}
void INT0_ROUTING() interrupt 0//外部中断0子程序
{
P0=0xfe;//LED0点亮
while((P3|0xfb)==0xff);//等待外部中断0口(P3^2松开)
delay(10);//延时去抖动
P0=0xff;//LED0熄灭
}
void INT0_ROUTING() interrupt 2
{
P0=0xfd;//LED1点亮
while((P3|0xf7)==0xff);//等待外部中断1口(P3^3松开)
delay(10);//延时去抖动
P0=0xff;//LED1熄灭
}

void main()
{
EA=1;//中断总开关
EX0=1;//外部中断0开
EX1=1;//外部中断1开
/*默认低电平触发*/
while(1);//死循环 防止跑飞
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-11-17
#include <reg52.h>

tpyedef unsigned int uint;
typedef unsigned char uchar;

#define mLedStatusOn 0
#define mLedStatusOff 1

sbit ledFirstCom = P1^0;
sbit ledSecondCom = P1^1;

void InitSys(void) {
ledFirstCom = mLedStatusOff;
ledSecondCom = mLedStatusOff;

IT0 = 0; //低电平有效,模拟按键效果
IT1 = 0;
EA = 1;
EX0 = 1;
EX1 = 1;
}

void IsrEx0(void) interrupt 0 using 1{
ledFirstCom ~= ledFirstCom;
IE0 = 0; // 防止按键误抖动重新挂起中断
}

void IsrEx1(void) interrupt 2 using 2{
ledSecondCom ~= ledSecondCom;
IE1 = 0; // 防止按键误抖动重新挂起中断
}

void main(void) {
InitSys(); //初始化系统,配置外部中断寄存器,初始化LED为灭
while(1);
}
第2个回答  推荐于2016-01-02
#include <reg52.h>
sbit D1=P1^0;
sbit D2=P1^1;
void main()
{
D1=1;
D2=1;
EA=1;
EX0=1;
EX1=1;
while(1); //死循环一定要加上.....
}
void exter() interrupt 0
{
D1=!D1;
}

void exter() interrupt 1
{
D2=!D2;
}本回答被网友采纳
第3个回答  2010-11-17
参考看看:
http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/644b57c3e858a3160ff47751.html
再慢慢找找,C语言的,也能找到。