c51单片机外部中断实验,需要编写程序,,,急急急!!!

2024-12-18 17:18:42
推荐回答(4个)
回答1:

具体的I/O口你根据你的电路设置,数码管编码也是根据你自己的电路编码,我的学习板测试通过。
希望可以给你做个参考
#include
#define uint unsigned int
#define uchar unsigned char
uchar num1,num2,qian,bai,shi,ge;//定义数据类型
uint num;
sbit k1=P3^2;//外部中断按键
sbit k2=P3^3;

sbit LED1=P2^7;//数码管第一位
sbit LED2=P2^6;
sbit LED3=P2^5;
sbit LED4=P2^4;
// 共阳数码管编码显示段码值0123456789ABCDEF- 这个根据电路实际情况编码
uchar code lednum[]={0x28,0xEB,0x32,0xA2,0xE1,0xA4,0x24,0xEA,0x20,
0xA0,0x60,0x25,0x3C,0x23,0x34,0x74,0xF7,0xFF};
void delay(uint);
void display(uchar,uchar,uchar,uchar);
void main()
{
EA=1; //开总中断
EX0 = 1;
EX1 = 1;
IT0 = 1;
IT1 = 1;
display(qian,bai,shi,ge);
while(1) //程序在这里不停的对数码管动态扫描同时等待中断发生
{

display(qian,bai,shi,ge);//调用数码管显示子函数
}
}
void display(uchar qian,uchar bai,uchar shi,uchar ge)//显示子函数
{
qian=num/1000;//千位分离
bai=num%1000/100; //百位分离
shi=num%100/10;//十位分离
ge=num%10;//个位分离

P0 =lednum[qian]; //取显示数据,段码十位
LED1=0; //点亮LED1(第一位)
delay(5); //延时
LED1=1; //熄灭LED1
P0=lednum[bai]; //取显示数据,段码个位
LED2=0; //点亮LED2(第二位)
delay(5); //延时
LED2=1; //熄灭LED2

P0 =lednum[shi]; //取显示数据,段码十位
LED3=0; //点亮LED3(第三位)
delay(5); //延时
LED3=1; //熄灭LED3
P0=lednum[ge]; //取显示数据,段码个位
LED4=0; //点亮LED4(第四位)
delay(5); //延时
LED4=1; //熄灭LED4

}
void delay(uint z) //带参数延时子函数
{
uint x,y;
for(x=z;x>0;x--) //z=200ms,即延时约200ms
for(y=110;y>0;y--);
}

void X0_INT() interrupt 0//外部中断0
{
num++; //按键key1按下时数码管计数器加1
}
//------------------------------------------
void X1_INT() interrupt 2//外部中断1
{
num--; //按键key2按下时数码管计数器减1

}

回答2:

这个很好处理一,复位处加一个按键,可以触发从头开始运行程序,外部中断0接一个按键,暂停程序就可以了。
#include
void ext0() interrupt 0
{
while(1);
}
main()
{
EX0=1;
EA=1;
IT0=1;
while(1)
{
.....你的主程序.....
}
}

回答3:

简单的很呢

回答4:

简单啊,你确定你学过单片机,这是最基本的了