微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机定时器-遥控器解码程序分析

单片机定时器-遥控器解码程序分析

时间:08-31 来源:互联网 点击:

号33位中各编码持续时间

测试结果:前导码:约 2457,持续时间为 2457 * 0.005 = 12.285ms (NEC标准为13.5)

编码 0:约 206, 持续时间为 206 * 0.005 = 1.03ms (NEC标准为1.125)

编码 1:约 408, 持续时间为 408 * 0.005 = 2.04ms (NEC标准为2.25)

*/

#include reg52.h>
sbit IR = P3^2; // 红外信号感应引脚
unsigned int time;
unsigned int dat[33] ={ 0 };
bit flag = 0;
void Send( void ) //将32位数据对应的时间发送到PC上显示
{
char i;
for(i = 0;i 33;i ++)
{
TI = 0;
SBUF = dat[i] / 10000 + 48;
while( !TI );
TI = 0;
SBUF = dat[i] / 1000 % 10 + 48;
while( !TI );
TI = 0;
SBUF = dat[i] / 100 % 10 + 48;
while( !TI );
TI = 0;
SBUF = dat[i] / 10 % 10 + 48;
while( !TI );
TI = 0;
SBUF = dat[i] % 10 + 48;
while( !TI );
TI = 0;
SBUF = ' ';
while( !TI );
}
}
void Init( void ) //定时器、外部中断初始化
{
TMOD = 0x22; // 定时器0、1方式2
SCON = 0x40; // 串行口方式1,不允许接收
TH1 = TL1 = 0xfd; // 串行口方式2,Fosc=11.05926,BPS=9600
TH0 = TL0 = 0xfb; // 中断频率 0.005ms
TR1 = 1; // 开启与串行口相关的定时器1
IT0 = 1; // 边沿式触发
ET0 = 1; // 开启定时器0中断
EX0 = 1; // 外部中断0中断允许
IP = 0x02; // 定时器0优先级高
EA = 1;
}
void main( void ) //主程序
{
Init( ); //中断 定时器 初始化
while( 1 ); //等待遥控信号
}
void Xint0( void ) interrupt 0 //外部中断0复位子程序
{
char i;
for(i = 0;i 33;i ++)
{
time = 0;
TR0 = 1;
while( !IR ); // 前导信号检测
while( IR );
TR0 = 0;
dat[i] = time;
}
Send( );
flag = 1;
EX0 = 0;
}
void Timer0( void ) interrupt 1 //5us中断一次 变量加1
{
time ++;
}


五、最后的话

真正入门单片机的学习者应该是已经掌握了单片机内部定时器、外部中断、串口通讯的工作原理及编程方法,所以对于这个程序我想很多人都可以马上体会并变为自己的程序。

希望在这个程序的引导下结合自己的C语言编程能力,可以拿起自己身边的遥控器为单片机边学边用所应用。修改程序实现每个按键按下单片机对应控制一个LED亮并且蜂鸣器报警器一次。

如今中国和日本的矛盾不断,很多技术人都在抱怨,但是我想其实我们也是可以为国家出点力的。因为我们所使用的大部分遥控器的编码与标准都是日本人技术所制定。

同学们,中国的智能电子爱好者,我们也可以制定出这个标准哦。希望更多的同仁能设计出自己的家用红外遥控器。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top