📄 main.c
字号:
//-----------------------------------------------------------------
// 名称: 红外遥控仿真发射器
//-----------------------------------------------------------------
// 说明: 本例运行时,按键键值以40KHz红外线载波发射出去,所模拟的载波
// 数据格式符合索尼红外遥控编码格式(SIRC).
//
//-----------------------------------------------------------------
#include <pic.h>
#define INT8U unsigned char
#define INT16U unsigned int
#define _XTAL_FREQ 4000000UL
//红外发射管定义
#define IRLED RB4
//蜂鸣器定义
#define BEEP RB7
//按键输入端口定义
#define KEY_IN PORTC
//8组红外编码
INT16U IR_Codes[]={0x0509,0x0334,0x0556,0x0778,0x09AA,0x0FCC,0x0DEE,0x0AAC};
//-----------------------------------------------------------------
// 发送N倍的600us载波(1/40K/2=12us)
//-----------------------------------------------------------------
void Emit_IR_Carrier_Nx600us(INT8U N)
{
INT8U i,j = N * 50; //不要将N*50替换循环中的j
for (i = 0; i < j; i++) //否则将导致很大的延时偏差
{
__delay_us(12); IRLED = ~IRLED; //通过LED输出40KHz载波
}
}
//-----------------------------------------------------------------
// 发送12位数据
//-----------------------------------------------------------------
void Emit_D12(INT16U D12)
{
INT16U i;
//首先发送引导部分2.4ms载波(4*600us=2.4ms)
//输出600us的低电平间隔区
//接着发送12位的命令与数据码(7+5)
for (i = 0x0001; i < 0x1000; i <<= 1)
{
}
}
//-----------------------------------------------------------------
// 输出提示音
//-----------------------------------------------------------------
void Sounder()
{
for(INT8U i = 0; i < 200; i++) { BEEP = ~BEEP; __delay_us(500); }
}
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
INT8U i;
ANSEL = 0x00; //关闭模拟通道0~7
ANSELH = 0x00; //关闭模拟通道8~11
TRISC = 0xFF; //配置按键输入端口
TRISB4 = 0; //红外发射输出
TRISB7 = 0; //蜂鸣器输出
while(1) //按键K1~K8发射编码
{
if (KEY_IN != 0xFF) //检测按键
{
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -