程序在这里啊?是用的中断 #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;
} }
|