遥控红外引导码
高低脉冲时间us
我用的数码管电路图
单片机源程序如下:
- #include<reg52.h>
- sfr T2MOD=0XC9; //定义定时器2
- #define u8 unsigned char
- #define u16 unsigned int
- sbit ir=P3^2;sbit LSA=P2^2; sbit LSB=P2^3;sbit LSC=P2^4;//数码管用的138
- bit di=0,gao=0,c=0;
- u8 js=0,us=0; //js是计算低脉冲个数
- u16 idata IR[75];//所有高低脉冲都装在里面
- //红外一组为68个高低脉冲,设75个,随便改脉冲个数
- u8 code tab[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0};
- u8 dw[5];//数码管显示0--9,最后那个0是关显示
- void Delay(u16 n){while(--n);}//12M公式n=(延时-6)*0.12493899(us)
- void disp()
- { P0=tab[dw[i]];
- Delay(70); //间隔一段时间扫描
- P0=0x00;//消隐
- }
- void T0init(void) //定时器0模式2初始化,完成一次中断为256us,10次就乘10次
- {TMOD=0x02;TH0=0x00;TL0=0x00;ET0=1;TR0=1;}
- void E0init(void)//外P3^2中断0 初始化
- {IT0=1;EX0=1;}
- void main(void)
- { T2MOD=0;T2CON=0; //定时器2初始化,向上计数,16位自动重装模式
- TL2=0x00;TH2=0x00; //设置定时初值,完成一次中断为65536us=65ms
- RCAP2L=0x00;RCAP2H=0x00; //设置定时重载值
- IE=0xa0; //EA=1,ET2=1;
- E0init();
- T0init();
- while(1)
- {static u8 a=0;
- while(!ir){ //低脉冲时计算高脉冲时间
- if(gao){IR[a]=TH2*256+TL2+8;
- a++;gao=0;TH2=0;TL2=0;}}
- if(di){TR0=0;TR2=1;IR[a]=us*256+TL0-4;//1个us为256,减4补误差
- a++;di=0;TL0=0;us=0;}//高脉冲时计算低脉冲时间
- if(TH2>78){TR2=0;TH2=0;TL2=0;a=0;c=1;}//TH2>78高脉冲超20ms结束
- if(c)disp();//结束后显示高低脉冲时间us
- } }
- void t0() interrupt 1
- {us++;di=1;}
- void E0() interrupt 0
- {TR0=1;if(TR2)gao=1;TR2=0;js++;}
- void t2() interrupt 5
- {TF2=0;} //要写TF2=0
复制代码
显示部分不同程序就不同,显示程序自己写就行了,只要是显示IR[]数组。
如果数码管电路和我的一样,就下载下面直接运行,w=100,我测试快用的,改为w=500慢显示。
代码:
捕捉红外高低脉冲时间.rar
(1.37 KB, 下载次数: 6)
|