#includereg52.h>#includeintrins.h>#define uchar unsigned char//宏定義#define uint unsigned int#define ulong unsigned longsbit sound=P2^3; //蜂鳴器sbit IR=P1^2; //IR_DATAuchar dm,i,j,k; //IR_解碼用的變量uchar aa[2]; //定義1個數(shù)組,用來存儲代碼,8位的數(shù)據(jù)碼和8位的數(shù)據(jù)反碼ulong bb; //定義bb用來存放用戶識別碼,這里采用的是26位的用戶識別uchar newdata; //IR收到新的數(shù)據(jù)提示主函數(shù)去處理//0.9msvoid delay0_9ms(void){unsigned char j,k;for(j=18;j>0;j--)for(k=20;k>0;k--) ;}//1msvoid delay1ms(void){unsigned char i,j;for(i=2;i>0;i--)for(j=230;j>0;j--) ;}//4.5msvoid delay4_5ms(void){unsigned char i,j;for(i=10;i>0;i--)for(j=225;j>0;j--) ;}//100msvoid delay100ms(void){unsigned char i,j,k;for(i=200;i>0;i--) for(j=20;j>0;j--)for(k=10;k>0;k--) ;}IR_JM(unsigned char date){switch(date){case 0x01: {P0=0X00;break;} case 0x10: {break;}default: {break;}}}void main(){IT0=1; //外部中斷0觸發(fā)方式控制位,下降沿觸發(fā)EX0=1; //外部中斷0(INT0)中斷允許位EA=1; //總中斷dm=0; while(newdata){newdata=0;IR_JM(aa[0]);}}void t0(void) interrupt 0//外部中斷0的函數(shù){EA=0; //暫時關(guān)閉CPU的所有中斷請求for(k=0;k10;k++) //重復(fù)10次,目的是檢測在9毫秒內(nèi)如果出現(xiàn)高電平就退出解碼程序{ //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadelay0_9ms(); //延時0.9毫秒if (IR==1) {k=10;break;} //延時0.9毫秒后判斷P3.2腳是否出現(xiàn)高電平如果有就退出解碼程序else if(k==9) //重復(fù)10次?{ //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbwhile(IR==0); //等待高電平避開9毫秒低電平引導(dǎo)脈沖delay4_5ms(); //延時4.5毫秒避開4.5毫秒的結(jié)果碼/********************************************//26位的用戶碼,前13位數(shù)據(jù)碼,后13位數(shù)據(jù)反碼*********************************************/for(j=1;j=26;j++)//每組數(shù)據(jù)為26位{ while(IR==0); //delay0_9ms();if(IR==1){delay1ms();dm=dm|0x2000000;
//因為是26位,一個"1",后面25個"0",轉(zhuǎn)化二進制即為"1000000" if(j26) dm=dm>>1;
//數(shù)據(jù)"1",右移一個"1",一共25次} else if(j26) dm=dm>>1;
//數(shù)據(jù)"0",一共25次} bb=dm;dm=0;/***************************************************//16位的用戶碼,前8位數(shù)據(jù)碼,后8位數(shù)據(jù)反碼****************************************************/for(i=0;i2;i++) { for(j=1;j=8;j++)//每組數(shù)據(jù)為8位{ while(IR==0); //delay0_9ms();if(IR==1){delay1ms();dm=dm|0x80;if(j8) dm=dm>>1; //數(shù)據(jù)"1",右移一個"1",一共7次} else if(j8) dm=dm>>1; //數(shù)據(jù)"0",一共7次} aa[i]=dm;dm=0;} /***************************************************//顯示部分****************************************************/ if(aa[0]==~aa[1]) //驗證成功{ sound=0; delay100ms();sound=1;newdata=1;}} //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb} //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEA=1;}
評論