主程序数码管从0000开始按下k3一次加1,至1111后变为0000继续递加;按下k4,主程序显示2222
提问必须写清楚是2个外部中断的二进制加法
1.把需求描述清楚。
2.贴出代码和电路图。
#include <INTRINS.H>
#include <REGX52.H>
#define uchar unsigned char
sbit button1 = P3^2;
sbit button2 = P3^3;
sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;
unsigned int i;
char code s[]={0x5b,0x5b,0x5b,0x5b};
void delay_ms(unsigned int n)
{
int x,y;
for(x=n;x>0;x--)
for(y=114;y>0;y--);
}
void show(i)
{
switch(i)
{
case -1:
LSC=1;LSB=1;LSA=1;
P0=0x5b;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x5b;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x5b;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x5b;
delay_ms(5);
break;
case 0:
LSC=1;LSB=1;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x3f;
delay_ms(5);
break;
case 1:
LSC=1;LSB=1;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x3f;
delay_ms(5);
break;
case 2:
LSC=1;LSB=1;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x3f;
delay_ms(5);
break;
case 3:
LSC=1;LSB=1;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x3f;
delay_ms(5);
break;
case 4:
LSC=1;LSB=1;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x3f;
delay_ms(5);
break;
case 5:
LSC=1;LSB=1;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x3f;
delay_ms(5);
break;
case 6:
LSC=1;LSB=1;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x3f;
delay_ms(5);
break;
case 7:
LSC=1;LSB=1;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x3f;
delay_ms(5);
break;
case 8:
LSC=1;LSB=1;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x06;
delay_ms(5);
break;
case 9:
LSC=1;LSB=1;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x06;
delay_ms(5);
break;
case 10:
LSC=1;LSB=1;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x06;
delay_ms(5);
break;
case 11:
LSC=1;LSB=1;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x06;
delay_ms(5);
break;
case 12:
LSC=1;LSB=1;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x06;
delay_ms(5);
break;
case 13:
LSC=1;LSB=1;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x06;
delay_ms(5);
break;
case 14:
LSC=1;LSB=1;LSA=1;
P0=0x3f;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x06;
delay_ms(5);
break;
case 15:
LSC=1;LSB=1;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=1;LSA=0;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=1;
P0=0x06;
delay_ms(5);
break;
LSC=1;LSB=0;LSA=0;
P0=0x06;
delay_ms(5);
break;
}
}
void main()
{
i=0;
IT0 = 0;
EX0 = 1;
EA = 1;
EX1 = 1;
IT1 = 0;
while(1)
{
show(i);
if(i==-1){
show(-1);
}
}
}
void X0_INT() interrupt 1
{
if(button1==0){
delay_ms(5);
if(button1==0){
i++;
if(i==16){
i=0;
}
}
while(!button1);
}
}
void X_INT() interrupt 0
{
if(button2==0){
delay_ms(5);
if(button2==0){
i=-1;
while(!button2);
}
}
}
按键循环移位