51单片机格力空调遥控器代码解析

版权申诉
0 下载量 102 浏览量 更新于2024-06-20 收藏 340KB PDF 举报
"51单片机格力空调遥控器.pdf" 该文档主要涉及51系列单片机在设计格力空调遥控器时的应用。51单片机是一种广泛应用的微控制器,由Intel公司开发,因其内核是8051而得名。在空调遥控器的设计中,它负责处理各种按键输入、红外发射以及控制指令的编解码。 1. 包含头文件: `#include<reg52.h>` 和 `#include<intrins.h>` 是51单片机编程中常用的头文件,`reg52.h` 提供了51单片机特殊功能寄存器的定义,而`intrins.h` 包含了51内核的内置函数声明。 2. 定义宏: `#define uchar unsigned char` 和 `#define uint unsigned int` 分别定义了无符号字符型和无符号整型的别名,便于代码阅读和理解。 3. T2M0D寄存器: `sfr T2M0D = 0XC9;` 定义了一个特殊功能寄存器,这可能是定时器2的模式控制位,用于设置定时器的工作模式。 4. 红外发射: `sbit IR38k = P2^3;` 表示红外发射管连接到P2口的第三位,通常用于发送编码后的空调控制指令。 5. 按键定义: 文件中定义了多个按键(key1-key6)与P1口的某些位相连,用于接收用户的操作输入。 6. 变量定义: `uchar KeyScan();` 是一个函数声明,用于扫描按键状态。其他变量如`count`, `set_count`, `fengliang_value`, `key_value`, `wendu_value`, `mode_value`, `switch_value`, `zhuanye_value` 等用于存储用户设定的空调参数和状态。 7. 编码数组: `uchar code Zhuanye[][5]`, `uchar code fengliang[][5]`, `uchar code mode[][5]` 分别表示空调的模式(手动/自动切换)、风量和工作模式(自动/冷气/除湿/送风)的红外编码数组。这些数组中的值将被编码后通过红外发射管发送给空调。 8. 注释中的红外编码数组 `uchar code on_or_off[][5]` 被注释掉了,原本可能用于控制空调的开关状态。 这个51单片机程序设计了格力空调遥控器的核心逻辑,包括按键读取、红外编码及发送等功能,实现了对空调的远程控制。通过编写适当的中断服务程序和主循环,可以实时响应用户操作并控制空调的运行状态。
2023-02-27 上传
单片机课程设计—空调遥控器的设计 空调遥控器可以用来庙宇空调机的控制温度(室内温度) 、工作状态(常态、 除湿、通风) 、风扇风速(强、弱、中)以及定时时间(空调工作多少小时自动 开机或延时多少小时自动开机) 。 使用者在遥控器上庙宇预期的空调机工作状态、 控制温度及延时时间后,这些参数即送至空调机,空调机按要求开始工作。 该遥控器的要求如下: (1) 数字显示器:第一组显示时间,发送前指示设定的延时时间:0——9 h,发送后指示剩余的延时时间;第二组显示控制温度 15——35 。 (2) 工作状态指示器 3 组:第一组指示设定的工作状态:常态、除湿、通 风;第二组指示延时开机、延时停机、取消等三种延时要求;第三组指示空调机 的三种工作速度:慢速、中速、高速。 (3)红外发射管,发射的调制频率是 45 KHz。 (4)3 节 5 号电供电。 (5)面板示意图见图。 设计以 AT89C51 为核心的遥控器电路,并编写相关的系统软件(汇编、C51 程序均可) 。 设计思路: 数字显示器使用 LCD1602 显示时间和温度值,其中时间的切换利用 AT89C51 内部自带的定时器 0,定时初值为 3cb0,定时器工作模式为'01'16 位定时器, 工作状态利用 LED 灯的亮灭来指示,其中 LED 亮代表相对应的工作模 式被选中,各种工作状态的切换使用 8 个独立按键来实现,分别位'工作状态设 定键' 、 '延时状态设定键' 、 '风速选定键' 、 '温度+键' 、 '温度-键' 、 '延时时间 位选定键' 、 '延时时间设置键' 、 '发送键';按下'发送键'后信息的发送使用 串行口的方式发送给上位机并显现出来,当延时时间到启动空调。 具体实现: 经分析将该设计划分为如下 4 个模块:按键模块,LED 状态显示模块,LCD1602 显示模块,双机串口通信模块 按键模块: 仿真原理图: 详细描述:8 个按键的功能如下表: 按键 功能 K1 工作状态设定键(常态、除湿、通风) K2 延时状态设定键(延时开、延时关、取消) K3 风速选定键(慢、中、快) K4 温度设定键(增加+) K5 温度设定键(减少-) K6 延时时间位选定键(XXXXXX) K7 延时时间设置键(默认为循环增加) K8 发送键 当 K1 按下时,保持 P0 高 5 位状态,按下第一次最后一位置 0,倒数第二、三 位置 1 按下第二次时到数第二位置 0,倒数第一、三位置 1,按下第三次时倒数 第 三 位 置 0 , 倒 数 第 一 、 二 位 置 1 , 依 次 循 环 , 代 码 实 现 : P0=(states1[i]&(P0"0x07)); 当 K2 按下时,保持 P0 倒数第 1、2、3 位和正数第 1、2、3 状态按下第一次 时倒数第一位亮表示延时开, 按下第二次时倒数第五位亮表示延时关,按下第三 次 时 倒 数 第 3 、 4 位 皆 灭 表 示 取 消 延 时 , 依 次 循 环 , 代 码 实 现 : P0=(states2[j]&(P0"0x18)); 当 K3 按下时,保持 P0 低 5 位不变,按下最高两位置 1,第三位置 0,表示慢 速,按下第二次时第二位置 0,第一、三位置 1,表示中速,按下第三次时第一 位置 0,第一、二位置 1,依次循环,代码实现:P0=(states3[k]&(P0"0xe0)); LED 状态显示模块: 仿真原理图: 详细描述:8 个按键的功能如下表: LED 状态指示 D1 正常 D2 除湿 D3 通风 D4 延时开(如果 D4/D5 两灯全灭则取消延时) D5 延时关 D6 慢 D7 中 D8 高 LCD1602 显示模块: 仿真原理图: 详细描述: LCD1602 一共可以显示 16x2 个字符, 其中数据线为 8 位分别接 AT89C51 的 P2 端口的 8 个管脚,控制线为 RS、RW、E 分别接 P3.3,P3.4,P3.5 管脚, 仿 真电路中排阻是必要的它的功能是电阻作为有功原件串联在电路中能消除振荡, 目的是得到更好的 EMC 性能。 主要子函数包括: (详细代码见附录源程序 LCD 部分) void initLCM( void); //LCD 初始化子程序 void DisplayListChar(unsigned char X,unsigned char Y, unsigned char *DData); //显示指定坐标的一串字符子函数 void DisplayOneChar(uchar X,uchar Y,uchar DData);//显示单个字符 双机串口通信功能: 仿真原理图: 详细描述: 利用串口查询的方式实现两台单片机之间通信的功能:单片机 1(模拟遥控器) 作为发送机其 P3.