ImageVerifierCode 换一换
格式:DOCX , 页数:44 ,大小:289.83KB ,
资源ID:2921076      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-2921076.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机课设报告红外密码锁.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

单片机课设报告红外密码锁.docx

1、单片机课设报告红外密码锁 华侨大学单片机课程设计报告 题目 红外密码锁 班级 09电子C 班一、总体设计思路红外遥控电子密码锁由红外遥控发射遥控、红外接收终端、电子锁构成。当红外接收终端收到遥控器送来的开锁密码,并与保存在终端中的密码对比。当对比成功后终端向电子锁发出开锁命令,完成开锁功能。此题目的重点、难点是实现红外信号的接收、密码储存和显示操作结果。由于红外遥控不影响周边环境、不干扰其他电器设备,其无法穿透墙壁,因此,不同房间的家用电器可使用通用的遥控器而不会产生相互干扰;电路调试简单,只要按给定电路连接无误,一般不需任何调试即可投入工作;编解码容易,可进行多路遥控。而且红外电子密码所体积

2、较小、操作方便等优势,具有很好的市场前景。1、本设计主要硬件功能部分本系统主要由六大部分组成:1) 单片机最小系统模块;2) LCD显示电路模块;3) 红外接收模块;4) LED指示灯和蜂鸣器模块;2、总体电路仿真图二、模块电路设计思路1、 STC89C52介绍STC89C52是由深圳宏晶科技公司生产的与工业标准MCS-51指令集和输出管脚相兼容的单片机。STC89C52主要功能如表2.1所示,其PDIP封装如图2.1所示主要功能特性兼容MCS51指令系统8K可反复擦写Flash ROM32个双向I/O口256x8bit内部RAM3个16位可编程定时/计数器中断时钟频率0-24MHz2个串行中

3、断可编程UART串行通道2个外部中断源共6个中断源2个读写中断口线3级加密位低功耗空闲和掉电模式软件设置睡眠和唤醒功能表2.1 STC89C52主要功能 STC89C52引脚介绍 主电源引脚(2根)VCC(Pin40):电源输入,接5V电源GND(Pin20):接地线外接晶振引脚(2根)XTAL1(Pin19):片内振荡电路的输入端XTAL2(Pin20):片内振荡电路的输出端控制引脚(4根)RST/VPP(Pin9):复位引脚,引脚上出现2个机器周期的高电平将使单片机复位。ALE/PROG(Pin30):地址锁存允许信号PSEN(Pin29):外部存储器读选通信号EA/VPP(Pin31):

4、程序存储器的内外部选通,接低电平从外部程序存储器读指令,如果接高电平则从内部程序存储器读指令。可编程输入/输出引脚(32根)STC89C52单片机有4组8位的可编程I/O口,分别位P0、P1、P2、P3口,每个口有8位(8根引脚),共32根。P0口(Pin39Pin32):8位双向I/O口线,名称为P0.0P0.7P1口(Pin1Pin8):8位准双向I/O口线,名称为P1.0P1.7 P2口(Pin21Pin28):8位准双向I/O口线,名称为P2.0P2.7 P3口(Pin10Pin17):8位准双向I/O口线,名称为P3.0P3.72、红外接收模块遥控发射器专用芯片很多,根据编码格式可以

5、分成两大类,这里 我们使用的超薄型红外线遥控器使用的就是6121 编码。当发射器按键按下后,即有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56ms、周期为1.125ms 的组合表示二进制的“0”;以脉宽为0.565ms、间隔1.685ms、周期为2.25ms 的组合表示二进制的“1”, 其波形如图7 所示。 上述“0”和“1”组成的32 位二进制码经38kHz 的载频进行二次调制以提高发射效率,达到降低电源功耗的目的。然后再通过红外发射二极管产生红外线向空间发射。遥控器在按键按下后,周期性地发出同一种32 位二进制码

6、,周期约为108ms。一组码本身的持续时间随它包含的二进制“0”和“1”的个数不同而不同,大约在4563ms 之间, 下图为发射波形当一个键按下超过36ms,振荡器使芯片激活,将发射一组108ms 的编码脉冲,这108ms发射代码由一个起始码(4.5ms),一个结果码(4.5ms),低8 位地址码(9ms18ms),高8 位地址码(9ms18ms),8 位数据码(9ms18ms)和这8 位数据的反码(9ms18ms)组成。如果键按下超过108ms 仍未松开,接下来发射的代码(连发代码)将仅由起始码(9ms)和结束码(2.5ms)组成。 代码格式(以接收代码为准,接收代码与发射代码反向) 1)

7、位定义 2) 单发代码格式 3) 连发代码格式 电路实现一体化的红外接收装置将遥控信号的接收、放大、检波、整形集于一身,并且输出可以让单片机识别的TTL 信号,这样大大简化了接收电路的复杂程度和电路的设计工作,方便使用。在本系统中我们采用红外一体化接收头HS0038,外观图如图所示。HS0038 黑色环氧树脂封装,不受日光、荧光灯等光源干扰,内附磁屏蔽,功耗低,灵敏度高。在用小功率发射管发射信号情况下,其接收距离可达35m。它能与TTL、COMS 电路兼容。HS0038 为直立侧面收光型。它接收红外信号频率为38 kHz,周期约26 s,同时能对信号进行放大、检波、整形,得到TTL 电平的编码

8、信号。三个管脚分别是地、5 V 电源、解调信号输出端。利用外部中0断进行数据的接收。图表为HS0038硬件结构 3、LCD1602液晶显示模块各个引脚功能名称及作用电路图如下4、LED指示及蜂鸣器模块蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。蜂鸣器在电路中用字母“H”或“HA”(旧标准用“FM”、“LB”、“JD”等)表示。有源蜂鸣器直接接上额定电源(新的蜂鸣器在标签上都有注明)就可连续发声;而无源蜂鸣器则和电磁扬声器一样,需要接

9、在音频输出电路中才能发声。本系统采用有源蜂鸣器,控制更简单。蜂鸣器硬件如下图: LED指示模块由三个LED灯组成,分别为红、绿、黄三种颜色。当红灯亮时,密码锁处于锁紧状态;绿灯亮时,密码锁开启状态,当黄灯亮时,则输入密码错误提示,同时若三次输入错误,三灯全亮,同时蜂鸣器响。LED指示模块如下:4、密码模块(STC89C52内部存储自带EEPROM)1、内置EEPROM简介单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等存储器来实现。在传统的单片机系统中,一般是在片外扩展存储器

10、,单片机与存储器之间通过IIC 或SPI 等接口来进行数据通信。这样不光会增加开发成本,同时在程序开发上也要花更多的心思。在STC 单片机中内置了EEPROM(其实是采用IAP 技术读写内部FLASH 来实现EEPROM),这样就节省了片外资源,使用起来也更加方便。下面就详细介绍STC 单片机内置EEPROM 及其使用方法。要使用IAP 功能,与以下几个特殊功能寄存器相关:ISP_DATA: ISP/IAP 操作时的数据寄存器。ISP/IAP 从Flash 读出的数据放在此处,向Flash 写的数据也需放在此处ISP_ADDRH:ISP/IAP 操作时的地址寄存器高八位。ISP_ADDRL:I

11、SP/IAP 操作时的地址寄存器低八位。ISP_CMD: ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发方可生效。ISP_TRIG:ISP/IAP 操作时的命令触发寄存器。单片机芯片型号起始地址内置EEPROM 容量(每扇区512 字节)STC89C51RC,STC89LE51RC 0x2000 共八个扇区TSC89C52RC,STC89LE52RC 0x2000 共八个扇区STC89C54RD+,STC89LE54RD+ 0x8000 共五十八个扇区STC89C55RD+,STC89LE55RD+ 0x8000 共五十八个扇区STC89C58RD+,STC89LE58RD+ 0

12、x8000 共五十八个扇区寄存器标识 地址 名称7 6 5 4 3 2 1 0 初始值ISP_DATA 0xE2 ISP/IAP闪存数据寄存器 11111111ISP_ADDRH 0xE3 ISP/IAP 闪存地址高位 00000000ISP_ADDRL 0xE4 ISP/IAP 闪存地址低位 00000000ISP_CMD 0xE5 ISP/IAP闪存命令寄存器 MS2 MS1 MS0 xxxxx000ISP_TRIG 0xE6 ISPIAP 闪存命令触发 xxxxxxxxISP_CONTR 0xE7 ISP/IAP 控制寄存器ISPEN SWBS SWRST WT2 WT1 WT0 00x

