|
本帖最后由 daniu 于 2014-12-25 13:16 編輯
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code tab[]={0x88,0Xbe,0Xc4,0X94,0Xb2,0X91,0X81,0Xbc,
- 0X80,0X90,0xff,0x7f};
- sbit dd=P1^1;
- uchar t,tt;
- void delay(uchar x) //毫秒級延時函數
- {
- uchar y;
- for(;x>0;x--)
- for(y=110;y>0;y--);
- }
- scanf() //按鍵處理函數
- {
- uchar temp,temp1,i;
- P0=0xf0; //給P0口賦值為oxf0,用于列掃描
- if(P0!=0xf0) //判別是否有鍵按下
- {
- delay(2);
- if(P0!=0xf0) //再次判別是否有鍵按下
- {
- temp1=P0; //P0值賦給temp1
- P0=0x0f; //P0值賦為0x0f,用于行掃描
- temp=temp1|P0; //將行列掃描值合并,賦給temp
- }
- switch(temp)
- {
- case 0xee:i=1; break;
- case 0xed:i=2; break;
- case 0xeb:i=3; break;
- case 0xe7:i=4; break;
- case 0xde:i=5; break;
- case 0xdd:i=6; break;
- case 0xdb:i=7; break;
- case 0xd7:i=8; break;
- case 0xbe:i=9; break;
- case 0xbd:i=0; break;
- }
- }
- else return 10;
- return i;
- }
- void main()
- {
- uchar z[7]={8,0,9,2,3,4};
- uchar a=0,e=0,i,k=0;
- SCON=0;
- TMOD=0x01;
- EA=1;
- ET0=1;
- TR0=1;
- TH0=15536/256;
- TL0=15536%256;
- while(1)
- {
- z[0]=8-z[1]-t;if(z[0]==0){z[2]--;t=0;}
- if(e==4){e=0;z[1]++;}
- if(k==1)
- {
- z[5]=TH0%10;
- z[3]=TL0%10; k=0;
- z[4]=tt%10;
- }
- for(i=0;i<6;i++)
- {
- SBUF=tab[z[ i]];
- while(!TI);
- TI=0;
- }
- delay(100);
- if(scanf()!=10)
- {
- delay(15);
- if(scanf()!=10)
- {
- z[6]=scanf();
- while(scanf()!=10);
- TR0=0;
- a=z[4]*10+z[5]+z[6]+z[3];
- if(a%7==0)
- {
- e++;
- k=1;
- t=0;
- dd=0;
- delay(200);
- dd=1;
- }
- else
- {
- z[2]--;
- k=0;
- }
- }
- while(z[2]==0){P0=0xff;P2=0xff;dd=0;SBUF=tab[10];}
- while(z[1]==3){P0=0;P2=0;dd=0;delay(200); dd=1;delay(200);SBUF=tab[8];}
- TR0=1;
- }
- }
- }
- void tiemr0(void) interrupt 1
- {
- TH0=15536/256;
- TL0=15536%256;
- tt++;
- if(tt==100){tt=0;t++;}
- }
復制代碼
|
|