#include <REGX51.h>
#define uchar unsigned char
#define NUM 02 //学号
#define UNIT_REPLACE 1 //如果学号最后一位为0 则用1替代
#define DIGIT_REPLACE 1 //如果学号倒数第二位为0 则用1替代
unsigned char m=NUM;
uchar unit; //倒数第一位
uchar digit; //倒数第二位
Uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共阳数码管0-9
unsigned char LEDAddr[]={0x01,0x02,0x04,0x08};
void delay(uchar i)
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void display()
{
P0=table[m/1000];
P2_0 = 0;
delay(5);
P2_0 = 1;
P0=table[m%1000/100];
P2_1 = 0;
delay(5);
P2_1 = 1;
P0=table[m%100/10];
P2_2 = 0;
delay(5);
P2_2 = 1;
P0=table[m%10];
P2_3 = 0;
delay(5);
P2_3 = 1;
}
void data_trans(void)
{
unit = NUM%10;
digit = NUM/10;
if (unit == 0)
unit = UNIT_REPLACE;
if (digit == 0)
digit = DIGIT_REPLACE;
}
void INT_0() interrupt 0 //加法
{
delay(10);
if (!P3_2)
{
m += digit;
}
// while(!P3_2);
}
void INT_1() interrupt 2 //减法
{
Delay (10);
if (!P3_3)
{
m -= unit;
}
// while(!P3_3);
}
void main()
{
P0=0x00;
EX0 = 1;
EX1 = 1;
IT0=1; //下降沿有效
IT1=1;
EA = 1;
data_trans();
while(1)
{
display();
}
}
你的delay是不是有一个写成首字母大写了
不知道你这个问题是否已经解决, 如果还没有解决的话: