红外遥控电子密码锁的设计与实现.doc

上传人:爱问知识人 文档编号:3290901 上传时间:2019-08-08 格式:DOC 页数:39 大小:516.01KB
返回 下载 相关 举报
红外遥控电子密码锁的设计与实现.doc_第1页
第1页 / 共39页
红外遥控电子密码锁的设计与实现.doc_第2页
第2页 / 共39页
红外遥控电子密码锁的设计与实现.doc_第3页
第3页 / 共39页
红外遥控电子密码锁的设计与实现.doc_第4页
第4页 / 共39页
红外遥控电子密码锁的设计与实现.doc_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《红外遥控电子密码锁的设计与实现.doc》由会员分享,可在线阅读,更多相关《红外遥控电子密码锁的设计与实现.doc(39页珍藏版)》请在三一文库上搜索。

1、成都信息工程学院成都信息工程学院“天府软件园天府软件园”杯嵌入杯嵌入 式创新技术大赛式创新技术大赛 报告书报告书 项目名称:项目名称: 红外遥控电子密码锁的设计与实现 完成日期:完成日期: 2011 年 5 月 成成 员:员: 摘摘要要: 本设计是以 STC89C52 为主要芯片,以中断、计数等基本工作方式来控制、 判断外部器件的工作、工作状态,结合采用数字信号编码的基本算法,用红外 遥控器遥控发送密码、再用红外接收管接收密码,单片机根据红外接收管导通 与否和持续时间结合二次调制方式的基本算法还原遥控器发送的密码,再与外 部储存器 AT24C02 储存的密码对比,判断密码是否正确,辅助以 LC

2、D12864 显 示用户的操作结果,以蜂鸣器提醒,再通过矩阵键盘实现输入或修改密码等基 本功能实现红外电子密码锁的设计。该设计运用了 c 语言编写程序,简单、明 了,很好的实现了红外通信的要求。在以往设计的基础上,该设计添加了在线 烧写程序,极大的方便了用户使用,特别是为工业生产带来了极大的便利。红 外电子密码锁具有成本较低、操作方便、体积小、无污染、反应速度快等优势, 具有很好的市场价值。 关键词:关键词: 编码、解码、密码、红外 目录目录 1总体设计思路总体设计思路 1 1.1题目要求1 1.2本设计主要硬件功能部分 1 1.3本设计软件的总体构思 1 2系统的硬件设计与实现系统的硬件设计

3、与实现 .3 2.1AT24C02 模块.3 2.1.1器件及原理介绍.3 2.1.2电路实现.4 2.2红外通信模块4 2.2.1遥控发射器及其编码.4 2.2.2电路实现.6 2.3矩阵键盘模块7 2.4显示模块7 2.4.1LCD12864 介绍 .7 2.4.2LCD12864 电路图: .8 2.5蜂鸣器模块8 2.6单片机最小系统模块 9 2.6.1单片机最小系统电路图:.9 3软件设计软件设计10 3.1程序流程图10 3.1.1主程序流程图.10 3.1.2键值判断流程图.11 3.1.3开锁流程图.12 3.1.4密码修改流程图.13 3.1.5红外接收流程图.14 3.1.

4、6按键扫瞄流程图.15 3.2程序设计(见附录二) 15 4总结:总结:16 5参考文献:参考文献: 17 6附录一附录一18 6.1整体电路结构: 18 6.2PCB 图:.18 7附录二附录二19 7.1AT24C02 模块.19 7.2红外通信模块22 7.3矩阵键盘模块24 7.4LCD12864 显示.26 7.5主程序29 1 1总总体体设设计计思思路路 1.1 题目要求 红外遥控电子密码锁由红外遥控发射板、红外接收终端、带控制的电子锁 构成。当红外接收终端收到遥控板送来的开锁密码信号,并与保存在终端中的 密码对比。当对比成功后终端向电子锁发出开锁命令,完成开锁功能。 此题目的重点

5、、难点是实现红外信号的接收、密码储存和正确识别按键并 显示操作结果。由于红外遥控不影响周边环境、不干扰其他电器设备,其无法 穿透墙壁,因此,不同房间的家用电器可使用通用的遥控器而不会产生相互干 扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作; 编解码容易,可进行多路遥控。而且红外电子密码所体积较小、操作方便等优 势,具有很好的市场前景。 1.2本设计主要硬件功能部分 本系统主要由六大部分组成: 1) 单片机最小系统模块; 2) LCD 显示电路模块; 3) 阵列键盘模块; 4) 红外接收模块; 5) AT24C02 模块; 6) 蜂鸣器模块; 1.3本设计软件的总体构思

