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

,实验要求,k1外部中断0,k1=0,数码管数字加1;k2外部中断1,k2=0,数码管数字减

具体的I/O口你根据你的电路设置,数码管编码也是根据你自己的电路编码,我的学习板测试通过。
希望可以给你做个参考
#include<reg52.h>
#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

}
温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答