13、x000B7 B6 B5 B4 B3 B2 B1 B0 命令操作模式选择保留命令选择 0 0 0 待机模式,无ISP/IAP 操作 0 0 1 对用户的应用程序Flash 区及数据Flash 区字节读 0 1 0 对用户的应用程序Flash 区及数据Flash 区字节编程 0 1 1 对用户的应用程序Flash 区及数据Flash 区扇区擦除2、EEPROM在密码锁中的使用因为EEPROM具有掉电数据不丢失的功能,在密码锁中用于存储密码信息是再好不过的了。这次设计使用了EEPROM的第一个扇区,地址开始为0x2000,连续存储8位密码。应用EEPROM时应该主义一个问题,在reg52头文件中,

14、未定义EEPROM中的ISP_DATA: ISP_ADDRH: ISP_ADDRL:ISP_CMD:等寄存器,需在reg52头文件中定义,如下图所示:三、功能简介 关于红外密码锁的功能,下面我将简单地描述一下:1、 对于密码锁首次开机,里面是未设密码的,此时CPU首先读取EEPROM内的8位密码数据,当全为0xff时则表示未写入任何数据,此时会提示设置密码。2、 确认设置密码,进入设置界面,此时用户可以自行设置8位的密码,按确认键,密码存入EEPROM中,同时返回。3、 设置密码完毕后,进入输入密码界面。此时用户可以输入8位密码进行开锁 操作。此时三个LED灯都不亮。4、 若输入密码错误,则黄

15、色LED灯亮,页面提示剩余开锁机会,1秒后返回密码输入界面。此密码锁有三次的输入机会,若三次输入均错误,则密码锁锁死,红色LED灯亮,同时报警声想起,持续1分中后,重新返回输入界面。5、 当输入密码正确,则密码锁打开,此时绿色LED灯亮,表示密码锁打开,此时LCD显示开锁状态的8秒时间倒计时,同时提示是否进入修改密码设置。6、 若倒计时为0或按下返回键,LED灯灭,密码锁锁住,返回输入界面。7、 若按下确认,则进入设置密码的界面,操作同2;四、设计过程中的问题及改进 在这次的课程设计中,遇到过许多的问题,幸运的时都顺利地解决,一下是所遇的问题及解决方法:1、 EEPROM数据写入时与读出的数据

16、不一样。运用EEPROM时,在数据写入后,必须立即进行数据对比,看是否正确写入,因为有时写入EEPROM的数据会发生错误。在我经过数据写入再读出校验后,很好地解决了这个问题。2、 首次输入密码可以进行开锁,再次输入时则一直提示输入错误。进过检验,发现程序中密码进行对比时,有一变量未重新置0;导致一直提示错误。后在每次进行密码对比时,将此变量重新置0,密码锁正常工作。五、心得通过本次论文设计,使我加深了对单片机的认识,并且熟悉了单片机系统的设计流程,收获丰硕。功能上基本达标,硬件设施基本合乎要求,软件设计可以配合硬件实现其功能。这次的课程设计,我了解了红外发射的各种编码格式,对红外接收电路有了初

17、步的认识。在运用C语言编程方面,我初步熟悉了C51编程步骤,对于模块化的编程有了初步的认知和能够初步地编写基本程序。这次的实践设计,极大地增加了我对电子方面的兴趣,对于我们所学地理论知识的理解也进行了加深。从这次的论文设计中,我真正的体会到,知识的重要性,特别是要理论联系实际,把我们所学的理论知识运用到实际生活当中,要用知识改变一切。六、参考文献1、51单片机计数与运用系统开发案例精选 江志红编著 清华大学出版社2、单片机原理与运用 张毅刚 主编 高等教育出版社3、STC89C52中文资料.PDF 宏晶科技:专业单片机/存储器供应商 www.MCU-M 4、红外遥控编码资料 明浩(pnzwzw

18、)收集整理5、STC89C51RC,STC89C52RC,STC89C54RD+ EEPROM例程出自 viviFire, 本程序参考 宏晶公司提供的STC5Axx 系列 EEPROM 例子程序附录一、程序1、 主程序头文件-#ifndef _main_h_ #define _main_h_#ifndef uint #define uint unsigned int#endif#ifndef uchar #define uchar unsigned char#endifextern uchar lock_code18;extern uchar lock_code28;extern uchar

