#include <reg52.h> #include <intrins.h> #define uint unsigned int #define uchar unsigned char #define time_value() {TH0=0x00; TL0=0x00;} sbit io=P3^2; //無線接口 sbit P14=P1^4; //開LED燈 sbit P26=P2^6; //關數碼管 sbit P27=P2^7; sbit P24=P2^4; //關點陣 uchar flag,flag_rev; uint time0[25]; uint time1[25]; uchar disp_dat[3]; void init(void) { IT0=1; //INT0 EX0=1; EA=1;
TMOD=0x01; time_value(); TR0=0;
P26=0; P24=0; P27=0; P14=0; } void int0_srv() interrupt 0 { TR0=1; flag=1; flag_rev=1; EA=0; } void main() { uchar value; uchar i,j; init(); loop: if(flag_rev) { flag_rev=0; time_value(); while(!io); //0 time0[0]=TH0*256+TL0; time_value(); while(io);//1 time1[0]=TH0*256+TL0;//同步碼 if((time1[0]+time0[0])>10000) { for(i=1;i<25;i++) { time_value(); while(!io); time0=TH0*256+TL0; time_value(); while(io); time1=TH0*256+TL0; } TR0=0; for(i=0;i<3;i++) { value=0; for(j=1;j<9;j++) { value=value<<1; if(time0[8*i+j]>700)// //if(time0[8*i+j]>time1[8*i+j]) { value=value|0x01; } } disp_dat=value; } //EA=1; } EA=1; } while(1) { if(flag) { flag=0; goto loop; } //P0=disp_dat[2]; switch(~disp_dat[2]) { case 0x03:P0=0xfe;break; case 0x0c:P0=0xfd;break; case 0x30:P0=0xfb;break; case 0xc0:P0=0xf7;break; default:break; } } } |