6、 本设计是以 STC89C52 为核心控制器件。本设计是通过 STC89C52 与 AT24C02 之间交换密码后,再与用户通过键盘或红外遥控器发送过来的密码作 对比,再用 LCD12864 显示操作结果,用蜂鸣器提示电子锁是否打开,从而实 现红外遥控电子密码锁的设计,如下图。 2 STC89C52 单片机 AT24C0 2 存储 器 键盘输入 红外二极 管接收 液晶 12864 显 示 蜂鸣器提示 图表图表 1 主体结构主体结构 3 2系系统统的的硬硬件件设设计计与与实实现现 2.1AT24C02 模块 2.1.1 器件及原理介绍 AT24C02 串行 E2PROM 具有 I2C 总线接口功

7、能,功耗低,宽电源电压(根 据不同型号 2.56.0V),工作电流约为 3mA,静态电流随电源电压不同为 30A110A。 图表图表 2 I2C 通信原理:I2C 总线进行数据传送时,时钟信号为高电平期间,数据线 上的数据必须保持稳定,只有在时钟线上的信号为低电平期间,数据线上的高 电平或低电平状态才允许变化,如图 A。SCL 线为高电平期间,SDA 线由高电 平向低电平的变化表示起始信号;SCL 线为高电平期间,SDA 线由低电平向高 电平的变化表示终止信号,如图 4。 图表图表 3 4 图表图表 4 2.1.2 电路实现 A0 、A1 、A2 作为地址线,因在此只有一个器件,故全都接 GN

8、D。SDA 作串行数据读写端接 P1.2 口,SCL 作为时钟信号接 P1.1 口。 图表图表 5 AT24C02 硬件结构硬件结构 2.2 红外通信模块 2.2.1 遥控发射器及其编码 遥控发射器专用芯片很多,根据编码格式可以分成两大类,这里我们以 运用比较广泛,解码比较容易的一类来加以说明,现以日本 NEC 的 uPD6121G 组成发射电路为例说明编码原理, 我们使用的超薄型红外线遥控器使用的就是 6121 编码。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也 不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为 0.565ms、间隔 0.56ms、周期为 1.12

9、5ms 的组合表示二进制的“0”;以脉宽为 0.565ms、间隔 1.685ms、周期为 2.25ms 的组合表示二进制的“1”, 其波形如图 7 所示。 5 图表图表 6 上述“0”和“1”组成的 32 位二进制码经 38kHz 的载频进行二次调制 以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生 红外线向空间发射。 UPD6121G 产生的遥控编码是连续的 32 位二进制码组,其中前 16 位为 用户识别码,能区别不同的电器设备,防止不同机种遥控码互相干扰,如我们 可以同时使用电视机、机顶盒、功放等遥控器,但它们不会产生误触发。该芯 片的用户识别码固定为十六进制 01H

10、;后 16 位为 8 位操作码(功能码)及其 反码。UPD6121G 最多额 128 种不同组合的编码。 遥控器在按键按下后,周期性地发出同一种 32 位二进制码,周期约为 108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而 不同,大约在 4563ms 之间, 图表图表 7 发射波形图发射波形图 当一个键按下超过 36ms,振荡器使芯片激活,将发射一组 108ms 的编码脉冲,这 108ms 发射代码由一个起始码(9ms),一个结果码(4.5ms),低 8 位地址码(9ms18ms),高 8 位地址码(9ms18ms),8 位数据码 (9ms18ms)和这 8 位数据的

11、反码(9ms18ms)组成。如果键按下超过 108ms 仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结 束码(2.5ms)组成。 代码格式(以接收代码为准,接收代码与发射代码反向) 1)位定义 6 图表图表 8 2)单发代码格式 图表图表 9 3)连发代码格式 图表图表 10 2.2.2 电路实现 一体化的红外接收装置将遥控信号的接收、放大、检波、整形集于一身, 并且输出可以让单片机识别的 TTL 信号,这样大大简化了接收电路的复杂程度 和电路的设计工作,方便使用。在本系统中我们采用红外一体化接收头 HS0038,外观图如图所示。 图表图表 11 HS0038 黑色环氧树脂封

12、装,不受日光、荧光灯等光源干扰,内附磁屏蔽, 功耗低,灵敏度高。在用小功率发射管发射信号情况下,其接收距离可达 7 35m。它能与 TTL、COMS 电路兼容。HS0038 为直立侧面收光型。它接收红 外信号频率为 38 kHz,周期约 26 s,同时能对信号进行放大、检波、整形,得 到 TTL 电平的编码信号。三个管脚分别是地、5 V 电源、解调信号输出端。 利用外部中 0 断进行数据的接收。 图表图表 12 HS0038 硬件结构硬件结构 2.3矩阵键盘模块 将 12 个按键分为 4 排 3 列排列好,如图:矩阵键盘硬件结构。当有一个键 按下时,通过某一边引脚赋低电平,扫描全部引脚看是否与

13、最初的赋值一样, 不一样则根据相应的算法(通过改变后的值与初始值相或,根据结果赋值)确 定是哪个键按下。 图表图表 13 矩阵键盘硬件结构矩阵键盘硬件结构 2.4显示模块 2.4.1 LCD12864 介绍 8 LCD12864 分为带字库和不带字库两种,带字库的在显示文本时更方便, 不带字库的在显示图像时更有优势。本系统采用带字库的 LCD12864,采用标 准的 20 脚接口,各引脚接口说明如表所示: 编号符号引脚说明编号符号引脚说明 1VSS电源地11D4数据 2VDD电源正极12D5数据 3V0对比度亮度调整 13D6数据 4RS数据/命令选择 14D7数据 5R/W读/写选择15PS

14、B串行通信选择端 6E使能信号16NC空脚 7D0数据17RET复位 8D1数据18VOUT LCD 驱动负电压 9D2数据19LED+背光电源正极 10D3数据20LED-背光电源地 2.4.2 LCD12864 电路图: 图表图表 14 LCD12864 硬件结构硬件结构 2.5蜂鸣器模块 9 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于 计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时 器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两 种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等) 表示。

15、 有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发 声;而无源蜂鸣器则和电磁扬声器一样,需要接在音频输出电路中才能发声。本 系统采用无源蜂鸣器,控制更简单。 蜂鸣器硬件如下图: 图表图表 15 2.6单片机最小系统模块 2.6.1 单片机最小系统电路图: 图表图表 16 最小系统最小系统 10 3软软件件设设计计 3.1程序流程图 3.1.1 主程序流程图 开始 系统初始化 进入键值判断程序 显示主界面 图表图表 17 主程序流程图主程序流程图 11 3.1.2 键值判断流程图 图表图表 18 键值判断流程图键值判断流程图 12 3.1.3 开锁流程图 图表图表 19 开锁程

16、序流程图开锁程序流程图 13 3.1.4 密码修改流程图 图表图表 20 密码修改流程图密码修改流程图 14 3.1.5 红外接收流程图 图表图表 21 红外接收流程图红外接收流程图 15 3.1.6 按键扫瞄流程图 图表图表 22 按键扫描流程图按键扫描流程图 3.2 程序设计(见附录二) 16 4 总总结结: 本设计不但很好的满足了题目的要求,即终端能够接收红外遥控发射板发 射的红外信号(密码)并能与已存密码作对比,而且能够在液晶上显示操作结 果,还增加了取消这一功能,从而完成了红外遥控电子密码锁的要求。但一开 始并不是这么顺利,最先将程序下载到机子里面,键盘不能工作,后经查发现 键盘程序

17、没有运行。改过来后又发现多了一个键,没有用处,经讨论将多的键 设为取消键。原来设计的电源是直接用 USB 从电脑上引出来,后来在此解读题 目时发现不能满足题目要求,所以添加了一个用 7805 稳压的小模块。美中不足 的是此设计红外遥控的距离并不太理想(一米多一点),而且取消功能并不是 想象的能够取消前面自己不想要的内容,而是返回主菜单。但这些不足并不能 抵消此设计带来的好处。 17 5 参参考考文文献献: 侯 璐 黑龙江大学学生学术科技创新项目申请书 甄盈盈 红外遥控密码锁的设计与实现 撰写电子设计竞赛报告参考格式 第 7 章 电子设计竞赛设计总结报告写作 在此感谢以上作者、作品。但由于部分原

