/ 1.按下S7后抬起,L1点亮,再次按下S7,L1熄灭;
#include <stc15.h>
#define uchar unsigned char
#define uint unsigned int
void delayms(int ms);
void allinit();
void keyscan();
void Timer0Init(void);
unsigned int keytime=0;
uchar S7=0,S6=0;
uint tt=0;
bit fla=0;
#define LED 4
#define ULN 5
#define COM 6
#define ABC 7
unsigned char code t_display[]={
0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,
0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};
unsigned char code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
void choose(unsigned char x)
{
switch(x)
{
case 0:P2=P2&0x1F;break;
case LED:P2=(P2&0x1F)|0x80;break;
case ULN:P2=(P2&0x1F)|0xA0;break;
case COM:P2=(P2&0x1F)|0xC0;break;
case ABC:P2=(P2&0x1F)|0xE0;break;
default:break;
}
}
char SMGbuf[20];
char SMGdat[8];
unsigned char PageX=0;
unsigned int num=0;
void dispX(unsigned char pagex)
{
switch(pagex)
{
case 0:
SMGdat[0]=t_display[num/10];
SMGdat[1]=t_display[num%10];
SMGdat[2]=0x40;
SMGdat[3]=t_display[num/10];
SMGdat[4]=t_display[num%10];
SMGdat[5]=0x67;
break;
case 1:
SMGdat[0]=t_display[num/10];
SMGdat[1]=t_display[num%10];
SMGdat[2]=0x40;
SMGdat[3]=0x40;
SMGdat[4]=0x40;
SMGdat[5]=0x67;
break;
}
}
void disp()
{
static unsigned char i=0;
choose(COM);
P0=0x00;
choose(0);
choose(ABC);
P0=0xFF;
choose(0);
choose(COM);
P0=T_COM[i];
choose(0);
choose(ABC);
P0=~SMGdat[i];
choose(0);
i++;
if(i>=8)i=0;
}
void main()
{
allinit();
Timer0Init();
EA=1;ET0=1;
while(1)
{
keyscan();
}
}
unsigned char S5cnt=0;
unsigned char S5timeflag=0;
unsigned int S5time=0;
unsigned int longtime=800;
unsigned char LEDbuf=0xFF;
unsigned char ULNbuf=0x00;
void keyscan()
{
if(P30==0)
{
delayms(10);
if(P30==0)
{
choose(LED);
LEDbuf =LEDbuf^1;
P0=LEDbuf;
choose(0);
PageX++;
if(PageX==2)PageX=0;
}
while(!P30)
{
}
}
else if(P31==0)
{
delayms(5);
if(P31==0)
{
S6=1;
choose(LED);
LEDbuf =LEDbuf&(~0x02);
P0=LEDbuf;
choose(0);
PageX=0;
}
}
else if((S6==1)&&(P31==1))
{
S6=0;
choose(LED);
LEDbuf =LEDbuf|0x02;
P0=LEDbuf;
choose(0);
PageX=1;
}
if(P32==0)
{
delayms(10);
if(P32==0)
{
if(S5cnt==0)
{
longtime=800;
S5cnt=1;
S5timeflag=1;
S5time=0;
}
else if(S5cnt==1)
{
if((S5time<=300))
{
choose(LED);
LEDbuf =LEDbuf^0x04;
P0=LEDbuf;
num=num+3;
if(num>=99)num=0; choose(0);
S5cnt=0;
S5timeflag=0;
S5time=0;
}
}
}
while(!P32)
{
if(S5time>longtime)
{
longtime=longtime+100;
num=num+1;
if(num>=99)num=0;
}
}
}
if(P32==1 && S5time>500)
{
S5timeflag=0;
S5time=0;
S5cnt=0;
choose(LED);
LEDbuf =LEDbuf^0x40;
P0=LEDbuf;
choose(0);
num=num+2;
if(num>=99)num=0;
}
}
void Timer0Init(void)
{
AUXR |= 0x80;
TMOD &= 0xF0;
TL0 = 0x20;
TH0 = 0xD1;
TF0 = 0;
TR0 = 1;
}
void time0() interrupt 1
{
if(++tt==1200);
if(S5timeflag==1)
{
S5time++;
if(S5time>=10000)S5time=0;
}
else if(S5timeflag==0)S5time=0;
dispX(PageX);
disp();
}
void delayms(int ms)
{
uint i,j;
for(i=ms;i>0;i--)
for(j=845;j>0;j--);
}
void allinit()
{
P2=0XA0;P0=0X00;
P2=0X80;P0=0XFF;
P2=0XC0;P0=0XFF;
P2=0XFF;P0=0XFF;
}