程序在这里啊?是用的中断
#include<at89x51.h>
#include<intrins.h>
#define unchar unsigned char
#define unint unsigned int
#define nop _nop_()
sbit clk=P2^0 ;
sbit din=P2^1 ;
sbit en=P2^2 ;
unchar dispbuf[9];
void delay(unint value)
{
while(value!=0) value--;
}
unsigned char second,min,hou;
unsigned char keycnt;
unsigned int tcnt;
unchar keyscan()
{ unchar row,col,i;
P1=0xf0;
row=P1&0xf0;
row=row&0xf0;
P1=0x0f;
col=P1&0x0f;
col=col&0x0f;
i=~(col|row);
return i;}
void tsled(void)
{ unchar ts0,i,j;
clk=0;
en=0;
delay(10);
for(j=0;j<9;j++)
{ ts0=dispbuf[j];
for(i=0;i<4;i++)
{ clk=1;
ts0=ts0<<1;
if(AC==1)
din=1;
else din=0;
clk=0;
nop;
delay(3);
}
}
en=1;
}
void main(void)
{
unsigned char key;
TMOD=0x2;
ET0=1;
EA=1;
second=0;
dispbuf[2]=second/10;
dispbuf[1]=second%10;
while(1)
{
if(keyscan()!=0)
{
if(key!=keyscan())
{ P0=0xff;}
key=keyscan();
switch(key)
{
case 0x18:
TH0=0x47;
TL0=0x47;
TR0=1;
break;
case 0x14:
TR0=0;
break;
case 0x12:
TR0=0;
keycnt=0;
second=0;
dispbuf[6]=0x0;
dispbuf[5]=0x0;
dispbuf[4]=0x0;
dispbuf[3]=0x0;
dispbuf[2]=0;
dispbuf[1]=0;
break;
case 0x38:
dispbuf[1]=dispbuf[1]+1;
break;
case 0x34:
dispbuf[2]=dispbuf[2]+1;
break;
}
}
dispbuf[8]=0x1;
dispbuf[7]=0x01;
dispbuf[0]=0x1;
tsled();
}
}
void t0(void) interrupt 1 using 0
{
tcnt++;
if(tcnt==5000)
{
tcnt=0;
second++;
if(second==60)
{ second=0;
min++;
if(min==60)
{ min=0 ;
hou++;
if(hou==24)
{ hou=0;}
}
}
dispbuf[6]=hou/10;
dispbuf[5]=hou%10;
dispbuf[4]=min/10;
dispbuf[3]=min%10;
dispbuf[2]=second/10;
dispbuf[1]=second%10;
}
} |