
#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
sbit smg1=P2^0;
sbit smg2=P2^1;
sbit smg3=P2^2;
sbit k1=P3^2;
sbit k3=P3^4;
sbit k4=P3^5;
sbit led=P2^7;
//数码管编码
uchar code smgduan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uint num=0;
//延时
void delay(uint i)
{
while(i--);
}
void main()//主函数
{
uchar k=0;
//设置INT1
IT1=1;//跳变沿出发方式(下降沿)
EX1=1;//打开INT0的中断允许。
EA=1;//打开总中断
while(1)
{
//显示
P0=smgduan[num/100];
smg1=0;
delay(100);
smg1=1;
P0=smgduan[num%100/10];
smg2=0;
delay(100);
smg2=1;
P0=smgduan[num%10];
smg3=0;
delay(100);
smg3=1;
if(!k4 && k!=4)//颠倒
{
k=4;
num=num%10*100+num/10%10*10+num/100;
}
if(!k3 && k!=3)//切换
{
k=3;
led=!led;
}
if(!k1 && k!=1)
{
k=1;
if(led)
{
num++;
}
else
{
if(num>0)
num--;
}
}
if(k1 && k3 && k4)
k=0;
}
}
void Int1()interrupt 2
{
num=num*10%1000;
}