- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code number[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- uchar code start[4]={0xbf,0x8e,0x8e,0xbf};
- uchar code initial[4]={0xc0,0xc0,0xc0,0xc0};
- uchar code bell[4]={0x83,0x84,0xc7,0xc7};
- uchar code open[4]={0xc0,0x8c,0x86,0xc8};
- uchar code no[4]={0xbf,0xc8,0xc0,0xbf};
- uchar mima[4]={0xc0,0xc0,0xc0,0xc0};
- uchar W[4]={0x0c,0xff,0xff,0xff};
- uchar code p[4]={0xbf,0xbf,0xbf,0xbf};
- uchar code o[4]={0x90,0xa3,0xa3,0xa1};
- uint i=0,error=0,k=0,wc=4;
- sbit H1=P3^0;
- sbit H2=P3^1;
- sbit H3=P3^2;
- sbit H4=P3^3;
- sbit S1=P2^3;
- sbit S2=P2^2;
- sbit S3=P2^1;
- sbit S4=P2^0;
- sbit pl=P3^7;
- void delayMS(uint x)
- {
- uchar n;
- while(x--)
- {
- for(n=120;n>0;n--);
- }
- }
- void display()
- {
- P2=0x8f;
- P0=W[0];
- delayMS(4);
- P2=0x4f;
- P0=W[1];
- delayMS(4);
- P2=0x2f;
- P0=W[2];
- delayMS(4);
- P2=0x1f;
- P0=W[3];
- delayMS(4);
- P0=0xff;
- }
- void voice()
- {
- uchar i=0;
- while(i++<=50)
- {
- delayMS(1);
- if(i%3)
- pl = ~pl;
- }
- pl = 0;
- }
- uint collect()
- {
- uint a=0;
- H1=H2=H3=H4=0;
- S1=S2=S3=S4=1;
- if(S1==0)
- {
- delayMS(10);
- if(S1==0)
- {
- S1=0;
- H1=H2=H3=H4=1;
- if(H1==0)
- {
- while(!H1);
- a=1;
- }
- else if(H2==0)
- {
- while(!H2);
- a=5;
- }
- else if(H3==0)
- {
- while(!H3);
- a=9;
- }
- else if(H4==0)
- {
- while(!H4);
- a=13;
- }
- }
- }
- else if(S2==0)
- {
- delayMS(10);
- if(S2==0)
- {
- S2=0;
- H1=H2=H3=H4=1;
- if(H1==0)
- {
- while(!H1);
- a=2;
- }
- else if(H2==0)
- {
- while(!H2);
- a=6;
- }
- else if(H3==0)
- {
- while(!H3);
- a=10;
- }
- }
- }
- else if(S3==0)
- {
- delayMS(10);
- if(S3==0)
- {
- S3=0;
- H1=H2=H3=H4=1;
- if(H1==0)
- {
- while(!H1);
- a=3;
- }
- else if(H2==0)
- {
- while(!H2);
- a=7;
- }
- else if(H3==0)
- {
- while(!H3);
- a=11;
- }
- }
- }
- else if(S4==0)
- {
- delayMS(10);
- if(S4==0)
- {
- S4=0;
- H1=H2=H3=H4=1;
- if(H1==0)
- {
- while(!H1);
- a=4;
- }
- else if(H2==0)
- {
- while(!H2);
- a=8;
- }
- else if(H3==0)
- {
- while(!H3);
- a=12;
- }
- else if(H4==0)
- {
- while(!H4);
- a=16;
- }
- }
- }
- if(a!=0)
- delayMS(10);
- return a;
- }
- uchar code SONG_TONE[]=
- {
- 212,212,190,212,159,169,212,212,190,212,142,
- 159,212,212,106,126,129,169,190,119,119,126,159,142,159,0
- };
- uchar code SONG_LONG[]=
- {
- 9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0
- };
- void PlayMusic()
- {
- uint f =0,j,k;
- while(SONG_LONG[f]!=0||SONG_TONE[f]!=0)
- {
- for(j=0;j<SONG_LONG[f]*20;j++)
- {
- pl = ~pl;
- for(k=0;k<SONG_TONE[f]/3;k++);
- }
- delayMS(10);
- f++;
- }
- }
- void main()
- {
- loop:while(wc--)
- W[wc]=start[wc];
- wc=4;
- loop3:pl=0;
- i=0;
- while(1)
- {
- display();
- k=collect();
- if(k>=1&&k<=10&&i<4)
- {
- W[i++]=number[k-1];
- }
- else if(k==12)
- { uchar n=0,m=4;
- while(W[n]==mima[n])
- {
- n++;
- if(n==4)
- {
- while(m--)
- W[m]=open[m];
- P1=0xfd;
- PlayMusic();
- delayMS(500);
- error=0;
- goto loop2;
- }
- }
- while(m--)
- W[m]=no[m];
- error++;
- goto loop3;
- }
- k=0;
- while(error==3)
- {
- pl=1;
- while(1)
- {
- while(wc--)
- W[wc]=bell[wc];
- wc=4;
- display();
- k=collect();
- P1=0xfe;
- voice();
- delayMS(100);
- P1=0xff;
- delayMS(100);
- if(k==16)
- goto loop;
- }
- k=0;
- }
- }
- loop2:i=0;
- while(1)
- {
- display();
- k=collect();
- if(k==16)
- {
- goto loop;
- }
- else if(k==13)
- { P1=0xfb;
- {
- while(wc--)
- W[wc]=p[wc];
- wc=4;
- i=0;
- while(1)
- {
- display();
- k=collect();
- if(k>=1&&k<=10&&i<4)
- {
- W[i++]=number[k-1];
- }
- else if(k==12)
- {
- goto loop4;
- }
- }
- loop4: while(wc--)
- W[wc]=p[wc];
- wc=4;
- i=0;
- while(1)
- {
- display();
- k=collect();
- if(k>=1&&k<=10&&i<4)
- {
- W[ i]=number[k-1];
- mima[i++]=number[k-1];
- }
- else if(k==12)
- { P1=0xff;
- delayMS(500);
- P1=0xfd;
- delayMS(500);
- P1=0xff;
- while(1)
- {
- while(wc--)
- W[wc]=o[wc];
- wc=4;
- display();
- k=collect();
- if(k==16)
- goto loop;
- }
- }
- }
- }
- }
- }
- }
复制代码
|