头文件:
/******************************************
* 程序名称: 遥控接收程序
* 程序功能: 遥控操作
* 目标硬件: AVR MCU "ATMEGA128" 16.0000MHz
* 文件名称:telecontrol.c
* 创建日期: 2009-02
* 原创作者: zhaojun
******************************************/
#ifndef TELECONTROL_H
#define TELECONTROL_H
// ************** 管脚定义
#define IR 5 // ************* 函数申明 extern void IRInit(void); // 初始化红外端口 // ************* 全局变量申明 extern uint8 IRCOM[4]; // 红外编码暂存 #endif C文件: /****************************************** #include "..\SOURCE\config.h" uint8 IRCOM[4]; // IRCOM[0]和IRCOM[1]存放用户编码;IRCOM[2]键值码暂存 IRCOM[j] >>= 1; // 接收数据右移一位 /******************************************************************** 延时函数: /***************************************************** while(tt--)
#define IN_IR (PINE&(1<
extern void IR_decode(void); // 红外解码函数
* 程序名称: 遥控接收程序
* 程序功能: 遥控操作
* 目标硬件: AVR MCU "ATMEGA128" 16.0000MHz
* 文件名称:telecontrol.c
* 创建日期: 2009-02
* 原创作者: zhaojun
******************************************/
// IRCOM[3]键值反码存放.
/*****************************************************
函 数 名:void IRInit(void)
功 能:红外引脚初始化
说 明:无
入口参数:无
返 回 值:无
*****************************************************/
void IRInit(void)
{
SET_IR_IN; // 设置端口为输入
SET_IR_PORT; // 开上拉电阻
}
/*****************************************************
函 数 名:void IR_decode(void)
功 能:红外解码函数
说 明:利用普通端口解码
入口参数:无
返 回 值:无
*****************************************************/
void IR_decode(void)
{
uint8 i,j,k,num = 0;
do // 读引导码
{
for (i=0; i<4; i++)
{
if (!IN_IR) break;
if (i == 3)
{
return;
}
}
DelayIR(20);
}while (IN_IR);
while(!IN_IR){DelayIR(1);} // 等IR变为高电平
// 读4字节按键编码 = 16位的用户码+8位键值码+8位键值反码
for (j=0; j<4; j++)
{ // 解码原理:0=0.8ms的低电平+0.4ms的高电平;1=0.8ms的低电平+1.6ms的高电平
for (k=0; k<8; k++) // 8位一接收
{
while (IN_IR){DelayIR(1);} // 等 IR 变为低电平
while (!IN_IR){DelayIR(1);} // 等 IR 变为高电平
while (IN_IR) // 计算IR高电平时长
{
DelayIR(1);
num++;
if (num >= 30)
{
return;
}
}
if (num >= 8)
{
IRCOM[j] |= 0x80; // 电平长度大于等于8,则写入高电平
}
num = 0;
} // 读完一字节
} // 按键4字节读完
// 接收数据检测
if (IRCOM[2] !=~ IRCOM[3]) // 8位键码!=8位键反码:按键错误
{
return;
}
Ringing(1,100,50); // 蜂鸣器响1声
}
End Of File
********************************************************************/
函 数 名:void DelayIR()
功 能:红外解码延时函数
说 明:0.14MS延时函数
入口参数:tt
返 回 值:无
*****************************************************/
void DelayIR(uint8 tt)
{
uint16 i;
{
for (i=315; i>0; i--)
{
asm(" nop");
}
}
}
上一篇:STM32串口库函数版例程
下一篇:ICC AVR精确定时的编程实验
推荐阅读最新更新时间:2024-03-16 15:00