红外遥控系统之二:GPIO模拟红外遥控发射
2011-03-19 23:57
183 查看
(1)NEC码的发射完整波形图诠释如下(接收与发射反向):
![](http://hi.csdn.net/attachment/201103/19/0_1300550237fDMG.gif)
(2)用一个GPIO口模拟IR,来输出到另一个接收端,程序如下:
void Simulate_IR_Init(void) //GPIO初始化
{
MFT4MOD=0;
PTDIR0_4=1; //设置输出
IR_LINE=1; //默认为高,IR脚的默认电平也是为高
}
void T_560US(void)
{
BusWait(_560us); //使用一定的机器时间来耗时,精度可以用示波器来测出
}
void T_1680US(void) //3个560US
{
T_560US();
T_560US();
T_560US();
}
void T_500US(void)
{
BusWait(_500_us);
}
void T_1MS(void)
{
T_500US();
T_500US();
}
void T_9MS(void) //开始码
{
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
}
void T_4_5_MS(void) //结果码
{
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_500US();
}
void send_d0(void) //发数据0,参照上述图示反向
{
IR_LINE=0;
T_560US();
IR_LINE=1;
T_560US();
}
void send_d1(void) //发数据1,参照上述图示反向
{
IR_LINE=0;
T_560US();
IR_LINE=1;
T_1680US();
}
void send_ir_byte(uchar tp) //发送一个字节
{
uchar i;
for(i=0;i<8;i++)
{
if(tp&0x80)
{
send_d1();
}
Else
{
send_d0();
}
tp<<=1; //从高位往低位发送
}
}
void ir_start(void) //NEC遥控码起始条件
{
IR_LINE=0;
T_9MS();
IR_LINE=1;
T_4_5_MS();
}
void send_ir_key(uchar key) //发送单个遥控码的完整程序
{
Simulate_IR_Init(); //初始化GPIO
ir_start(); //NEC起始
send_ir_byte(IR_USER_CODE); //客户码
send_ir_byte(~IR_USER_CODE); //客户码反码
send_ir_byte(key); //数据码
send_ir_byte(~key); //数据码反码
IR_LINE=0;
T_560US(); //为了跟最后一个数据位区别开来,如上图所示
IR_LINE=1; //恢复默认的高
}
![](http://hi.csdn.net/attachment/201103/19/0_1300550237fDMG.gif)
(2)用一个GPIO口模拟IR,来输出到另一个接收端,程序如下:
void Simulate_IR_Init(void) //GPIO初始化
{
MFT4MOD=0;
PTDIR0_4=1; //设置输出
IR_LINE=1; //默认为高,IR脚的默认电平也是为高
}
void T_560US(void)
{
BusWait(_560us); //使用一定的机器时间来耗时,精度可以用示波器来测出
}
void T_1680US(void) //3个560US
{
T_560US();
T_560US();
T_560US();
}
void T_500US(void)
{
BusWait(_500_us);
}
void T_1MS(void)
{
T_500US();
T_500US();
}
void T_9MS(void) //开始码
{
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_1MS();
}
void T_4_5_MS(void) //结果码
{
T_1MS();
T_1MS();
T_1MS();
T_1MS();
T_500US();
}
void send_d0(void) //发数据0,参照上述图示反向
{
IR_LINE=0;
T_560US();
IR_LINE=1;
T_560US();
}
void send_d1(void) //发数据1,参照上述图示反向
{
IR_LINE=0;
T_560US();
IR_LINE=1;
T_1680US();
}
void send_ir_byte(uchar tp) //发送一个字节
{
uchar i;
for(i=0;i<8;i++)
{
if(tp&0x80)
{
send_d1();
}
Else
{
send_d0();
}
tp<<=1; //从高位往低位发送
}
}
void ir_start(void) //NEC遥控码起始条件
{
IR_LINE=0;
T_9MS();
IR_LINE=1;
T_4_5_MS();
}
void send_ir_key(uchar key) //发送单个遥控码的完整程序
{
Simulate_IR_Init(); //初始化GPIO
ir_start(); //NEC起始
send_ir_byte(IR_USER_CODE); //客户码
send_ir_byte(~IR_USER_CODE); //客户码反码
send_ir_byte(key); //数据码
send_ir_byte(~key); //数据码反码
IR_LINE=0;
T_560US(); //为了跟最后一个数据位区别开来,如上图所示
IR_LINE=1; //恢复默认的高
}
相关文章推荐
- 51单片机模拟红外遥控发射传输温湿度数据
- 火车票购票系统模拟
- java swing实现页面置换算法模拟系统代码
- GPIO 模拟I2C
- 红十字会急救证模拟考试系统-介绍
- 交互系统的构建之(二)Linux下鼠标和键盘的模拟控制
- Linux I2C子系统分析之(一) ----- 用GPIO模拟I2C总线
- python---模拟用户正常登录系统,破解用户名与登录密码
- js模拟弹出系统对话框
- 红外遥控系统原理及单片机软件解码实例(汇编,来源论坛网址:http://www.zsMCU.com)
- 近期小结--Android系统时间获取及AVD模拟GPS相关调试
- GPU粒子系统烟花模拟实验
- 【Visual C++】游戏开发笔记二十一 游戏基础物理建模(三) 摩擦力系统模拟
- 模拟学生选课系统
- Pcscanner V1.6 系统信息扫描器(建议慎用)介绍之二
- PT2262-PT2272红外遥控发射/接收芯片
- LIMS系统开发经历----之二(将业务流程转换成计算机语言)
- GPIO编程模拟I2C入门
- 通信信号与系统分析(三 模拟调制)