|
再來一個復(fù)雜點(diǎn)的
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- //======================
- uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- uchar code ACT[4]={0xfe,0xfd,0xfb,0xf7};
- sbit D=P3^7;
- //====================
- sbit D0=P1^0;
- sbit D1=P1^1;
- sbit D2=P1^2;
- sbit D3=P1^3;
- sbit D4=P1^4;
- sbit D5=P1^5;
- sbit D6=P1^6;
- sbit D7=P1^7;
- #define ON 0
- #define OFF 1
- uchar a[2];
- uchar cnt;
- bit outflag;
- //================
- void delay(uint k)
- {
- uint i,j;
- for(i=0;i<k;i++){
- for(j=0;j<121;j++)
- {;}}
- }
- //============
- void init(void)
- {
- TMOD=0x20;
- TH1=0xfd;
- TL1=0xfd;
- SCON=0x50;
- TR1=1;
- ES=1;
- EA=1;
- }
- //==============
- void main(void)
- {
- init();
- while(1)
- {
- D=1;P0=SEG7[a[0]];D=0;P2=ACT[1];delay(2);
- D=1;P0=SEG7[a[1]];D=0;P2=ACT[0];delay(2);
- if(outflag==1)
- {
- switch(a[0])
- {
- case 1:if(a[1]==1)D0=ON;else D0=OFF;break;
- case 2:if(a[1]==1)D1=ON;else D1=OFF;break;
- case 3:if(a[1]==1)D2=ON;else D2=OFF;break;
- case 4:if(a[1]==1)D3=ON;else D3=OFF;break;
- case 5:if(a[1]==1)D4=ON;else D4=OFF;break;
- case 6:if(a[1]==1)D5=ON;else D5=OFF;break;
- case 7:if(a[1]==1)D6=ON;else D6=OFF;break;
- case 8:if(a[1]==1)D7=ON;else D7=OFF;break;
- default:break;
- }
- outflag=0;
- }
- }
- }
- //==============
- void serial_serve(void) interrupt 4
- {
- uchar temp;
- RI=0;
- EA=0;
- temp=SBUF;
- switch(cnt)
- {
- case 0:if(temp=='#')cnt=1;else outflag=0;break;
- case 1:if((temp>0x30)&&(temp<0x39)){a[0]=temp-0x30;cnt=2;}
- else outflag=0;break;
- case 2:if(temp=='(')cnt=3;
- else outflag=0;break;
- case 3:if((temp>=0x30)&&(temp<=0x38)){a[1]=temp-0x30;cnt=4;}
- else outflag=0;break;
- case 4:if(temp==')'){cnt=0;outflag=1;}
- else outflag=0;break;
- default:break;
- }
- EA=1;
- }
復(fù)制代碼 |
|