单片机红外遥控密码锁课程设计2.docx

上传人:b****2 文档编号:574347 上传时间:2023-04-29 格式:DOCX 页数:39 大小:355.37KB
下载 相关 举报
单片机红外遥控密码锁课程设计2.docx_第1页
第1页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第2页
第2页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第3页
第3页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第4页
第4页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第5页
第5页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第6页
第6页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第7页
第7页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第8页
第8页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第9页
第9页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第10页
第10页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第11页
第11页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第12页
第12页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第13页
第13页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第14页
第14页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第15页
第15页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第16页
第16页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第17页
第17页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第18页
第18页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第19页
第19页 / 共39页
单片机红外遥控密码锁课程设计2.docx_第20页
第20页 / 共39页
亲,该文档总共39页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机红外遥控密码锁课程设计2.docx

《单片机红外遥控密码锁课程设计2.docx》由会员分享,可在线阅读,更多相关《单片机红外遥控密码锁课程设计2.docx(39页珍藏版)》请在冰点文库上搜索。

单片机红外遥控密码锁课程设计2.docx

单片机红外遥控密码锁课程设计2

1设计目的意义

随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤其重要。

目前国内,大部分人使用的还是传统的机械锁。

传统的机械锁由于其构造的简单,被撬的事件屡见不鲜。

即使是一把质量过关的机械锁,通过急开锁,甚至可以在不损坏锁的前提下将锁打开。

而且,在日常的生活和工作中,若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,使用极不方便,且钥匙丢失后安全性即大打折扣。

为此,本系统试着设计具有防盗报警功能的红外线遥控电子密码锁来代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点。

而且还添加了红外遥控、遥控器学习识别和LCD显示等功能,可以实现远距离开关锁、修改密码等,系统灵活性强,操作简单直观、使用非常方便。

由于这是一次学生的实习项目,本产品未必能尽善尽美,但基本的要求还是可以满足。

2在线编程电路和实物图

2.1在线编程电路(详见附录1)

2.2实物图

图1实物图

3设计方案

3.1发射模块的方案

使用NEC编码格式红外线遥控编码芯片uPD6122G等作为主芯片再加上外围电路完成发射部分,或直接购买红外线遥控编码芯片的遥控器成品作为系统的发射部分。

因为是红外线遥控编码专用芯片,其内部已经集成了按键检测、处理和红外编码模块。

而且无须编程,使用十分方便。

故市面上的绝大多数的红外遥控器都是使用类似的方案,可见这方面的技术已经相当成熟。

在抗干扰能力上,因为没有涉及到软件,故其抗干扰能力强。

3.2接收模块的方案

发射模块使用型号为HZ-FT007的20键车载MP3红外遥控器和创维RC-585型DVD遥控器,因为它们都是采用NEC编码格式的红外遥控芯片作为主要芯片;使用一体化红外接收头SM0038和单片机STC89C52RC结合的方式完成接收解码模块,学习识别NEC编码格式的不同遥控器;使用单片机内部eeprom作为存储模块;使用LCD1602A实现系统的显示模块。

系统的总框图如图3所示。

这样的选择使系统在较低成本的情况下较好地实现系统的功能,而且系统有着较高的抗干扰性和稳定性。

 

图2选用方案系统框图

4硬件分析及设计

4.1发射模块原理

4.1.1红外发送系统原理

红外遥控信号是一连串的二进制脉冲码。

为了使其在无线传输过程中免受其他红外信号的干扰,通常都是先将其调制在特定的载波频率上,然后再经红外发光二极管发射出去,红外线接收装置则会滤除其它杂波只接收该特定频率的信号并将其还原成二进制脉冲码。

在本红外遥控系统中,红外信号的载波频率为38KHz。

通常,红外遥控系统中所采用的编码方式有两种:

通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)。

本系统是采用PPM方法,即用两个脉冲之间的时间间隔来表示二进制信息。

为了确保发送端和接收端之间数据传输的准确无误,红外线信号还要按照特定的传输协议来进行信号传输。

常用的红外线信号传输协议有NEC协议、RC-5协议、RC-6协议、Sharp协议等。

4.1.2NEC编码格式介绍

本系统使用的型号为HZ-FT007的20键车载MP3红外遥控器和创维RC-585型DVD遥控器请参看前面的实物图,它们主要芯片都是NEC编码格式的红外遥控芯片。

NEC编码广泛应用于电视机,DVD,PC电脑,音响等,是比较常用的一种红外编码格式。

下面以NEC编码标准的红外编码芯片uPD6122G作为例子介绍。

NEC遥控编码是连续的32位二进制码组,其中的前十六位是用户码,后16位为8位的数据码及其反码。

在每次编码之前还会发送9ms高电平和4.5ms低电平组成的引导码(或称起始码)。

而且第二段的用户码也可以在遥控应用电路中被设置为第一段用户码的反码。

它的帧结构如下图所示。

图3帧结构

NEC编码标准是以用不同脉冲的时间间隔来区分‘0’和‘1’的,uPD6122G以脉宽为0.56ms、间隔0.565ms、周期为1.125ms的组合表示二进制的‘0’;以脉宽为0.56ms、间隔1.69ms,周期为2.25ms的组合表示二进制的‘1’。

其波形如下图所示。

图4脉冲波形图

使用455KHz晶振时各代码所占的时间如下图所示:

图5晶振时各代码所占时间

uPD6122G按键输出有两种方式:

一种是每次按键都输出完整的一帧数据;另一种是按下按键不松开时,发送完整的一帧数据后再发送重复码,直到按键被松开。

其波形如下图所示。

图6按键输出波形

4.2接收模块原理

4.2.1接收解码原理

接收解码的关键是如何识别‘0’和‘1’,本系统使用的是一体化红外接收头进行红外信号接收,在没有信号的时候其输出端是高电平,而有信号的时候是低电平,所以其输出信号电平正好和遥控发射端相反。

从上面的讨论可以发现在遥控发射端‘0’和‘1’均以0.56ms的高电平开始,不同的是低电平的宽度,‘0’为0.565ms,‘1’为1.69ms,所以必须根据低电平的宽度区别‘0’和‘1’。

本系统用中断的方式实现从接收头到MCU的信号传输。

如图9所示,红外接收头的输出端连接到单片机的INT0脚。

接收头输出端有低电平信号输出时引起单片机的中断。

单片机响应中断并进行信号的接收解码。

解码后的信号就变成相应的遥控器按键代码,从而可以成为密码锁的密码。

图7中断接收示意图

4.2.2该模块的硬件电路

接收解码电路由一体化红外接收头SM0038和单片机STC89C52RC组成。

STC系列单片机具有在系统中直接可编程特性,其好处是:

省去购买通用编程器,单片机在用户系统上即可下载/烧录用户程序,而无须将单片机从已生产好的产品上拆下,再用通用编程器将程序代码烧录进单片机内部。

有些程序尚未定型的产品可以一边生产,一边完善,加快了产品进入市场的速度,减小了新产品由于软件缺陷带来的风险。

由于可以在用户的目标系统上将程序直接下载进单片机看运行结果对错,故无须仿真器,因此选择使用这款单片机。

一体化红外接收头SM0038是集信号放大、滤波、检波、整形于一体的红外接收器,电路内置PIN二极管和前置放大器,采用可以红外滤波的环氧树脂材料封装,可靠性高,不易受环境影响并可以防止非控制信号的输出脉冲出现。

它的内部电路如图10所示。

图8SM0038内部结构图

SM0038内置带通滤波器、积分器、和自动增益控制电路以抑制各种干扰和噪音。

数据信号和干扰信号的主要区别在于载波频率、脉冲波长和工作周期上。

所以数据信号应该满足载波信号的频率尽量接近带通滤波器的中心频率(38KHZ);脉冲长度在300us以上;数据的编码类型相兼容。

而本系统选用的SM0038在这三方面和NEC编码格式是相配的。

4.3存储模块原理

STC89C51、52内部都自带有2K字节的EEPROM,54、55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000次以上,先来介绍下ISP与IAP的区别和特点。

STC单片机内部有几个专门的特殊功能寄存器负责管理ISP/IAP功能的,见表1。

表1ISP/IAP相关寄存器列表

名称

地址

功能描述

D7

D6

D5

D4

D3

D2

D1

D0

复位值

ISP_DATA

E2h

Flash数据寄存器

11111111

ISP_ADDRH

E3h

Flash高字节地址寄存器

00000000

ISP_ADDRL

E4h

Flash低字节地址寄存器

00000000

ISP_CMD

E5h

Flash命令模式寄存器

--

--

--

--

--

MS2

MS1

MS0

xxxxx000

ISP_TRIG

E6h

Flash命令触发寄存器

xxxxxxxx

ISP_CONTR

E7h

ISP/IAP控制寄存器

ISPEN

SWBS

SWRST

--

--

WT2

WT1

WT0

000xx000

ISP_DATA:

ISP/IAP操作时的数据寄存器。

ISP/IAP从Flash读出的数据放在此处,向Flash写入的数据也需放在此处。

ISP_ADDRH:

ISP/IAP操作时的地址寄存器高八位。

ISP_ADDRL:

ISP/IAP操作时的地址寄存器低八位。

ISP_CMD:

ISP/IAP操作时的命令模式寄存器,须命令触发寄存器触发方可生效。

命令模式如表2所示。

表2ISP_CMD寄存器模式设置

D7

D6

D5

D4

D3

D2

D1

D0

模式选择

保留

命令选择

--

--

--

--

--

0

0

0

待机模式,无ISP操作

--

--

--

--

--

0

0

1

对用户的应用程序flash区及数据flash区字节读

--

--

--

--

--

0

1

0

对用户的应用程序flash区及数据flash区字节编程

--

--

--

--

--

0

1

1

对用户的应用程序flash区及数据flash区扇区擦除

程序在系统ISP程序区时可以对用户应用程序区/数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除;程序在用户应用程序区时,仅可以对数据Flash区(EEPROM)进行字节读/字节编程/扇区擦除。

STC89C51RC/RD+系列单片机出厂时已经固化有ISP引导码,并设置为上电复位进入ISP程序区,并且出厂时就已完全加密。

ISP_TRIG:

ISP/IAP操作时的命令触发寄存器。

在ISPEN(ISP_CONTR.7)=1时,对ISP_TRIG先写入46h,再写入B9h,ISP/IAP命令才会生效。

STC89C52RC,STC89LE52RC单片机内部可用DataFlash(EEPROM)的地址如表3所示,其它型号单片机请查阅相关资料。

表3STC89C52RC、STC89LE52RC单片机内部EEPROM地址表

第一扇区

第二扇区

第三扇区

第四扇区

起始地址

结束地址

起始地址

结束地址

起始地址

结束地址

起始地址

结束地址

2000H

21FFH

2200H

23FFH

2400H

25FFH

2600H

27FFH

第五扇区

第六扇区

第七扇区

第八扇区

起始地址

结束地址

起始地址

结束地址

起始地址

结束地址

起始地址

结束地址

2800H

29FFH

2A00H

2BFFH

2C00H

2DFFH

2E00H

2FFFH

每个扇区为512字节,建议大家在写程序时,将同一次修改的数据放在同一个扇区,方便修改,因为在执行擦除命令时,一次最少要擦除一个扇区的数据,每次在更新数据前都必须要擦除原数据方可重新写入新数据,不能直接在原来数据基础上更新内容。

4.4液晶显示模块原理

系统中采用LCD1602作为显示器件输出信息。

与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。

LCD1602可以显示2行×16个字符,具有8位数据总线D0-D7,和RS、R/W、E三个控制端口,工作电压为5V,并且带有字符对比度调节和背光设置。

LCD1602与单片机的连接电路图参考附录1。

其管脚功能简介如下:

VL:

LCD对比度调节端,电压调节范围为0-5V。

接正电源时对比度最弱,接地电源时对比度最高,可以用一个10K的电位器来调整对比度;

RS:

数据或者指令选择端。

处理器写入指令时,RS为低电平,写入数据时,RS为高电平;

R/W:

读写控制端。

R/W为高电平时,读取数据;R/W为低电平时,写入数据;

E:

LCD模块使能信号控制端。

写数据时,需要下降沿触发模块;

D0-D7:

8位数据总线,三态双向;

BLA:

LED背光正极。

需要背光时,BLA串接一个限流电阻接VCC;

BLK:

LED背光负极。

5软件设计

5.1编程语言

目前,对单片机的编程主要采用汇编和C语言。

汇编语言有执行效率高、速度快、与硬件结合紧密等特点。

尤其在进行I/O端口管理时,使用汇编语言有快捷、直观的优点。

但是使用汇编语言相对于使用高级语言编程难度要大一些,且程序可读性低,开放性差,从系统开发时间来看,效率不是很高。

C语言是一种结构化语言,可产生紧凑代码。

C语言可以用许多机器级函数直接控制操作8051硬件。

与汇编语言相比,C语言有如下的优点:

●不要求了解单片机的指令系统,仅要求对8051的存储结构有初步了解;

●寄存器分配,不同存储器的寻址及数据类型等细节可由编译器管理;

●程序有规范的结构,可分为不同的函数,这种方式可使程序结构化;

●具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;

●关键字及运算符可用近似人的思维方式使用;

●编程及程序调试时间显著缩短,从而提高效率;

●提供的库包含许多标准子程序,具有较强的数据处理能力;

●已编好的程序可容易地植入新程序,因为它具有方便的模块化编程技术。

当然,采用混编模式,就能结合两者的优点。

本着学习的目的,本系统均采用C51语言编写。

5.2主要程序说明及流程图

本系统的软件程序主要包括主程序、接收解码程序、密码判断和报警程序、密码修改程序、遥控器学习识别程序几个大的模块程序。

5.2.1主程序

主程序首先是初始化程序,然后就等待红外接收头输出端的低电平,低电平出现说明遥控有键按下,外部中断设定为下降沿触发,故单片机进入中断服务程序进行信号的接收解码。

当接收到遥控器识别按键时,单片机查找AT24C02并判断此遥控器ID是否已存在。

当ID不存在时,系统进入遥控器学习模式,保存新ID及其键码;当遥控器ID已存在时,系统进入密码输入界面,并且接收到八位的密码以后就开始运行密码核对程序,当密码输入正确后,就可以进行开锁、上锁或修改密码的操作。

当密码输入错误的时候就会进入密码输入提醒程序提醒用户重新输入密码,密码输入累积到3次时系统会报警并锁定。

 

 

图9主程序流程图

5.2.2接收解码程序

红外接收解码的关键是如何识别‘0’和‘1’码,我的做法是根据‘0’和‘1’码的高电平宽度不一样的特点来进行识别。

接收程序的流程图如图10所示。

进入红外接收程序后先关闭中断。

接着的工作是避开9ms高电平、4.5ms的低电平的引导码,并且判断是否干扰信号或者重复信号。

正如前面所说,一体化红外接收头的输出端电平跟遥控发射端电平相反。

如图14所示。

所以只要遥控有键按下单片机就会马上产生中断接收数据。

跟在引导码后面的是32位用户码和数据码,也就是我们想要的数据,单片机把它接收并保存。

当接收完8位的数据时要更换另外一个数据缓冲区,当32位的键码都接收完的时候就意味这一帧的数据已经接收完毕。

然后根据接收到的数据码和数据反码是否对应位相反来确定接收的这一帧数据是否正确,最后退出接收解码程序。

 

图10接收头前导码信号变相图

而单片机的接收端的‘0’‘1’波形图如图15所示。

在保存‘0’码和‘1’码的时候还有一个保存时机的问题,如果从0.56ms低电平过后开始延时,0.56ms以后若读到为低电平,说明该位为‘0’,反之则为‘1’。

为安全起见,延时必须比0.56ms长一些,但又不能超过1.12ms,否则如果该位为‘0’读到的已是下一位的高电平,因此取(1.12ms+0.56ms)/2=0.84ms较为可靠,一般取0.84ms左右均可。

图11单片机接收端的‘0’‘1’波形图

接收解码中断程序:

voidIR_IN()interrupt0using0

{

unsignedcharj,k,N=0;

EX0=0;

delay(15);

if(IRIN==1)

{EX0=1;

return;

}//确认IR信号出现

while(!

IRIN)//等IR变为高电平,跳过9ms的前导低电平信号。

{delay

(1);}

for(j=0;j<4;j++)//收集四组数据

{

for(k=0;k<8;k++)//每组数据有8位

{

while(IRIN)//等IR变为低电平,跳过4.5ms的前导高电平信号。

{delay

(1);}

while(!

IRIN)//等IR变为高电平

{delay

(1);}

while(IRIN)//计算IR高电平时长

{

delay

(1);

N++;

if(N>=30)

{EX0=1;

return;}//0.14ms计数过长自动离开。

}//高电平计数完毕

IRCOM[j]=IRCOM[j]>>1;//数据最高位补“0”

if(N>=8){IRCOM[j]=IRCOM[j]|0x80;}//数据最高位补“1”

N=0;

}//endfork

}//endforj

if(IRCOM[2]!

=~IRCOM[3])

{EX0=1;

return;}

IRCOM[5]=IRCOM[2]&0x0F;//取键码的低四位

IRCOM[6]=IRCOM[2]>>4;//右移4次,高四位变为低四位

if(IRCOM[5]>9)

{IRCOM[5]=IRCOM[5]+0x37;}

else

IRCOM[5]=IRCOM[5]+0x30;

if(IRCOM[6]>9)

{IRCOM[6]=IRCOM[6]+0x37;}

else

IRCOM[6]=IRCOM[6]+0x30;

LED3=0;

beep();

LED3=1;

ir_data=IRCOM[2];

ir_flag=1;//信号接收成功标志位

EX0=1;

}

