- #include<reg52.h>
- typedef unsigned char u16;
- typedef unsigned int u8;
- sbit IRIN=P3^2;
- sbit LSA=P2^2;
- sbit LSB=P2^3;
- sbit LSC=P2^4;
- u8 IrValue[6];
- u8 DisplayData[8];
- u8 time;
- void delay(u16 i)
- {
- while(i--);
- }
- u8 code smgduan[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76};
- void DigDisplay()
- {
- u8 i;
- for(i=0;i<3;i++)
- {
- switch(i)
- {
- case(0):
- LSA=0;LSB=0;LSC=0; break;
- case(1):
- LSA=1;LSB=0;LSC=0; break;
- case(2):
- LSA=0;LSB=1;LSC=0; break;
- }
- P0=DisplayData[i];
- delay(100);
- P0=0x00;
- }
- }
- void IrInit()
- {
- EA=1;
- EX0=1;
- IT0=1;
- IRIN=1;
- }
- void main()
- {
- IrInit();
- while(1)
- {
- DisplayData[0]=smgduan[IrValue[2]/16];
- DisplayData[1]=smgduan[IrValue[2]%16];
- DisplayData[2]=smgduan[16];
- DigDisplay();
- }
- }
- void ReadIr() interrupt 0
- {
- u8 i,j;
- u16 err;
- time=0;
- if(IRIN==0)
- {
- err=900;
- while((IRIN==0)&&(err>0))
- {
- delay(1);
- err--;
- }
-
- if(IRIN==1)
- {
- err=450;
- while((IRIN=1)&&(err>0))
- {
- delay(1);
- err--;
- }
- }
- for(i=0;i<4;i++)
- {
- for(j=0;j<8;j++)
- {
- err=60;
- while((IRIN==0)&&(err>0))
- {
- delay(1);
- err--;
- }
- err=500;
- while((IRIN==1)&&(err>0))
- {
- delay(10);
- err--;
- time++;
- if(time>30)
- {
- return;
- }
- }
- IrValue[i]>>=1;
- if(time>=8)
- {
- IrValue[i]=0x80;
- }
- else
- {
- IrValue[i]=0x00;
- }
- }
- }
- }
- }
復制代碼 |