1、 基于 AT89S52 的红外遥控器设计 报告 选题名称 : 基于 AT89S52 的学习型红外遥控器的设计 系(院) : 物理与电子工程学院 专 业 : 学年学期 : 2011 2012 学年 第 2 学期 摘要: 学习型红外线遥控器,通过自学习而拥有对多台电器的遥控功能。该遥控器有两种状态:学习状态和控制状态。处于学习状态时,使用者每按一个控制键红外接收电路就开始接收外来红外信号,并将其转换为电信号,然后经过检波、整形、放大,再由单片机定时对其采样,将每个采样点的二 进制数据以 8 位为一个单位,分别存放到指定的存储单元中去,供以后对该设备控制使用;处于控制状态时,使用者每按一个控制键单片
2、机从指定的存储单元中读取二进制数据,串行输出(位和位之间的时间间隔等于采样的时间间隔)给信号保持电路,同时由调制电路进行信号调制,将调制信号经放大后,由红外线发射二极管进行发射,从而实现对该键对应设备功能的控制。 关键词: 发射板 ; 发射状态; 红外线遥控器; 接收板 ; 接收 状态; AT89S52 目 录 1 课题综述 . 1 1.1 课题来源及意义 . 1 1.2 预期目标 . 1 1.3 面对 的问题 . 1 1.4 需解决的关键技术 . 1 2 系统分析 . 1 2.1 涉及的基础知识 . 1 2.2 解决问题的基本思路 . 2 2.3 总体方案 . 3 2.3 功能模块框图 .
3、3 3 系统设计 . 4 3.1 电路原理图 . 4 3.2 实现方法 . 5 3.3 详细流程图 . 5 4 代码编写 . 6 4.1 AT89S52 单片机与各模块电路的连接端口分配 . 6 4.2 复位电路的设计 . 7 4.3 按键电路设计的实现 . 错误 !未定义书签。 4.4 中断程序的实现 . 9 4.5 主函数的实现 . 11 5 程序调试 . 13 6 运行与测试 . 13 总 结 . 13 参考 文献 . 14 单片机系统开发与应用工程实习 报告 1 1 课题综述 1.1 课题来源及意义 目前,人们的物质文化生活水平日益提高,各种各样的家用电器走进了千家万户,其中,大多数的
4、家用电器都有各自不同的遥控器,人们常常为了控制某台电器到处寻找其对应的遥控器,这样就给人们的生活带来了很多步便。为了解决这个问题,笨项目提出了一个多功能遥控器的设计方案:该遥控器可以 通过自学习而拥有对多台电器的遥控功能,既省时又省力,从而使人们免除同时面对众多遥控器的苦恼。 1.2 预期目标 设计一种基于 AT89S52 单片机控制的红外线遥控器,具有以下功能: 1、适用于编码式红外线遥控型家用电器 2、可遥控多台家用电器 3、具有一个学习 /控制复用键 4、可通过一个设备选择键和各个功能控制键实现对多台设备的常用功能的学习和控制 5、成本低,抗干扰能力强 1.3 面对的问题 1、对于 AT
5、89S52 单片机的了解及应用 2、对于抗干扰能力的解决 1.4 需解决的关键技术 本项目是通过扫描按键的状态、单片机 外 中断 0 和定时 /计数器 程序来判断遥控器处于什么状态,实现什么功能,因此,对于功能键的设计和中断程序的设计是难点。同 时,对于红外发射和红外接收的工作原理和设计对于我们来说也是陌生的,都要从头开始,对其进行了解、掌握及使用,所以也是一个难题。 2 系统分析 2.1 涉及的基础知识 通过对本项目的了解,为了实现该项目的各个功能,必须要掌握以下知识点: 单片机系统开发与应用工程实习 报告 2 1、电源原理及设计 2、单片机复位电路工作原理及设计 3、单片机晶振电路工作原理
6、及设计 4、按键电路的设计 5、一体化红外遥控接收器的特性及使用 6、 AT89S52 单片机引脚 7、单片机 C 语言程序设计 2.2 解决问题的基本思路 2.2.1 AT89S52 单片机的基本知识 功能 特性: AT89S52 是一种低功耗、高性能 CMOS8 位微控制器,具有 8K 在系统可编程 Flash 存储器。使用 Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上 Flash 允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的 8 位 CPU 和在系统 可编程 Flash,使得 AT89S52为众多嵌入式控制应用
7、系统提 供高灵活、超有效的解决方案。 AT89S52 具有以下标准功能: 8k 字节 Flash, 256 字节 RAM, 32 位 I/O 口线,看门狗定时器 , 2 个数据指针,三个 16 位 定时器 /计数器,一个 6 向量 2 级中断结构,全双工串行口, 片内晶振及时钟电路。另外, AT89S52 可降至 0Hz 静态逻 辑操作,支持 2 种软件可选择节电模式。空闲模式下, CPU 停止工作,允许 RAM、定时器 /计数器、串口、中断继续工作。掉电保护方式下, RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。 8 位微控制器 8K 字节在系统可编程
8、Flash AT89S52。 主要性能:与 MCS-51 单片机产品兼容、 8K 字节在系统可编程 Flash 存储器、 1000次擦写周期、全静态操作: 0Hz 33Hz 、 三级加密程序存储器 、 32 个可编程 I/O 口线 、三个 16 位定时器 /计数器八个中断源、全双工 UART 串行通道、低功耗空闲和掉电模式、掉电后中断可唤醒、看门狗定时器、双数据指针、掉电标识符。 单片机系统开发与应用工程实习 报告 3 图 2-1 AT89S52 引 脚图 2.2.2 对于抗干扰能力的解决 该项目中采用一体化红外遥控接收器 SM0038,该接收器的内部包括红外光敏二极管、谐振电路、放大电路、解
9、码器、滤波器等,其工作电压为 +5V,输出引脚直接输出不 带副载波的负极性 RC-5V 信号,具有电路简单、灵敏度高、抗干扰性好等优点。 2.3 总体方案 学习型红外线遥控器,通过自学习而拥有对多台电器的遥控功能。该遥控器有两种状态:学习状态和控制状态。处于学习状态时,使用者每按一个控制键红外接收电路就开始接收外来红外信号,并将其转换为电信号,然后经过检波、整形、放大,再由单片机定时对其采样,将每个采样点的二进制数据以 8 位为一个单位,分别存放到指定的存储单元中去,供以后对该设备控制使用;处于 接受 控制 状态时,每接受 1 次,P2 口加 1,数码管显示。 2.3 功能模块框图 遥 控器由
10、红外接收及红外发射电路、复位电路、控制器 AT89S52、按键及状态指示电路组成,其组成框图如图 2-1 所示。 AT89S52 控 红外接收电路 电源电路 单片机系统开发与应用工程实习 报告 4 图 2-2 基于 AT89S52 学习型红外线遥控器系统框图 3 系统设计 3.1 电路原理图 控制芯片选择 AT89S52 单片机,控制系统按最小化工作模式设计, P1.0 接红外线发射, P1.6 和 P3.1 接两个发光二极管用来指示遥控器的工作状态, P3.4 和 P3.5 用来接收和发射红外线。红外接收采用一体化红外遥控接收器( SM0038)。 其 发射板 原理图如图 3-1( a) 所
11、示。 图 3-1( a 基于 AT89S52 学习型红外遥控器原理图 接收模块原理图( b) 单片机系统开发与应用工程实习 报告 5 3.2 实现方法 当红外遥控器的某个按键按下时,发射出的一组串行二进制编码脉冲,该脉冲由引导码、系统码、功能码和反码组成,通过设置这些编码以及码长便可区分不同的红外遥控器。红外接收器负责红外信号的接收和放大并解调出 TTL 电平信号送至微处理器进行处理,微处理器通过比较和识别接收来的红外遥控编码便可执行相应的遥控功能,本系统的设计思想是不考虑红外编码方式,仅利用单片机 AT89S52 对多个红外遥控编码的脉冲宽度进行测量,并原封不动 地把发射信号中高、低电平的时
12、间宽度记忆至存储区的指定地址。当要发射红外信号时,从存储区中还原出相应的红外遥控编码,并调制到 38kHz 的载波信号上, 从而实现一个遥控器控制多种遥控设备的功能。 3.3 详细流程图 在程序中主程序完成初始化、按键扫描和调用信号发射程序的功能,学习功能通过中断 0 来完成。程序的具体流程图如图 3-2 所示。 中断开始 开学习指示灯 等待键释放 读遥控码 单片机系统开发与应用工程实习 报告 6 (a)主程序流程图 图 3-2 基于 AT89S52 学习型红外线遥控器程序流程图 4 代码编写 4.1 AT89S52 单片机与各模块电路的连接端口分配 发射模块: #include #inclu
13、de #define uchar unsigned char #define uint unsigned int sbit key1=P33; sbit key2=P34; sbit key3=P35; sbit LED=P37; /发射指示灯 sbit out=P31; uchar i,a,num1; 接收模块: #include #include #define uchar unsigned char #define uint unsigned int Y 开始 初始化 扫描按键? 信号发射 N 单片机系统开发与应用工程实习 报告 7 sbit led=P11; sbit in=P32; uchar i,a,num; bit fleg; 4.2 复位电路的设计 复位电路实现的是对单片机以及整个电路的初始化 发射模块: void init()/初始化作用 key1=1; key2=1; key3=1; void delay(uchar aa) uchar bb,cc; for(bb=aa;bb0;bb-) for(cc=200;cc0;cc-); void delayms(uchar aa)/延时程序 for(a=aa;a0;a-) _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();