18、因没有完全列举出作者姓名或作 品完整,望谅解。 18 6附附录录一一 6.1整体电路结构: 图表图表 23 总电路图总电路图 6.2PCB 图: 图表图表 24 pcb 电路图电路图 19 7附附录录二二 7.1AT24C02 模块 #include “common.h“ sbitWP = P10; sbitSCL = P11; sbitSDA= P12; void Delay_US(void) ; void Delay_10MS(void) uchar i = 0; uchar j = 0; for(i = 50;i0;i-) for(j=200;j0;j-); void AT24C08_u

19、nprotect() WP = 0; voidAT24C02_Start(void)/开始总线 SDA = 1; SCL = 1; Delay_US(); SDA = 0; Delay_US(); void AT24C02_Stop(void)/停止总线 SDA = 0; SCL = 1; Delay_US(); SDA = 1; 20 Delay_US(); void AT24C02_Ack(void)/ACK 信号 uchar i = 0;/等待从机回应 SCL = 1; Delay_US(); while(SDA =1) /先读高位数据 SCL = 0; Delay_US(); retu

20、rn Value; void AT24C02_Write(uchar Address,uchar Value) AT24C02_Start();/起始条件 AT24C02_Write_Byte(0xA0);/器件地址 1010 0000/写 AT24C02_Ack();/等从机应答 AT24C02_Write_Byte(Address); / 1024 字节,其中一个字节操作 25 AT24C02_Ack(); AT24C02_Write_Byte(Value);/ 0x15 AT24C02_Ack();/ AT24C02_Stop(); Delay_10MS(); uchar AT24C02

21、_Read(uchar Address) uchar Value = 0; AT24C02_Start();/开始总线 AT24C02_Write_Byte(0xA0);/ 1010 0000 AT24C02_Ack(); AT24C02_Write_Byte(Address); /读数据的地址; /25 AT24C02_Ack(); AT24C02_Start();/再次开始 AT24C02_Write_Byte(0xA1);/ 1010 0001 AT24C02_Ack(); Value = AT24C02_Read_Byte(); AT24C02_NOAck();/主机发送给从机无应答

22、22 AT24C02_Stop(); return Value; 7.2红外通信模块 sbit beer=P04; sbit RED_DATA=P32; /红外接口 /uchar RED_ADD=0;/红外遥控的地址 uchar RED_add=255; /红外遥控的地址缓存区 uchar RED_key=255; /红外摇控的键值,无键按下时为 255 /红外初始化 void Init_Red(void) RED_DATA=1; /P32 输出高电平 EX0=1;/开启红外中断 P32 /检测脉冲宽度 uchar Red_check(void) uchar t=0;uchar a=0; wh

