C51单片机实现红外遥控编码与发送

4星 · 超过85%的资源 需积分: 10 3 下载量 182 浏览量 更新于2024-09-12 收藏 3KB TXT 举报
本篇资源是关于单片机编程中红外遥控功能实现的C语言程序。它主要适用于C51开发环境,并提供了一种实用的方法来处理来自红外遥控器的信号。以下是关键知识点的详细解析: 1. **头文件导入**: `#include<reg51.h>`:这是C51编译器的标准头文件,包含了寄存器定义和其他必要的库函数声明。 2. **数据类型定义**: - `uchar` 和 `uint` 定义为无符号字符型和无符号整型,用于处理数据的存储和操作。 - `sbit` 定义为特殊位,用于在单片机的IO口上进行低级控制,如`p3_0`, `p2_1`, `p1_0`, `p1_1`, `p1_2`, `p1_3`等,分别对应不同的引脚。 3. **全局变量和数组**: - `keyvalue`、`flag_key`、`value1`, `value2`等变量用于存储接收到的键值。 - `codekeycode[]`、`codeportvalue[]`、`codewy[]`分别存储红外遥控器的按键编码、可能的输入端口值以及二进制表示的开关状态。 4. **定时器设置**: - `EA=1`:使外部中断请求总允许。 - `TMOD=0x11`:设置定时器T0的工作模式为模式1,用于定时中断。 - `ET0=1`:开启定时器T0的中断请求。 - `TH0` 和 `TL0` 设置定时器初值,确保定时器工作在38kHz下,周期约为38us。 5. **主函数**: - 主程序通过`EA`和`ET0`初始化中断系统,然后进入无限循环,调用`key_scan()`函数来检测红外遥控器信号,并在接收到按键按下事件时,调用`sendirdata()`函数发送相应的数据。 6. **`key_scan()` 函数**: - 该函数遍历预设的红外遥控器按键编码数组,当检测到一个按键组合(如p1_3或p1_2为0)时,记录按键编号和触发标志,并跳出循环。 7. **`sendirdata()` 函数**: - 可能用于根据接收到的键值,发送相应的指令或数据到其他设备,但函数体未在给出的部分中给出。 8. **中断处理与按键检测**: - `flag_press` 和 `flag_key` 分别用于标记按键是否被按下和是否检测到按键。`flag_press` 用于在按键被按下时清零,以便处理下一次按键。 整个程序的主要目标是接收红外遥控器的输入信号,并将其转换为单片机可以识别和处理的数据。通过定时器和中断机制,它实现了对红外遥控器的实时响应和数据处理。这是一个基础的硬件交互示例,适合于初学者学习和理解单片机如何与外部设备通信。