📄 ir_send.c
字号:
/***********项目描述******************************
*本项目的功能:用于将识别到的按键转换为NEC遥控码转发给外围主板
*MCU芯片:AT89S52
*编译环境:KELL-C51
************************************************/
/*****************IC Config***********************
*P0(0-7),P1(0-4)P2(0-7) for KEY input
*P1.0 for send IR code pin
*use isp update
*
*****************IC Config***********************/
#include <reg51.h>
#include <main_define.h>
//#include <AT89x52.H>
#define XTALO_FRE_XM 12 //4// 4
//#define XTALO_FRE_12M 1
#define uchar unsigned char
#define uint unsigned int
//-------ir send pin config------------
#define IR_PIN 0
#define IR_PIN_H (P1|=(1<<IR_PIN))
#define IR_PIN_L (P1&=!(1<<IR_PIN))
#define IR_SEND_SYS_CODE 0x7f00
#define SUPPORT_KEY_SCAN 0
#if SUPPORT_KEY_SCAN
//------------key define------------------
#define KEY_DIGITAL_0 !((P3&0x01)==0x01)//p3.0
#define KEY_DIGITAL_1 !((P3&0x02)==0x02)// (P3|!(0x01<<3))// p3.1
#define KEY_DIGITAL_2 !((P3&0x04)==0x04) //p3.2
#define KEY_DIGITAL_3 !((P3&0x08)==0x08)// (P3|!(0x01<<5)) // p3.3
#define KEY_DIGITAL_4 !((P3&0x10)==0x10) //p3.4
#define KEY_DIGITAL_5 !((P3&0x20)==0x20)// p3.5
#define KEY_DIGITAL_6 !((P3&0x80)==0x80)//p3.7
#define KEY_DIGITAL_7 !((P1&0x01)==0x01)//p1.0
#define KEY_DIGITAL_8 P2&(1<<0)
#define KEY_DIGITAL_9 P2&(1<<1)
#define KEY_VIDEO P2&(1<<2)
#define KEY_AUDIO P2&(1<<3)
#define KEY_CH_UP P2&(1<<4)
#define KEY_CH_DOWN P2&(1<<5)
#define KEY_VOL_UP P2&(1<<6)
#define KEY_VOL_DOWN P2&(1<<7)
#define KEY_POWER P1&(1<<1)
#define KEY_BACK P1&(1<<2)
#define KEY_MUTE P1&(1<<3)
#define KEY_NONE 0xff
//------IR SEND CODE DEFINE--------
#define IR_SEND_DIGITAL_0 0x00
#define IR_SEND_DIGITAL_1 0x01
#define IR_SEND_DIGITAL_2 0x02
#define IR_SEND_DIGITAL_3 0x03
#define IR_SEND_DIGITAL_4 0x04
#define IR_SEND_DIGITAL_5 0x05
#define IR_SEND_DIGITAL_6 0x06
#define IR_SEND_DIGITAL_7 0x07
#define IR_SEND_DIGITAL_8 0x08
#define IR_SEND_DIGITAL_9 0x09
#define IR_SEND_VIDEO 0x0a
#define IR_SEND_AUDIO 0x0b
#define IR_SEND_CH_UP 0x0c
#define IR_SEND_CH_DOWN 0x0d
#define IR_SEND_VOL_UP 0x0e
#define IR_SEND_VOL_DOWN 0x0f
#define IR_SEND_POWER 0x10
#define IR_SEND_BACK 0x11
#define IR_SEND_MUTE 0x12
#endif
//-----timer----------
void delay_xms(uchar i)
{
#if(XTALO_FRE_XM==4)
uint b=40,a;//XTALO_FREQUENCE/(12000*10),a;
#elif(XTALO_FRE_XM==12)
//uint b=3*40,a;//XTALO_FREQUENCE/(12000*10),a;
uint b=3*37,a;//XTALO_FREQUENCE/(12000*10),a;
#endif
for( a=b*i;a;a--)
;
// for(b=270;b;b--);//A=100 AND B=270 FOR ms
}
void delay_560us(uchar i)
{
#if(XTALO_FRE_XM==4)
uint a, b=20;
#elif(XTALO_FRE_XM==12)
uint a, b=3*20;
#endif
for( a=i*b;a;a--);
}
#if SUPPORT_KEY_SCAN
//----------------------------------
uchar key_scan(void)
{
if(KEY_DIGITAL_0)
return IR_SEND_DIGITAL_0;
else if(KEY_DIGITAL_1)
return IR_SEND_DIGITAL_1;
else if(KEY_DIGITAL_2)
return IR_SEND_DIGITAL_2;
else if(KEY_DIGITAL_3)
return IR_SEND_DIGITAL_3;
else if(KEY_DIGITAL_4)
return IR_SEND_DIGITAL_4;
else if(KEY_DIGITAL_5)
return IR_SEND_DIGITAL_5;
else if(KEY_DIGITAL_6)
return IR_SEND_DIGITAL_6;
/*
else if(KEY_DIGITAL_7)
return IR_SEND_DIGITAL_7;
else if(KEY_DIGITAL_8)
return IR_SEND_DIGITAL_8;
else if(KEY_DIGITAL_9)
return IR_SEND_DIGITAL_9;
else if(KEY_VIDEO)
return IR_SEND_VIDEO;
else if(KEY_AUDIO)
return IR_SEND_AUDIO;
else if(KEY_CH_UP)
return IR_SEND_CH_UP;
else if(KEY_CH_DOWN)
return IR_SEND_CH_DOWN;
else if(KEY_VOL_UP)
return IR_SEND_VOL_UP;
else if(KEY_VOL_DOWN)
return IR_SEND_VOL_DOWN;
else if(KEY_BACK)
return IR_SEND_BACK;
else if(KEY_POWER)
return IR_SEND_POWER;
else if(KEY_MUTE)
return IR_SEND_MUTE;
*/
else return KEY_NONE;
}
#endif
/*
void mcu_init(void)
{
P0=0xff;
P1=0xff;
P2=0xff;
P3=0xff;
}
*/
void ir_send_code_0_bit()
{
IR_PIN_L;
delay_560us(1);
IR_PIN_H;
delay_560us(1);
}
void ir_send_code_1_bit()
{
IR_PIN_L;
delay_560us(1);
IR_PIN_H;
delay_560us(3);
}
void ir_send_code_one_bit(bit state)
{
if(state)
ir_send_code_1_bit();
else
ir_send_code_0_bit();
}
void ir_send_start_code(void)
{
IR_PIN_L;
delay_xms(9);
IR_PIN_H;
delay_xms(4);
#if(XTALO_FRE_XM==12)
delay_560us(2);// 20080127 add
#endif
}
void ir_send_stop_code(void)
{
IR_PIN_L;
delay_560us(1);
IR_PIN_H;
//delay_560us(1);
}
void ir_send_sys_code(void)
{
uchar i;
bit ir_code_bit;
for(i=0;i<16;i++)
{
ir_code_bit=IR_SEND_SYS_CODE&(0x0001<<i);
ir_send_code_one_bit(ir_code_bit);
}
//反码
}
void ir_send_command_code(uchar command_code)
{
uchar i;
bit ir_code_bit;
for(i=0;i<8;i++)
{
ir_code_bit=command_code&(0x01<<i);
ir_send_code_one_bit(ir_code_bit);
}
//反码
for(i=0;i<8;i++)
{
ir_code_bit=command_code&(0x01<<i);
ir_send_code_one_bit(!ir_code_bit);
}
}
bit ir_send(uchar ir_code)
{
ir_send_start_code();
ir_send_sys_code();
ir_send_command_code(ir_code);
ir_send_stop_code();
return IR_SEND_END;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -