只包含按键和数码管部分

#include "stc15.h" //或着是 REG52.h 建议是 STC15.h
#define uchar unsigned char
#define uint unsigned int
#define FOSC 12000000L
/*变量定义*/
uchar Trg=0,Cont=0,flag=0;
uchar menu,set,add,sub;
uchar code LedChar[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
/* 声明 */
void Init();
void Timer_Init();
void BTN();
void display_u();
void Delay100us();
/* 函数 */
void main()
{
Init();
Timer_Init();
while(1)
{
if(flag)
{
flag=0;
BTN();
if(Trg&0x08)
{
menu++;
if(menu==4) menu =1;
}
else if(Trg&0x04)
{
set++;
if(set==3) set =1;
}
else if(Trg&0x02)
{
if(menu ==3) add++;
}
else if(Trg&0x01)
{
if(menu ==3) sub++;
}
}
}
}
void timer0() interrupt 1
{
static uint flag_cnt=0,dis_cnt=0;
flag_cnt++;
if(flag_cnt==10)
{
flag=1;
flag_cnt=0;
}
dis_cnt++;
if(dis_cnt==5)
{
dis_cnt=0;
display_u();
}
}
void Init()
{
P2=0XA0;
P0=0;
P2=0X80;
P0=0XFF;
}
void BTN()
{
unsigned char dat=P3^0xff;
Trg = dat & (dat^Cont);
Cont = dat;
}
void Timer_Init()
{
AUXR |= 0x80;
TL0 = 0xCD;
TH0 = 0xD4;
TR0 = 1;
ET0 = 1;
EA = 1;
}
void display_u()
{
uchar dis[8],i;
dis[0]=0Xc1;//0Xc1 0X88
dis[1]=0XFF ;
dis[2]=0XFF;
dis[3]=0XFF;
dis[4]=0XFF;
dis[5]=0XFF;
dis[6]=0XFF;
dis[7]=0XFF;
for(i=1;i<8;i++)
{
if(dis[i]==LedChar[0])
{
dis[i]=0xff;
}
else break;
}
for(i=0;i<8;i++){
P2&=0x1f;
P0=1<<i;
P2|=0xc0;
P2&=0x1f;
P0=dis[i];
P2|=0xe0;
Delay100us();
P0=0xff;
}
P2&=0x1f;
}
void Delay100us() //@12.000MHz
{
unsigned char i, j;
i = 2;
j = 39;
do
{
while (--j);
} while (--i);
}