5.2.3密码判断、报警及修改程序

电子密码锁的软件编程主要分为两方面,分别是接收密码后判断及报警部分和密码修改控制部分。

首先介绍密码判断及报警程序。

显示收到的键码并保存到接收缓存receive_code[8],直到8位键码接收完毕。

然后和原密码缓存origin_code[8]比较,判断密码是否正确。

若密码正确则将标志位code_right=1;若不正确则报警并使密码输入错误次数wrong_num++,再判断错误次数是否已达3次,若是则程序进入死循环锁定。

序流程图所示。

 

图12密码判断、报警大致程序流程

接着介绍密码修改控制程序。

当密码输入正确以后用户按下“密码修改键”就会进入密码修改操作,单片机也就会运行密码修改程序。

 

图13密码修改流程图

进入密码修改程序首先等待新密码的第一次输入。

第一次输入的新密码放在接收缓存receive_code[8]中,当输入完第八个密码后系统会提示再次输入密码,第二次输入的新密码放在密码比较缓存com_code[8]中。

第二次输入密码完成后就检验两次输入的新密码是否相同,如果相同的话就更换密码,将新密码储存到芯片的eeprom中。

Eeprom存储子程序:

/*================打开ISP,IAP功能=================*/

voidISP_IAP_enable(void)

{

EA=0;/*关中断*/

ISP_CONTR=ISP_CONTR&0x18;/*0001,1000*/

ISP_CONTR=ISP_CONTR|WaitTime;/*写入硬件延时*/

ISP_CONTR=ISP_CONTR|0x80;/*ISPEN=1*/

}

/*===============关闭ISP,IAP功能==================*/

voidISP_IAP_disable(void)

{

ISP_CONTR=ISP_CONTR&0x7f;/*ISPEN=0*/

ISP_TRIG=0x00;

EA=1;/*开中断*/

}

/*================公用的触发代码====================*/

voidISPgoon(void)

{

ISP_IAP_enable();/*打开ISP,IAP功能*/

ISP_TRIG=0x46;/*触发ISP_IAP命令字节1*/

ISP_TRIG=0xb9;/*触发ISP_IAP命令字节2*/

_nop_();

}

/*====================字节读========================*/

unsignedcharbyte_read(unsignedintbyte_addr)

{

ISP_ADDRH=(unsignedchar)(byte_addr>>8);/*地址赋值*/

ISP_ADDRL=(unsignedchar)(byte_addr&0x00ff);

ISP_CMD=ISP_CMD&0xf8;/*清除低3位*/

ISP_CMD=ISP_CMD|RdCommand;/*写入读命令*/

ISPgoon();/*触发执行*/

ISP_IAP_disable();/*关闭ISP,IAP功能*/

return(ISP_DATA);/*返回读到的数据*/

}

/*==================扇区擦除========================*/

voidSectorErase(unsignedintsector_addr)

{

unsignedintiSectorAddr;

iSectorAddr=(sector_addr&0xfe00);/*取扇区地址*/

ISP_ADDRH=(unsignedchar)(iSectorAddr>>8);

ISP_ADDRL=0x00;

ISP_CMD=ISP_CMD&0xf8;/*清空低3位*/

ISP_CMD=ISP_CMD|EraseCommand;/*擦除命令3*/

ISPgoon();/*触发执行*/

ISP_IAP_disable();/*关闭ISP,IAP功能*/

}

/*====================字节写========================*/

voidbyte_write(unsignedintbyte_addr,unsignedcharoriginal_data)

{

ISP_ADDRH=(unsignedchar)(byte_addr>>8);/*取地址*/

ISP_ADDRL=(unsignedchar)(byte

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

当前位置:首页 > 求职职场 > 简历

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

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