一個很簡單的程序,寫的不是很好
單片機源程序如下:
- #include "reg52.h"
- #define Led P2
- typedef unsigned char u8;
- typedef unsigned int u16;
- //#define uint unsigned int;
- //#define uchar unsigned char;
- sbit IRIN=P3^2;
- u8 Time;
- u8 IrValue[6];
- u8 code IRdata[22]={0x45,0x46,0x47,0x44,0x40,0x43,0x07,0x15,0x09,0x16,0x19,
- 0x0d,0x0c,0x18,0x5e,0x08,0x1c,0x5a,0x42,0x52,0x4a};
- void delay(u16 i)
- {
- while(i--);
- }
- void IrInit()
- {
- IT0=1;
- EX0=1;
- EA=1;
- IRIN=1;
- }
- void Ircontrol()
- {
- u8 i;
-
- // for(i=0;i<8;i++)
- // {
- // switch(IrValue[2])
- // {
- // case(0x45):Led=0xfe;break;
- // case(0x46):Led=0xfc;break;
- // case(0x47):Led=0xfa;break;
- // case(0x44):Led=0xf7;break;
- // case(0x40):Led=0xef;break;
- // case(0x43):Led=0xcf;break;
- // case(0x07):Led=0xaf;break;
- // case(0x15):Led=0x7f;break;
- // }
- // }
- for(i=0;i<22;i++)
- {
- if(IrValue[2]==IRdata[i])
- Led=IRdata[i];
- }
-
-
- }
- void main()
- {
- IrInit();
- while(1)
- {
- Ircontrol();
- }
- }
-
- void ReadIr() interrupt 0
- {
- u8 k,j;
- u16 err;
- Time=0;
- delay(700);
- if(IRIN==0)
- {
- err=1000;
-
- while((IRIN==0)&&(err>0))
- {
- delay(1);
- err--;
- }
- if(IRIN==1)
- {
- err=500;
- while((IRIN==1)&&(err>0))
- {
- delay(1);
- err--;
- }
- for(k=0;k<4;k++)
- {
- 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);
- Time++;
- err--;
- if(Time>30)
- {
- return;
- }
- }
- IrValue[k]>>=1;
- if(Time>=8)
- {
- IrValue[k]|=0x80;
- }
- Time=0;
- }
- }
- }
-
- if(IrValue[2]!=~IrValue[3])
- {
- return;
- }
- }
- }
-
復制代碼
所有程序51hei提供下載:
紅外通信2.zip
(22.88 KB, 下載次數: 32)
2019-7-14 18:11 上傳
點擊文件名下載附件
|