19、code_num1,code_num2,v_num,daoji_num;extern void readbus_eeprom();#endif主程序-#include#includedecoding.h#includeeeprom.h#include1602.h#includeset_code.h#include #define uchar unsigned char#define uint unsigned int#define sure 11#define back 12uchar code str1_main=there is no the ;uchar code str2_main=c

20、ode here ; uchar code str3_main=input the code? ;uchar code str4_main=sure ;uchar code str5_main=the lock is open;uchar code str6_main=set code:sure ;uchar code str7_main=warming! ;uchar lock_code18=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;uchar lock_code28=0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;u

21、char code_num1,code_num2,jishi_num=8,count=0,v_num,daoji_num=3,min_daoji;bit daoji_flag1=1,daoji_flag2=0;sbit LED5=P15;sbit LED6=P16;sbit beep=P37;void readbus_eeprom();void delay();uchar Comparision_code();extern unsigned char byte_read(unsigned int byte_addr);/*延时程序*/void delay() uint i,j; for(i=0

22、;i60000;i+); for(j=0;j30000;j+);/* 主函数*/void main() TMOD=0x11; /设置定时器T1工作方式1, T0方式1 TH1=(65536-50000)/256; /赋初值(50ms初值) TL1=(65536-50000)%256; ET1=1; /使能定时器1 TR1=0; EX0=1; /开红外接收中断1, IT0=1; /下降沿触发 PX0=1; /红外接收级别最高 EA=1; lcd_init(); readbus_eeprom(); /读出密码 code_num1=Comparision_code(); while(code_num

23、1=8) /count=8;没有存储密码;则写入密码 write_str(0x80,str1_main); write_str(0xc0,str2_main); delay(); /延时1s左右 set_code(); while(1) /请输入密码 进入主程序 write_str(0x80,str3_main); write_str(0xc0,str4_main); delay(); input_code(); /输入8位密码 并比较返回 code_num2 while(code_num2=1) /输入8位密码 密码正确 code_num=1; 执行开锁 TR1=1;daoji_num=3;

24、 /开计时中断 输入错误变量置3; write_str(0x80,str5_main); write_str(0xc0,str6_main); write_position(2,14); lcd_wdat(jishi_num/10+0x30); /开启时间倒计时显示 lcd_wdat(jishi_num%10+0x30); LED6=0; /绿灯亮 if(key=back|jishi_num=0) /时间到或按下返回键 code_num2=0;TR1=0;jishi_num=8;LED6=1; if(key=sure) /sure键,进入密码修改 TR1=0;jishi_num=8; LED6

25、=1; set_code(); code_num2=0; while(daoji_num=0) /三次输入错误,锁死 TR1=1; daoji_flag2=1;daoji_flag1=0; write_str(0x80,str7_main); beep=0; /蜂鸣器响 LED5=0; /红灯亮 write_position(2,14); lcd_wdat(min_daoji/10+0x30); /开启时间倒计时60s显示 lcd_wdat(min_daoji%10+0x30); if(min_daoji=0) /倒计时=0;关定时中断,程序返回输入界面 TR1=0; daoji_num=3;

26、 daoji_flag2=0; daoji_flag1=1; min_daoji=60; /* 1s计时中断*/void T1_time1s() interrupt 3 TH1=(65536-50000)/256; /赋初值(50ms初值) TL1=(65536-50000)%256; count+; /计时满50ms溢出一次 if(count=20) /溢出20次 即50ms*20=1000ms=1s count=0; if(daoji_flag1=1) /开启时间倒计时8s jishi_num=jishi_num-1; if(daoji_flag2=1) /锁死时间倒计时60s min_d

27、aoji=min_daoji-1; /* 读出eeprom中密码数组*/void readbus_eeprom() uint address=0x2000; uchar i=0; for(i=0;i8;i+) lock_code1i=byte_read(address); address=address+1; /* 判断是否有密码存在*/unsigned char Comparision_code() uchar i,j=0; for(i=0;i8;i+) if(lock_code1i=0xff) j+; return j;2、 红外解码程序-头文件-#ifndef _decoding_h #define _decoding_h#ifndef uint #define uint unsigned int#endif#ifndef uchar #define uchar unsigned char#endifextern void encode() ;extern unsigned char key;extern unsigned char user_code,uuser_code,data_code,udata_code;#endif解码主程序-/* 红外解码保存相关函数及变量*/#include #define uchar unsigned char#d

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2