求助各為大神,幫忙分析下這個程序,為什么紅外遙控按了沒反應,8位數碼管就都顯示0
- #include <stc15.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar code led_xs[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xA7,0xA1,0x86,0x8E};
- uchar code led_wei[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
- uchar t;
- sbit IR=P3^2;
- bit irok;//紅外接收完標志位
- bit ieok;//紅外處理完標志位
- uchar Ir_cd[4];
- uchar Ir_data[33];
- void iint();//設置準雙向口
- void init();//外部中斷0初始化
- void intt();//定時器0初始化
- void hwjmcl(); //紅外解碼處理
- void hwmzzh();//紅外碼值轉換處理顯示
- void delay(uint t);
- void main()
- {
- intt();//設置準雙向口
- iint();//外部中斷0初始化
- init();//定時器0初始化
- while(1)
- {
- if(irok)
- {
- irok=0;
- ET0=0; //禁止定時器0中斷
- hwjmcl();//紅外解碼處理
- }
- if(ieok)
- {
- ieok=0;
- }
- hwmzzh(); //紅外碼值轉換處理顯示
- }
- }
- void hwjmcl() //紅外解碼處理
- {
- uchar i,j,k=1,value=0;
- for(i=0;i<4;i++)
- {
- for(j=0;j<8;j++)
- {
- value>>=1;
- if(Ir_data[k]>6)
- {
- value|=0x80;
- }
- k++;
- }
- Ir_cd[i]=value;
- }
- ieok=1;
- }
- void hwmzzh() //紅外碼值轉換處理顯示
- {
- P2=led_xs[Ir_cd[0]/16];
- P0=led_wei[0];delay(1);P0=0xFF;
- P2=led_xs[Ir_cd[0]%16];
- P0=led_wei[1];delay(1);P0=0xFF;
-
- P2=led_xs[Ir_cd[1]/16];
- P0=led_wei[2];delay(1);P0=0xFF;
- P2=led_xs[Ir_cd[1]%16];
- P0=led_wei[3];delay(1);P0=0xFF;
-
- P2=led_xs[Ir_cd[2]/16];
- P0=led_wei[4];delay(1);P0=0xFF;
- P2=led_xs[Ir_cd[2]%16];
- P0=led_wei[5];delay(1);P0=0xFF;
-
- P2=led_xs[Ir_cd[3]/16];
- P0=led_wei[6];delay(1);P0=0xFF;
- P2=led_xs[Ir_cd[3]%16];
- P0=led_wei[7];delay(1);P0=0xFF;
- }
- void time_0(void) interrupt 1 //定時器0中斷服務函數
- {
- t++;
- }
- void INT_0(void) interrupt 0 //外部中斷0服務函數
- {
- static uchar i;
- static bit flag;
- ET0=1;
- if(t>35)
- {
- flag=1;
- i=0;
- }
- if(flag)
- {
- Ir_data[i]=t;
- i++;
- t=0;
- if(i>=33)
- {
- i=0;
- flag=0;
- irok=1;
- }
- }
- }
- void delay(uint t)
- {
- uint i,j;
- for(i=t;i<50;i++)
- for(j=25;j>0;j--);
- }
- void init()
- {
- TMOD&=0xF0;
- TMOD|=0x02;
- TH0=0;
- TL0=0;
- TR0=1;
- }
- void iint()
- {
- IT0=1;
- EX0=1;
- EA=1;
- }
- void intt()
- {
- P0M0=0;P0M1=0;
- P1M0=0;P1M1=0;
- P2M0=0;P2M1=0;
- P3M0=0;P3M1=0;
- P4M0=0;P4M1=0;
- P5M0=0;P5M1=0;
- }
復制代碼 |