仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
以下部分为单片机代码:
- bit IR_Done = 0;
- union {
- u8 THTL[2];
- u16 TIME;
- }U_THTL[33];
- void Timer2Init(void)
- {
- EXF2 = 0;
- EXEN2 = 1;
- CP_RL2 = 1;
- }
- void timer2_int() interrupt 5
- {
- static u8 i = 0;
- if(TF2)
- {
- TF2 = 0;
- TR2 = 0;
- }
- if(EXF2)
- {
- EXF2 = 0;
- if(!TR2)
- {
- TL2 = 0;
- TH2 = 0;
- TR2 = 1;
- i = 0;
- }else{
- U_THTL[i].THTL[0] = RCAP2H;
- U_THTL[i].THTL[1] = RCAP2L;
- TL2 = 0;
- TH2 = 0;
- if(++i>=33)
- {
- i=0;
- IR_Done = 1;
- }
- }
- }
- }
- void main()
- {
- Timer1Init();
- Timer2Init();
- ET1 = 1;
- ET2 = 1;
- EA = 1;
- while (1)
- {
- if(IR_Done)
- {
- u8 i;
- u16 Temp[2];
- IR_Done = 0;
- for(i=1;i<33;i++)
- {
- Temp[(i-1)/16]<<=1;
- if(U_THTL[i].TIME>0x0648)
- {
- Temp[(i-1)/16] |= 0x0001;
- }
- }
- Disp_Buff[0] = Temp[1]>>12 & 0x0F;
- Disp_Buff[1] = Temp[1]>>8 & 0x0F;
- Disp_Buff[2] = Temp[1]>>4 & 0x0F;
- Disp_Buff[3] = Temp[1] & 0x0F;
- DispEN = 1;
- }
- }
- }
复制代码
Timer2_IR.rar
(121.11 KB, 下载次数: 100)
|