您的位置 首页 电子

克己51单片机常用头文件(红外解码)

/*————————————————————————–IR.HTheuserfunctionisC51

/*————————————————————————–

IR.H

The user function is C51.
Copyright (c) 1988-2004 Keil Elektronik GmbH sum zhaojun
All rights reserved.
————————————————————————–*/
#ifndef __IR_H__
#define __IR_H__

#define uchar unsigned char
#define uint unsigned int

#define IRIN P3_2 // 红外引脚
#define BEEP P3_7 // 蜂鸣器引脚

uchar IRCOM[4]; // IRCOM[0]和IRCOM[1]寄存用户编码;IRCOM[2]键值码暂存
// IRCOM[3]键值反码寄存.

/*======================================== 红外解码部分 ======================================================*/

/*****************************************************
函 数 名:void DelayIR(uchar number)
功 能:延时程序
说 明:对红外信号进行解码时的时刻比较
进口参数:无
返 回 值:无
*****************************************************/
void DelayIR(uchar number)//number*0.14MS
{
uchar i;

while (number–)
{
for(i=13; i>0; i–);
}
}

/*****************************************************
函 数 名:void Delay_bell(void)
功 能:蜂鸣器延时程序
说 明:对蜂鸣器发音延时
进口参数:无
返 回 值:无
*****************************************************/
void Delay_bell(void)
{
uint i;

for(i=0; i<20000; i++)
{
;
}
}

/*****************************************************
函 数 名:void Buzzer(num)
功 能:蜂鸣器发音程序
说 明:对暗码输入正确与否、按键等的提示
进口参数:无
返 回 值:无
*****************************************************/
void Buzzer(num)
{
while (num–)
{
BEEP = 0; // 灯亮
Delay_bell(); // 延时
BEEP = 1; // 灯灭
Delay_bell(); // 延时
}
}

/*****************************************************
函 数 名:void IR_IN()
功 能:红外解码
说 明:把红外编码信号进行解码,并寄存在IRCOM[]中
进口参数:无
返 回 值:无
*****************************************************/
// 外中止0,红外数据接纳
void IR_IN()
{
uchar i,j,k,num = 0;

do // 读引导码
{
for (i=0; i<4; i++)
{
if (IRIN == 0)
{
break;
}
if (i == 3)
{
return;
}
}

DelayIR(20);
}while (IRIN == 1); // 承认IR信号呈现

while (!IRIN)
{
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 (IRIN)
{
DelayIR(1); // 等 IR 变为低电平
}

while (!IRIN)
{
DelayIR(1); // 等 IR 变为高电平
}

while (IRIN) // 核算IR高电平时长
{
DelayIR(1);
num++;

if (num >= 30)
{
return;
}
}

IRCOM[j] = IRCOM[j] >> 1; // 接纳数据右移一位

if (num >= 8)
{
IRCOM[j] = IRCOM[j] | 0x80; // 电平长度大于等于8,则写入高电平
}

num = 0;
} // 读完一字节
} // 按键4字节读完
// 接纳数据检测
if (IRCOM[2] != ~IRCOM[3]) // 8位键码!=8位键反码:按键过错
{
return;
}

Buzzer(1); // 有键按下,蜂鸣器响一声
}

/*===================================
DT9122D 遥控器

****** 红外遥控器键值表 ***********

| 10 | 03 | 01 | 06 |
– – – – – – – – – – – – – – – – – – –
| 09 | 1D | 1F | 0D |
– – – – – – – – – – – – – – – – – – –
| 19 | 1B | 11 | 15 |
– – – – – – – – – – – – – – – – – – –
| 17 | 12 | 16 | 4C |
– – – – – – – – – – – – – – – – – – –
| 40 | 48 | 04 | 00 |
– – – – – – – – – – – – – – – – – – –
| 02 | 05 | 54 | 4D |
– – – – – – – – – – – – – – – – – – –
| 0A | 1E | 0E | 1A |
– – – – – – – – – – – – – – – – – – –
| 1C | 14 | 0F | 0C |
=====================================*/

#endif

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/dianzi/275925.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部