23、ile(RED_DATA) t+; for(a=0;a=200 value+; void LCD_Write_Num(uchar x, uchar y, uchar Value) LCD_Write(0, addr_tab8*y + x); LCD_Write(1, Value); void LCD_Write_Hanzi(uchar x, uchar y, uchar *Value) 29 LCD_Write(0, addr_tab8*y + x); while(*Value 0) LCD_Write(1, *Value); Value+; 7.5主程序 #include “common.h

24、“ sbit beer = P04; uchar KEY_main = 255; uchar minma8 =0; uchar anma8 =0; bit OPEN = 0; void main_key(); uchar MIMA_shuru(); void MIMA_change(); void MIMA_zhuanhuan(uchar *minma, uchar *anma); uchar MIMA_bidui(uchar *minma, uchar *anma); void MIMA_save(); void show_menu(); void show_huanyingjiemian(

25、); void SYS_init(); void INTERRUPT_ON(); void INTERRUPT_OFF(); void main() SYS_init(); show_menu(); while(1) main_key(); void main_key() if(KEY_main != 255) 30 if(OPEN = 0) switch(KEY_main) case 1:/开锁 KEY_main=255; INTERRUPT_OFF(); LCD_Clear(); LCD_Write_Hanzi(0, 0, “请输入密码: “);/显示开锁界面 INTERRUPT_ON()

26、; if(MIMA_shuru() if(MIMA_bidui(minma, anma)/转换为暗码与存储器 中的进行对比 INTERRUPT_OFF(); LCD_Clear(); OPEN = 1; LCD_Write_Hanzi(0, 0, “锁已打开!“);/执行开锁 动作 Delayms(800); INTERRUPT_ON(); show_huanyingjiemian(); else INTERRUPT_OFF(); LCD_Clear(); LCD_Write_Hanzi(0, 0, “输入错误!“);/提示输入 错误 Delayms(800); INTERRUPT_ON();

27、 show_menu(); break; else break; case 2:/修改密码 31 KEY_main=255; INTERRUPT_OFF(); LCD_Clear(); LCD_Write_Hanzi(0, 0, “请输入旧密码:“);/显示修改密 码界面 INTERRUPT_ON(); if(MIMA_shuru() if(MIMA_bidui(minma, anma)/转换为暗码与存储器 中的进行对比 MIMA_change();/进入修改密码函数 show_menu(); else INTERRUPT_OFF(); LCD_Clear(); LCD_Write_Hanzi

28、(0, 0, “输入错误!“);/提示输入 错误 Delayms(800); INTERRUPT_ON(); show_menu(); break; else break; else switch(KEY_main) case 1:/开蜂鸣器 beer = 0; break; case 2:/关蜂鸣器 beer = 1; break; 32 case 3:/退出 OPEN = 0; show_menu(); break; uchar MIMA_shuru() uchar cnt = 0, i = 0, j = 1; for(i = 0; i 8; i+) minmai=0; INTERRUPT

29、_ON(); KEY_main=255; while(KEY_main=255); INTERRUPT_OFF(); LCD_Write_x_y(0, 1); while(KEY_main!=10)/当按键不是确定键 if(KEY_main10 LCD_Write(1, KEY_main+0x30);/显示密码 else if(KEY_main=11) j = 0; show_menu(); break; INTERRUPT_ON(); KEY_main=255; while(KEY_main=255);/等键按下 INTERRUPT_OFF(); KEY_main=255; 33 retur

30、n j; /密码修改函数 void MIMA_change() INTERRUPT_OFF(); LCD_Clear(); LCD_Write_Hanzi(0, 0, “请输入新密码: “); INTERRUPT_ON(); if(MIMA_shuru() MIMA_zhuanhuan(minma, anma); MIMA_save();/储存暗码 INTERRUPT_OFF(); LCD_Write_Hanzi(0, 3, “修改成功!“); Delayms(800); INTERRUPT_ON(); else INTERRUPT_OFF(); LCD_Write_Hanzi(0, 3, “

31、已取消修改!“); Delayms(800); INTERRUPT_ON(); void MIMA_zhuanhuan(uchar *minma, uchar *anma) uchar i = 0; for(i = 0; i 8; i+) anmai=minmai*minmai; uchar MIMA_bidui(uchar *minma, uchar *anma) uchar i = 0, value=1; INTERRUPT_OFF(); for(i = 0; i 8; i+) anmai = AT24C02_Read(i); INTERRUPT_ON(); for(i = 0; i 8;

32、 i+) 34 if(anmai != minmai *minmai) value = 0;break; return value; void MIMA_save() uchar i = 0; INTERRUPT_OFF(); for(i = 0; i 8; i+) AT24C02_Write(i, anmai); INTERRUPT_ON(); void show_menu() INTERRUPT_OFF(); LCD_Clear(); LCD_Write_Hanzi(0, 0, “1 开锁;“); LCD_Write_Hanzi(0, 1, “2 修改密码;“); INTERRUPT_ON

33、(); void show_huanyingjiemian() INTERRUPT_OFF(); LCD_Clear(); LCD_Write_Hanzi(0, 0, “欢迎进入本系统!“); LCD_Write_Hanzi(0, 1, “1 开蜂鸣器;“); LCD_Write_Hanzi(0, 2, “2 关蜂鸣器;“); LCD_Write_Hanzi(0, 3, “3 退出;“); INTERRUPT_ON(); void SYS_init() INIT_LCD(); Init_Red(); INIT_TIME_0(); AT24C08_unprotect(); INTERRUPT_ON(); void INTERRUPT_ON() 35 EA = 1; void INTERRUPT_OFF() EA = 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 信息产业


经营许可证编号:宁ICP备18001539号-1