C语言实现51单片机红外遥控器1234按键发射代码

需积分: 10 9 下载量 28 浏览量 更新于2024-09-07 1 收藏 13KB DOCX 举报
该文档详细介绍了如何使用C语言在51单片机上模拟红外线遥控器,实现按键1234的功能。主要涉及到以下几个知识点: 1. 硬件配置: - 使用P3.4至P3.7作为独立按键输入引脚(K1-K4),分别对应数字1-4。 - 红外线发射端口设置为P1.5,通过sbit IR=P1^5定义,连接到一个PNP三极管的基极。 2. 定时器与脉冲宽度调制: - TMOD寄存器被设置为0x01,使得T0工作在16位模式,用于控制红外线发射的脉冲宽度调制。 - 使用定时器T0来生成不同长度的脉冲,如ms9、ms4_5等,对应于不同按键编码。 3. 按键检测函数: - 函数KEY()用于读取并解析按键状态,当按下某个按键时返回相应的数字(1-4)。 4. 编码函数: - ZZ()函数接收按键值(0x0c、0x18、0x5e、0x08对应1234),将它转换为对应的红外编码,然后清零变量v以准备下一个按键操作。 5. 主函数与程序流程: - 主函数main()持续运行,先调用SanZhuan()函数进行按键检测和编码。 - SanZhuan()内部根据KEY()返回的按键值执行相应编码,然后通过ZZ()函数发送红外信号。 6. 编码策略: - 使用不同的脉冲宽度(如ms1_6、ms_65等)来表示不同的红外编码,这种编码方式可能基于特定的红外通信协议,如NEC或SONY等。 总结来说,这份C语言代码实现了一个基本的红外遥控器系统,利用51单片机的定时器功能发送按键对应的红外编码,以便与兼容的红外接收器进行通信。通过精确的定时和编码转换,可以模拟出1234四个数字键的按压效果。
2019-01-09 上传
厂家提供了S32K14X系列的寄存器定义,如: #define CAN_MCR_HALT_MASK 0x10000000u #define CAN_MCR_HALT_SHIFT 28u #define CAN_MCR_HALT_WIDTH 1u #define CAN_MCR_HALT(x) (((uint32_t)(((uint32_t)(x))<<CAN_MCR_HALT_SHIFT))&CAN;_MCR_HALT_MASK) #define CAN_MCR_RFEN_MASK 0x20000000u #define CAN_MCR_RFEN_SHIFT 29u #define CAN_MCR_RFEN_WIDTH 1u #define CAN_MCR_RFEN(x) (((uint32_t)(((uint32_t)(x))<<CAN_MCR_RFEN_SHIFT))&CAN;_MCR_RFEN_MASK) #define CAN_MCR_FRZ_MASK 0x40000000u #define CAN_MCR_FRZ_SHIFT 30u #define CAN_MCR_FRZ_WIDTH 1u #define CAN_MCR_FRZ(x) (((uint32_t)(((uint32_t)(x))<<CAN_MCR_FRZ_SHIFT))&CAN;_MCR_FRZ_MASK) #define CAN_MCR_MDIS_MASK 0x80000000u #define CAN_MCR_MDIS_SHIFT 31u #define CAN_MCR_MDIS_WIDTH 1u #define CAN_MCR_MDIS(x) (((uint32_t)(((uint32_t)(x))<<CAN_MCR_MDIS_SHIFT))&CAN;_MCR_MDIS_MASK) 使用时方便,比如: base->MCR = (base->MCR & ~CAN_MCR_HALT_MASK) | CAN_MCR_HALT(0U); base->MCR = (base->MCR & ~CAN_MCR_FRZ_MASK) | CAN_MCR_FRZ(0U); 但是,在想要获取寄存器中某些位段的值时,需要使用寄存器的掩码和移位,比如: while (((base->MCR & CAN_MCR_LPMACK_MASK) >> CAN_MCR_LPMACK_SHIFT) != 0U) {} 于是,想扩展以下格式的宏: #define CAN_MCR_LPMACK_GET(r) (((r) & CAN_MCR_LPMACK_MASK) >> CAN_MCR_LPMACK_SHIFT) 这样,使用的时候只需要写 while(CAN_MCR_LPMACK_GET(base->MCR) != 0) {} 【解决办法】 在MATLAB中写一个脚本,自动从原始头文件中提取相关的定义,并生成全部GET宏。 脚本文件为: S32K14X_CreateGetMacro.m 生成结果为: S32K144_get.h