毕业论文-基于单片机的红外线电子锁探头设计与实现_第1页
毕业论文-基于单片机的红外线电子锁探头设计与实现_第2页
毕业论文-基于单片机的红外线电子锁探头设计与实现_第3页
毕业论文-基于单片机的红外线电子锁探头设计与实现_第4页
毕业论文-基于单片机的红外线电子锁探头设计与实现_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大连东软信息学院本科毕业设计(论文)论文题目论文题目:基于单片机的红外线电子锁探头设计与实现系所:电子工程系专业:电子信息工程(微电子制造方向)学生姓名:学生学号:指导教师:导师职称:副教授完成日期:2014年4月28日大连东软信息学院DalianNeusoftUniversityofInformation

毕业设计(论文)题目:基于单片机的红外线电子锁探头设计与实现设计(论文)的基本内容:本文所设计的红外遥控密码锁是以红外线作为载波,将数码指令信号调制到载波上,然后通过红外发射二极管发射出去;接收端接收到调制信号后将经过限幅、滤波、解调等过程还原出原数码指令信号。该信号通过控制电路可以控制密码锁闭合和开启。本设计充分利用了红外线解码技术,通过红外遥控器向红外接收装置发射密码。接收装置将接收到的密码发送到单片机,由单片机进行解码。解析出遥控器接收的密码,与存储在存储器的里面的密码进行比对,如果一致开锁成功。成功后可以通过LED的闪烁来代表开锁成功。如果密码不一致则开锁失败,进行下一次的开锁。通过LED灯常亮代表开锁失败。在单片机接受到密码时,所显示到LCD的密码是“*”号形式进行显示,起到保密的作用。在开锁成功后,可以对密码进行修改,两次设置密码一致密码修改成功。每次红外遥控器按键按下,如果单片机解码成功,会通过蜂鸣器发出响声,提示解码成功。毕业设计(论文)专题部分:题目:基于单片机的红外线电子锁探头设计与实现设计或论文专题的基本内容:学生接受毕业设计(论文)题目日期第1周指导教师签字:年月日大连东软信息学院毕业设计(论文)摘要V基于单片机的红外线电子锁探头设计与实现摘要本设计是以单片机为控制核心的红外线电子锁探头,它具有安全可靠、成本低廉、连接方便、简单易用、结构紧凑等特点。本课题实现的电子锁探头就是一种通过红外线来控制电路或者芯片工作,从而控制机械开关的闭合、完成开锁、闭锁等任务。本设计充分利用了红外线解码技术,通过红外遥控器向红外接收装置发射密码。接收装置将接收到的密码发送到单片机,由单片机进行解码。解析出红外接收装置接收的密码,与存储在存储器的里面的密码进行比对,如果一致开锁成功。成功后可以通过LED的闪烁来代表开锁成功。如果密码不一致则开锁失败,进行下一次的开锁。通过LED灯常亮代表开锁失败。在单片机接受到密码时,所显示到LCD的密码是“*”号形式进行显示,起到保密的作用。在开锁成功后,可以对密码进行修改,两次设置密码一致密码修改成功。每次红外遥控器按键按下,如果单片机解码成功,会通过蜂鸣器发出响声,提示解码成功。本设计主要是以STC12C5A60S2单片机为核心,硬件设计电路主要由LCD1602显示电路、红外接收电路、电磁继电器控制电路、声光报警等电路组成,并包括遥控发射和主机接收两大硬件组成部分。关键词:红外线解码,电子锁头,单片机大连东软信息学院毕业设计(论文)AbstractDesignandImplementationofElectronicLockwithInfraredProbeBasedonSingleChipMicrocomputerAbstractWiththedevelopmentofthescienceandtechnology,peopleinsuranceforthesafetydevicesdemandinghavebecomeincreasinglyineverydaylife.Inordertomeettheuser'srequirements,toimprovethereliabilityandsecurityofthelocks,infraredremotepasswordlocksystemcameintobeing.Thedesignisbasedonmicrocontrollercoreinfraredelectroniclockprobe,itissafety,reliable,lowcost,easytoconnect,easytouse,andcompactstructure.Thetopicoftheelectroniclockisaprobetothecontrolcircuitorchipworkviainfraredtocontrolthemechanicalswitch,completedlock,latchandothertasks.Thedesignwastakenadvantageofinfrareddecodingtechnologytotransmitinfraredreceiverdevicepasswordviaaninfraredremotecontrol.Parsingthereceivedremotecontrolcode,tocomparethestoredpasswordinsidethememory,ifconsistentwillsuccess.AfterthesuccesscanberepresentedbytheLEDflashingunlockingsuccess.Ifthepasswordsdonotmatchthelockfailstounlockandthenexttimeunlock.LEDlightslitbyrepresentativesoftheunlockfailed.Whenthemicrocontrollerreceivesapassword,thepasswordisdisplayedontheLCD"*"intheformofdisplay,playtheroleofsecrecy.Afterunlockingsuccessfully,youcanmodifythepassword,thepasswordtwicetosetapasswordtomodifyaconsistentsuccess.Everytimeaninfraredremotecontrolbuttonispressed,ifthemicrocontrollerdecodingissuccessful,willbeissuedthroughthebuzzersound,indicatingasuccessfuldecode.ThisdesignmainlySTC12C5A60S2microcontrollercore,hardwaredesigncircuitmainlybyLCD1602displaycircuit,infraredreceivercircuit,electromagneticrelaycontrolcircuit,soundandlightalarmcircuit,andhastwohardwarecomponents,includingremotecontroltransmitterandreceiverportionshost.Keywords:IRdecoding,Electroniclock,SCM,Remotecontrollaunch大连东软信息学院毕业设计(论文)目录目录TOC\o"1-3"\uAbstract II第1章绪论 11.1研究现状 11.2研究目的及意义 11.3课题预期成果 2第2章关键技术介绍 32.1红外通信原理 32.2解码原理 3第3章系统硬件设计 53.1系统结构 53.2对主CPU的选择 53.3所用单片机介绍 63.4硬件电路的设计 73.4.1单片机最小系统电路 73.4.2单片机显示电路 83.4.3实时时钟电路的设计 83.4.4蜂鸣器报警电路 93.4.5红外接收电路设计 93.5硬件电路的设计 10第4章系统设计 114.1系统开发环境 114.2软件流程图 114.3系统的功能结构设计 124.3.1红外解码程序设计 124.3.2LCD1602主要驱动程序 14第5章系统测试 165.1初始状态测试 165.2初始密码测试 165.3输入新密码测试 17第6章结论 19参考文献 20致谢 21大连东软信息学院毕业设计(论文)-第1章绪论随着科学技术的不断发展,人们对日常生活中的安全保险器件的要求越来越高。为了满足用户的要求与需要,提高锁具的可靠性和安全性,红外遥控密码锁系统应运而生,本课题实现的电子锁探头就是一种通过红外线来控制电路或者芯片工作,从而控制机械开关的闭合、完成开锁、闭锁等任务。1.1研究现状密码锁经历了几个阶段,如机械密码锁、数字密码锁、红外密码锁等。随着科学技术得发展,以单片机为核心的新型密码锁不断出现。单片机正朝着高性能和多品种方向发展,逐步实现低功耗、体积小、容量小、性能高、外围电路内装化。单片机从根本上改变了传统的控制系统方法。电子技术的飞速发展,给古老的锁具带来了巨大变化。目前,全世界锁具已超过1.3万种,随着新材料、新工艺和新技术的应用,特别是电子技术、传感技术、红外技术等快速发展,使锁具发展日趋活跃,针对传统的机械锁的各种缺点,出于安全、方便等考虑,新型锁具例如语音锁、指纹锁、电脑感应锁、红外线电子锁等高档锁具相继问世。目前国内外密码锁系统的主要发展方向是接触式密码锁系统和非接触式密码锁系统,但也存在着很多缺点。相比来看,红外遥控电子密码锁系统的成本较低,并且还可以近距离遥控,使用方便,具有一定的发展前景。红外遥控是单工的红外通信方式,是以红外技术实现两点间的近距离保密通信和信息的转发。它通常以两个红外发射和接收系统构成。放射体系对一个红外辐射源进行调配后放射红外信号,而接收体系用光学设备和红外线探测器进行接收,如此就形成了红外通信系统。红外通讯一般采用光波波长范围为850~900nm的红外线[1]。1.2研究目的及意义在日常的生活和工作中,住所与部门的防范与安全、重要文件与档案的保存、财务上的报表和个人资料的保管多以上锁的方式来解决。如果用传统的机械式锁,通常要携携带许多钥匙,使用不方便,容易弄混,并且加入钥匙丢,安全性就会下降很多,所以密码锁应运而生,电子密码锁再一些方面逐渐取代传统机械锁也已成为必然趋势。特别是单片机的问世,出现了带微处理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统等功能,从而使密码锁具有很高的安全性、可靠性、应用日益广泛。本片论文设计的红外遥控密码锁以过红外线作载波,使得数码指令信号调配至载波上,通过红外发射二极管放射出去;接收端收到调配信号将用限幅、滤波、解调等过程解码出原数码指令信号。此信号通过控制电路可以控制密码锁闭合和开启。红外通信具有保密性强,信息容量大,结构简单等特点,既可以在室内使用,也可以在野外使用,由于它具有良好的方向性,日常家用电器很多用红外进行遥控开关。电子锁的产生也是经历了一些阶段的,随着科学技术的发展,一些以芯片特别是单片机为处理核心的新型密码锁开始不断出现[2]。本设计是基于单片机为控制核心的红外线电子锁探头,它具有安全可靠、成本低廉、连接方便、简单易用、结构紧凑等特点。红外线遥控是目前使用最广泛的一种通信和遥控手段,采用红外线作为传输媒介进行数据通信是一种既方便又经济实用的选择,在小型移动设备中得到了广泛的应用。1.3课题预期成果本设计充分利用了红外线解码技术,通过红外遥控器向红外接收装置发射密码。接收装置将接收到的密码发送到单片机,由单片机进行解码。解析出遥控器接收的密码,与存储在存储器的里面的密码进行比对,如果一致开锁成功。成功后可以通过LED的闪烁来代表开锁成功。如果密码不一致则开锁失败,进行下一次的开锁。通过LED灯常亮代表开锁失败。在单片机接受到密码时,所显示到LCD的密码是“*”号形式进行显示,起到保密的作用。在开锁成功后,可以对密码进行修改,两次设置密码一致密码修改成功。每次红外遥控器按键按下,如果单片机解码成功,会通过蜂鸣器发出响声,提示解码成功。本设计主要是以STC12C5A60S2单片机为核心,硬件设计电路主要由LCD1602显示电路、红外接收电路、电磁继电器控制电路、声光报警等电路组成,并具有两大硬件组成部分,包括遥控发射和主机接收部分。大连东软信息学院毕业设计(论文)第2章关键技术介绍2.1红外通信原理当下,大家所了解的通信都指的是狭义上的通信,即信息的传递,从一个地方到另一个的信息传输和交换信息。事实上,在科技高速发展的当下,通信早已不是局限于单一的信息传递[3]。在此,我们应用一种基于无线通信的红外通信技术。红外遥控是单向的红外通信方式,通过红外技术达到点与点间的近距离秘密通信和转发信息,由红外发射系统与接收系统两大模块构成。发射系统对红外放射源进行调配之后放射红外线信号,接收系统是通过光学装置与红外探测器实现接收的目的,就组成了红外通讯系统。红外线是波长在750nm到1mm之间的电磁波,他的频率大于微波却小于可见光,是一种通过肉眼看不见的光线。红外通讯大多是采取红外波段内的近红外线,波长在0.75um到25um之间,但是因为要保证各个厂商之间的红外线产品都能有最好的通讯效果,红外线数据通讯所采取的光波波长范围一般限定在850nm到900nm之间[4]。红外通讯的基本原理是发送端将二进制信号调配为一系列的脉冲串信号(载波信号),再通过红外发射管发射红外信号。常规的方法有通过脉冲宽度来达到使信号调制的脉宽调制(PWM)的目的,还有通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)这两种方法[5]。目前在世界范围内,红外通信技术是被广泛使用的一种无线通信技术,通过红外光脉冲和数据电脉冲间的转换来实现无线数据的收发。许多硬件软件的平台都支持并运用这项技术,尤其是嵌入式系统。2.2解码原理通用的红外遥控系统是由发射系统和接收系统两个模块构成,应用专用的芯片来进行编/解码从而控制操作,具体解码原理:使用脉宽调制串行码,脉宽度为0.565ms、间隔为0.56ms、周期1.125ms得构成体现二进制的“0”;用脉宽度为0.565ms、间隔1.685ms、周期为2.25ms的构成体现二进制的“1”,“0”和“1”的波形如图2.1所示[6]。图2.1“0”和“1”波形图上面“0”和“1”构成的32位二进制码经38kHz载频调制2次,来提升发射效率,产生降低电源功耗的结果,再利用红外发射二极管产生红外线向空间发射,如图2.2所示。图2.2接收信号波形图UPD6121G制造的遥控编码是一个连续的32位二进制码组,前16位是用户识别码,可以区分各种电器设备,避免各个机种遥控码相互干扰。厂商把用户识别码设置为十六进制的一组数码;后16位是8位操作码(功能码)及反码。UPD6121G至多可以有128种不同排列的编码[7]。当遥控器按下遥控键按后,周期性的放出同一种32位的二进制码,周期大约是108ms。一组码自身的持续时间根据他包括的二进制“0”和“1”的数量不同而不一样,大概在45ms至63ms。一个键按下超过36ms时,振荡器使芯片被激活,会发射一组大约为108ms的编码脉冲,这个108ms发射代码是由一个起始码(9ms)和一个结果码(4.5ms),低8位地址码(9ms~18ms)和高8位地址码(9ms~18ms),8位数据码(9ms~18ms)和这8位数据的反码(9ms~18ms)组成。假如按键按下超过108ms后仍然没松开,再以后发射的代码(连发代码)会只通过起始码(9ms),结束码(2.5ms)构成[8]。第3章系统硬件设计3.1系统结构红外遥控电子密码锁,主要通过由兼容NEC的Upd6121G的芯片对其进行编码,然后解码后发送出的红外线信号会发送到接收模块。接收模块将接收到的信息发送到单片机,由单片机进行解码。解析出遥控器所发送的密码,解析出的密码通过处理以“*”的模式通过LCD1602显示,同时将解析出的密码与存储器里面的密码进行比较。如果一致,LED灯就会闪烁,如果不一致LED灯常亮。开锁成功后可以对密码进行重新设定,存储到存储器中。当单片机对每一次遥控器按键解码成功后,都会通过蜂鸣器发出响声,提示解码成功。系统结构框图如图3.1所示。图3.1系统结构框图3.2对主CPU的选择对于红外数据需要有CPU对其进行分析和处理,进行解码,所以选择合适的CPU来处理数据是对于一个好的作品是非常重要的。主流单片机是意法半导体公司生产的STM32系列单片机,是目前比较流行的一款单片机,该款单片机是基于ARMCortex-M3内核的单片机,他是一款32位单片机,具有强大的数据处理能力。但是由于是基于ARM内核的单片机,他的程序资源比较复杂,不适合像我们这样刚入门的新手[9]。MSP430也是目前一款非常流行的单片机,他是由德州仪器公司生成的一款超低功耗的单片机。他是一款16位的单片机,也有较强的数据处理能力。它的功耗低到可以用水果电池让它工作。而且它有丰富的外设,精简指令集,便于开发。但是由于其单个价钱稍贵。而且引脚较多,较密,对于像我们这样对硬件还不太熟练的新手在硬件设计和前期实验上困难较大。而且MSP430不能在PROTUES环境中仿真。因此作为本次项目的开发也不是一款合适的单片机。一直都非常受大家喜欢的51系列单片机,自70年代诞生以来就有很多公司来研发、生成各种型号的51单片机。Intel公司最早生成MSC-51系列单片机的厂商之一,随后又有许多公司,许多工程师来研发,使用该款单片机[10]。无论是在技术的成熟度还是在芯片的功能方面都高于同类产品。虽然在今天已经有很多其他型号的单片机,但是51单片机仍然占有重要的地位。更是较早引进国内的8位单片机,51单片机的技术在国内已经非常成熟,许多初学者都是先学51单片机再学其他的单片机的。大多数大学更是以51单片机为基础来教学。因此在本设计中采用处理数据的单片机是MSC-51系列的单片机。不但价格便宜,技术成熟,而且也非常容易在PROTUES中进行仿真,非常适合我们这样刚刚入门的初学者。MSC-51系列单片机有很多公司都在生产,比较著名的是ATMEL公司生成的AT89C51系列单片机和国内生产的STC12C5A60S2系列单片机。AT89C51系列单片机的稳定性非常高,有较高的性价比。但是它下载程序的方式ISP下载方式,就是每次调试,下载程序都需要特殊的编程序才能给实物下载程序,因此比较麻烦。而STC12C5A60S2系列单片机下载程序是只需要串口下载就可以了,就是只有一根串口线我们就可以对单片机进程程序的下载,调试。不但如此,STC12C5A60S2系列单片机在价格上也占有一定的优势,比AT89C51单片机每片要便宜2-5元钱。在资源上也远远多于AT89C51单片机,无论是在中断、时钟还是在内存方面都要优越于AT89C51单片机。因此本设计是以STC12系列单片机为基础而设计的。具体的单片机型号是STC12C5A60S2单片机[11]。 3.3所用单片机介绍STC12C5A60S2单片机是由宏晶科技研制的新一代增强型单片机,具有超强的抗干扰/高速/低功耗等能力,指令代码完全兼容8051单片机,具有12时钟/机器周期和16时钟/机器周期两种模式。造价低廉。STC12C5A60S2单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时/计数器、UART串口、串口2、I/O接口、高速A/D转换、SPI接口、PCA、看门狗及片内R/C振荡器和外部晶体振荡电路等模块。STC12C5A60S2系列单片机几乎包含了数据采集和控制中所需的所有单元模块,可称得上一个片上系统。它有5V和3V两种电压的工作模式,工作范围比其他的单片机要大0~40MHZ,实际的工作频率可达到48MHZ,有4K的ROM最大可达到62K,RAM扩展到512字节和1280字节。具有ISP(系统可编程)和IAP(在应用可编程)两种模式,可以通过串口直接下载用户程序简单,方便[12]。具有EEFROM和看门狗定时器功能。3个16位定时器,2个8位定时器,4路外部中断可用下降沿触发和低电平触发外部中断。3.4硬件电路的设计系统硬件电路有两个模块电路组成,包括主板模块和控制模块。主板模块是本设计的主题部分,主要包括的电路有STC12C5A60S2的最小系统电路,LCD1602的显示电路,接收电路和蜂鸣器报警电路。而控制模块主要包括STC12C5A60S2的最小系统电路,LCD1602显示电路,解码电路,继电器相关电路等组成。3.4.1单片机最小系统电路单片机最小系统包括一个复位电路和一个时钟电路。复位电路又分为上电复位电路和开关复位电路。我使用的复位是上电复位电路,如图3.2所示。图3.2STC单片机最小系统时钟电路又分为内时钟和外时钟两种模式,本设计采用外部时钟,因为内部时钟的频率比较低,当在XTAL1和XTAL2之间加上一个晶振,单片机内部振荡器便能产生自激震荡,产生时钟信号,在晶振的两侧加上20~60pF的瓷片电容起到了微调时钟频率的作用,让频率更加稳定。STC12C5A60S2系列单片机的程序存储器和数据存储器是各自独立编址的。STC12C5A60S2系列单片机的所有程序存储器都是片上Flash存储器,不能访问外部程序存储器,因为没有外部访问使能信号-EA和程序存储启用信号-PSEN。STC12C5A60S2系列单片机内部有1280字节的数据存储器,其在物理和逻辑上都分为两个地址空间:内部RAM(256字节)和内部扩展RAM(1024字节)。另外,STC12C5A60S2系列单片机还可以访问在片外扩展的64KB外部数据存储器[13]。单片机的置位和复位,其目的都是为了把电路初始化到一个确定状态。单片机实现电复位的原理是在其复位的引脚RST上外接电容和电阻。复位时在单片机内部单片机是将存储设备和一些寄存器装入生产厂商预设的一个值。一般来说,单片机复位电路的作用是把一个状态机初始化到一个空的状态。当复位电平持续两个机器周期以上时复位有效单片机,本文采用的是上电复位即上电后电容被放电、RST也被拉到高电平,而且由于电容的充电,会保持一段时间的高电平来使单片机复位。3.4.2单片机显示电路LCD1602的显示电路如图3.3所示。图3.3LCD1602电路原理图图中1脚和2脚表示电源,3脚接一个10千欧的电位器调节液晶的对比度,4脚是向液晶控制器写数据/写命令选择端,5脚液晶读写选择端,6端是液晶的使能信号端,4,5,6分别接到单片机的P12,P11,P10接口。7~14引脚是液晶的数据总线用了传输数据/命令,接到单片机的P0口,在他们之间加上10K的上拉电阻使传输的数据更加稳定。15,16引脚是液晶的背光电源[14]。3.4.3实时时钟电路的设计DS1302一种高性能、低功耗、具备RAM得实时时钟电路,他能对年、月、日、时、分、秒进行精准计算,且有闰年补偿的功能,工作需要的电压是2.5V至5.5V。采用三线接口与CPU进行同步通信,并可采取突发形式一次性传输数个字节的时钟信号或者是RAM数据。DS1302中有一个31×8的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力[15]。本设计设计实时时钟电路如下图3.4所示[。图3.4实时时钟电路该实时时钟电路可以用于实现实时时间的显示功能。3.4.4蜂鸣器报警电路蜂鸣器的连接电路如图3.5所示,蜂鸣器的一端接地,另一端接电源。由于单片机的引脚提供的高电平不能提供蜂鸣器足够的电压,所以需要一个三极管来驱动蜂鸣器,通过单片机控制三极管的开关来控制蜂鸣器发音。图3.5蜂鸣器电路3.4.5红外接收电路设计接收电路选用了LM1838接收红外信号,其载波频率为38KHZ,由于发射端的晶振频率一般为455KHZ,经过整数分频12分频,455KHZ/12=37.9KHZ=38KHZ。通过该接收头将红外信号放大传给单片机。1脚是信号端接到单片机的外部中断(P33脚),这样用信号来就可以触发单片机的中断,让单片机执行中断程序,进行解码。2脚,3脚分别是GND和VCC,在GND端接个电容起到了整流滤波的作用,让电压更加稳定[16]。电路如图3.6所示。图3.6接收电路3.5硬件电路的设计通过软件AltiumDesignerRelease10进行PCB图设计,版图由单片机最小系统电路,液晶显示电路,继电器控制模块,接受模块,蜂鸣器以及控制模块组成。如图3.7所示。图3.7PCB图随后为保证PCB板的稳定性,对PCB图进行覆铜处理,将处理好的文件发送给制造商开板。第4章系统设计4.1系统开发环境操作系统:Window7;软件开发工具:KeiluVision4;画图工具:AltiumDesignerRelease10;硬件控制器:STC12C5A60S2。4.2软件流程图开始开始数据初始化按键按下?液晶显示顺序输入6位密码输入密码与原来密码一致?解锁成功,LED灯闪设置新密码输入6位新密码第一次密码输入完?再次输入密码确认两次密码一致?解码NY按键值15按键值45Y解锁失败,LED灯常亮N结束NY图4.1软件控制流程图软件控制流程图如图4.1所示。系统上电后,软件会对系统进行初始化,包括对各种变量初始化,LCD1602液晶显示初始,外部中断INT1和定时器的设置初始化,有了这些初始化才能保证系统数据的可靠性和正确性[17]。屏幕上第一行会显示“inputpassword!”字样。然后等待遥控器的按键按下,如果遥控器有按键按下,单片机采集红外线信号对其进行解码。解码后如果按键值是“15”则是可以进行解锁,顺次输入六位密码。输入密码时可以看见屏幕上的密码是以“*”号代替所输入的密码,起到保护作用。如果输入密码正确,则解锁成功。如果输入密码错误,LED灯会常亮。等待新的密码输入或退出系统。如果解码值是“45”,系统将进入设置密码的状态,要顺次输入两次密码。只有两次密码输入完全一致时才能正确的设置密码。如果两次不一致,需要重新输入两次密码,直到输入正确为止。4.3系统的功能结构设计系统主要包括的程序是红外线解码程序、LCD1602液晶显示的驱动程序以及按键设定程序。系统中关键的程序是红外解码程序和LCD1602底层驱动程序的设计。4.3.1红外解码程序设计本设计的关键技术是红外解码程序的设计与实现,用于采用的遥控器采用的是HX1838红外一体化接收头进行编码,该解码芯片兼容ENC传输数据模式。NEC传输的数据包括一组引导码和连续的32位二进制码组成,前16位是用户码,有8位是用户码,后8位是用户的反码。用户码的作用是可以区别不同的信号以前厂商的红外产品,避免发生干扰,这16位设由各自的厂商决定的。后16位二进制编码是操作码,及每个按键的具体码值,同样可以分为8位的操作码和8位的操作反码[18]。如图4.2所示。图4.2红外编码组成首先传入单片机的应该是一组引导码,它由一个9ms的高电平和一个4.5ms的低电平组成,接下来的32位二进制码可以分为4组8位的二进制数。本设计不必考虑不同厂家遥控设备,因此用户码可以不用。只要能区别不同的按键值,所用到操作码,操作码的前8位和后8位是相反的因此用其中任意一组二进制码都可以。而如何识别“0”和“1”是解码程序难点,本程序设计采用测量脉宽的时间长度来确定“0”和“1”,“0”为0.56ms,“1”为1.68ms。无论是“0”还是“1”都是从0.56ms以后的高电平开始计算的,如果一个0.56ms以后接下来再经过一个0.56ms的时间检测是低电平则为“0”,反之则为“1”第二个0.56ms的时间可以稍微长些[19]。voidinfrared()interrupt2 //外部中断,接收一个数据位{ uint8i,j;unsignedinttemp;EX1=0; //关闭外部中断1,不再接收二次红外信号的中断,只解码当前红外信号//检测引导码的9ms低电平temp=GetLowTime();if(temp<c(8500)||temp>c(9500)){ gotoexit;}//检测引导码的4.5ms高电平temp=GetHighTime(); if(temp<c(4000)||temp>c(5000)){ gotoexit;}//检测后续4字节数据for(i=0;i<4;i++){for(j=0;j<8;j++){ temp=temp>>1; //temp中各个数据位右移一位,因为先读出来的是高字节temp=GetLowTime();if(temp<c(200)||temp>c(800)){gotoexit; //低电平不在合理的范围内,认为出错,停止解码}//由高电平时间判断该bit的值temp=GetHighTime();if(temp>c(2000)&&temp<c(200)){//如果高电平时间在560us左右,则该位为0gotoexit;} Ir_Buf[i]>>=1; if(temp>c(1120)) Ir_Buf[i]|=0x80;}}//保存第3字节的键码值 //红外108ms发射代码由一个起始码9ms,一个结果码4.5ms,低八位地址码9-18ms,高八位地址码,8位数据位,8位数据位的反码SendData(Ir_Buf[2]);exit:IE1=0; //外部中断标志位清零EX1=1;}这是外部中断的识别引导码的程序,该程序采用计数器来计算脉宽,然后再根据脉宽来判断高低电平,从而判断引导码是否正确。当引导码识别成功后,采用该段程序来讲引导码后面的32位二进制数来分成4组8位的二进制数,他们将分别装着用户码,用户反码,操作码和操作反码,本设计只使用操作码。4.3.2LCD1602主要驱动程序LCD1602液晶显示的驱动程序是比较基础和底层的驱动程序。主要包括读数据,指令和写数据,指令程序,可以概括为读程序和写程序。本设计中并没有用到它的读程序,下面重点介绍LCD1602的写程序。通过图4.3LCD1602的写时序我们可以看出,对1602进行写内容时主要分为四部分,RS、R/W、E、DB0-DB7。RS是1602寄存器控制端,它决定对1602进行写数据还是写命令,RS=0是写入命令,RS=1写入数据。R/W是1602的读写控制器,它决定的是对1602进行读操作还是写操作,R/W=0对其进行写操作。E是1602的使能控制位,对1602写数据时需要E的一个高脉冲。DB0-DB7是1602的总线,负责传输数据和命令[20]。图4.3LCD1602的写时序如果对1602进行写命令,需要将RS设置为低电平,R/W设置为低电平,这时如果让E由低电平跳变到高电平,单片机中的命令写入到1602当中。下面是写入命令的程序。voidwrite_cmd(ucharcmd){ wait(); lcdE=0; lcdRS=0; lcdWR=0; Wait30us; P0=cmd; Wait30us; lcdE=1; Wait30us; lcdE=0;}下面是写入数据的程序。voidwrite_dat(uchardat){ wait(); lcdE=0; //根据1602液晶显示器协议编写 P0=dat; lcdRS=1; lcdWR=0; Wait30us; lcdE=1; lcdE=0;}大连东软信息学院毕业设计(论文)第5章系统测试设计完成后,保证作品功能实现,对作品进行整体测试,测试包括软件代码功能测试和硬件功能实现测试。软件代码测试主要测试代码是否能准确完成相应的功能,而硬件测试则在软件代码功能实现的基础上对其性能进行测试。5.1初始状态测试方案:将代码写入系统,上电,观察显示屏显示的信息。按照设计,系统上电后第一行应该显示“InputPassword:”字样,如图5.1,等待密码输入。图5.1第一屏显示的信息5.2初始密码测试方案:系统的初始密码锁是“123456”,用遥控器输入密码。此时输入密码“123456”,输入密码时可以看见输入的密码是用“*”号显示的,起到保密的作用。如图5.2所示。图5.2输入初始密码如果输入的密码正确,屏幕的第二行会显示“Right!”字样,另外蜂鸣器响三声,代表解锁成功。如图5.3所示。图5.3密码输入正确如果密码输入错误,LCD1062显示“Error!”字样。如图5.4所示。图5.4密码输入错误综上所测试的,在系统输入密码后,密码正确和错误都有不同的显示和现象来区别。测试达到预期的结果,因此系统的输入密码功能可以正常运行。5.3输入新密码测试方案:进入系统后,如果想修改密码,要按遥控器上门的右箭头按键,测试LCD显示“newpassword:”字样,代表输入新密码,如图5.5所示。图5.5第一次输入新密码输入6为密码以后,显示器自动显示“Again:”字样,表示要输入第二次密码来确认密码,如图5.6所示。图5.6第二次输入密码如果密码输入正确,系统会提示设置成功字样,再次进入则需输入新密码,如图5.7所示。5.7重复密码成功状态如果输入的密码两次不一致,屏幕上会显示“NotSucceed!”字样,需要重新输入新密码来修改密码。通过以上不同阶段的测试,初始状态、进入系统测试、设置新密码等功能的测试,所有功能都达到预期的设想。大连东软信息学院毕业设计(论文)第6章结论自从开始选题到至今已经有近三个月的时间,在这三个多月的时间里,经过无数次的查资料,摸索,实验。使我不仅仅学会了单片机软硬件设计和红外线解码结束,而且更主要的是学会了如何去开发设计一个项目,如何去发现设计中的问题和缺陷并如何去解决。我想后面是我在这次毕业设计中收获最大的,对我今后走向研发设计岗位有着非常大的帮助。首先,在选题阶段,老师给我们确定了一个大的方向,可以说这个课题如今是一个非常热门的话题,无论是在国内还是在国外都有很多研发人员在研究该课题,因此我对这个课题非常感兴趣,我在网上查了很多相关的信息。这些信息都是平时理论课所设计不到的,所以选题阶段也使我丰富了课外知识量,初步了解了一下最新的发展方向。其次,在确定论题阶段,这个阶段主要是翻译相关的英文文档,写课题申报表和开题报告的基础性工作。通过这些更加详细了解所选课题的相关技术和设计思路,对设计有个整体的构思。这个阶段虽然基础,但是也是比较难的一个阶段,首先我们要了解和学习一门新的技术,还要通过这些英文文档来熟悉些芯片的相关资料,对于英语水平不高的我来说阅读一般的英文文章都比较吃力,就别说这些专业水平很高的英文文档了,因此在这上我花了比较多的时间来翻译和整理相关资料。通过这次设计我体会到如果英文水平不高很难学好嵌入式,因为很多的最新,最全的技术文档都是用英文来编写的,在以后的学习过程中加强英文学习也是非常重要的。最后,设计和调试阶段,这个阶段是最重要的阶段。设计包括硬件和软件的设计,根据前面所学的知识硬件电路图很快就设计完成,在设计程序时费比较多的时间,尤其是在红外线解码阶段的程序设计。首先就是解码,虽然有了前面的理论知识,但是实际操作起来却有很多问题,经过老师的帮助和自己的钻研,终于将困难一个接一个的解决了,增强了自己解决实际问题的能力。当然,由于是第一次这么完整的设计一件作品,无论是在硬件设计和软件调试方面都有很多的不足之处。但总的看来,本设计在技术上实现了对红外遥控器的成功解码,实现了对电子密码锁的红外控制,完成了设计要求。以后进一步扩展研究,可以做出万能遥控器,家里所有的设备只要通过手中的红外遥控器,就能简单方便的进行控制,实现智能家居的生活。参考文献[1].郭天祥.51单片机C语言教程[M],电子工业出版社,2009[2].张靖武,周灵彬.应用与PROTEUS仿真[M],电子工业出版社,2008[3].彭伟.单片机C语言程序设计实训100例[M],电子工业出版社,2009[4].徐玮.用增强型51实验板实现红外遥控[EB],,2006[5].朱华光.浅谈LCD1602的编程技巧[EB],,2010[6].徐德杰.AT24C02在单片机中的应用[EB],,2005[7].黄明强.DS1302在单片机系统中的应用[EB],,2004[8].王伟生,郑小真.红外遥控在节能和无线操作方面的应用[EB],,2010

[9].梁超,谢皓.红外遥控系统设计及应用[EB],,2010[10].徐煜明.C51单片机及应用系统设计[M],电子工业出版社,2009[11].李学海.标准80C51单片机基础教程[M],京航空航天大学出版社,2006[12].孔维功.C51单片机编程与应用[M],电子工业出版社,2011[13].MeehanJoanne.Benefitsandbarriers[J],TQMJournal,2008,(5):26-45[14].张晓乡.89C51单片机实用教程[M],电子工业出版社,2010[15].桑森.模拟集成电路设计精粹[M],清华大学出版社,2008[16].林红,周鑫霞.模拟电路基础[M],清华大学,2007[17].肖运虹,电视技术[M],西安电子科技大学出版社,2000[18].YeagerBrent,Howtotroubleshootyourelectronicscale[J],PowderandBulkEngineeringPowderandBulkEngineering,1995,7(6):87-2419].MeehanJoanne,MuirLindsey.SCMinMerseysideSMEs:Benefitsandbarriers[J],TQMJournal,2008,21(6):182-187[20].胡汉才.单片机原理及接口技术[M],清华大学出版社,1996,(9):24-12致谢历经三个月的工作学习,我的毕业设计已全部完成。这离不开平时的学习和训练,离不开老师的悉心教导。因此首先应该感谢我的指导老师,宋文斌老师,正是他的辛勤教导才换来我今天的成果。宋文斌老师在日常的学习生活中,以自身为榜样,带领我们不断学习不断进取。对我们学习和生活中的每一个问题都报以关心并作出指导,从选题至今,宋文斌老师对我的帮助是巨大的,无私的,不辞辛苦的。在此,谨向宋文斌老师表示崇高的敬意和衷心的感谢!无法用更多言语形容感激,惟愿师生情谊一生延续走的最快的总是时间,来不及感叹,大学生活已近尾声,四年多的努力与付出,随着本次论文的完成,将要划下完美的句号。当我写完这篇毕业论文时,感慨颇多。我还要感谢我的各位老师,同学在学习生活上给我提供的帮助和支持。他们鼓励我不断向前,我也从他们身上不断汲取知识和为人处世的道理。这是我人生中重要的一段篇章。本论文从选题到完成,每一步都是在导师的指导下完成的,倾注了导师大量的心血。在我的毕业设计期间,导师为我提供了种种专业知识上的指导和一些富于创造性的建议,老师一丝不苟的作风,严谨求实的态度使我深受感动,没有这样的帮助和关怀,我不会这么顺利的完成毕业设计。感谢微电子10002班的同学们,他们让我获得了情同手足的真挚友情,我们互相倾听、探讨未来的时光,这些都将成为我大学四年的美好回忆。在毕业设计的这段时间里,你们给了我很多的启发,提出了很多宝贵的意见,对于你们帮助和支持,在此我表示深深地感谢。附录#include"Common.h"#include"Infrared.h"#include"LCD1602.h"#include"UartCom.h"#include"EEPROM.h"#include"DS1302.h"bitbusy;uintTimer0Count;uintPasswordCounter;unsignedintbLogined; //0:尚未登陆;1:已经登陆验证U8I2CBuf[6]={0x0C,0x18,0x5E,0x08,0x1C,0x5A}; //初始密码123456U8NewPwd[6]={0x00};U8ReNewPwd[6]={0x00};U8strCode[10]={0x16,0x0C,0x18,0x5E,0x08,0x1C,0x5A,0x42,0x52,0x4A};voidSendData(BYTEdat);voidSendString(char*s);voidw_string(unsignedcharaddr_start,unsignedchar*p);unsignedchari,len=6;unsignedintnMode=0; //0:正常模式;1:设置密码;2:re设置密码voidmain(){ unsignedinti,nControlMode; //控制模式0:手动模式1:自动模式 unsignedintYear,Month,Day,Hour,Minute,Second; unsignedintAlarmHour,AlarmMinute,AlarmSecond; unsignedintStartHour,StartMinute,StartSecond; unsignedintStopHour,StopMinute,StopSecond; unsignedintnMode; //0:正常模式; //1602 Init_LCD1602(); uart_init(); //红外初始化 InfraredInit();// TR1=1; //Timer1startrun 启动定时器/计数器1/// ES=1; //EnableUARTinterrupt /// ET0=1; //此句不应该有,应该是不允许产生中断 EA=1; //Openmasterinterruptswitch P4SW=0x70; //令P4.4、P4.5、P4.6为IO口 nControlMode=0; //默认手动模式 PasswordCounter=0; bLogined=0; AlarmHour=12; AlarmMinute=0; AlarmSecond=0; StartHour=21; StartMinute=47; StartSecond=0; StopHour=21; StopMinute=48; StopSecond=0; Year=14; Month=4; Day=3; Hour=10; Minute=0; Second=0; //初始化系统时间 timedata[6]=Year; timedata[5]=20; timedata[4]=Month; timedata[3]=Day; timedata[2]=Hour; timedata[1]=Minute; timedata[0]=Second; sprintf(strDisplayLine1,"%s","InputPassword:"); w_string(0x80,strDisplayLine1); sprintf(strDisplayLine2,"%s",""); w_string(0xC0,strDisplayLine2); /*i2c_serwrite(I2CBuf,0,len);*/ for(i=0;i<len;i++) I2CBuf[i]=0x16; for(i=0;i<6;i++) { //IapProgramByte(IAP_ADDRESS+i,(unsignedchar)I2CBuf[i]); I2CBuf[i]=IapReadByte(IAP_ADDRESS+i); }/// SendString(I2CBuf); Set_RTC();//写入时钟值,如果使用备用电池时候,不需要没每次上电写入,此程序应该屏蔽 while(1) { /*Read_RTC();//秒分时日月周年 Year=(timedata[6]&15)+((timedata[6]>>4)*10); Month=(timedata[4]&15)+((timedata[4]>>4)*10); Day=(timedata[3]&15)+((timedata[3]>>4)*10); Hour=(timedata[2]&15)+((timedata[2]>>4)*10); Minute=(timedata[1]&15)+((timedata[1]>>4)*10); Second=(timedata[0]&15)+((timedata[0]>>4)*10); sprintf(strDisplayLine1,"Timeis:%02d:%02d:%02d",Year,Month,Day); sprintf(strDisplayLine2,"Timeis:%02d:%02d:%02d",Hour,Minute,Second); w_string(0x80,strDisplayLine1); w_string(0xC0,strDisplayLine2); */ }}/*定时器0中断*//*voidTIM0_ISR()interrupt1{ TR0=0; BEEP=!BEEP; TH0=Timer0_H; TL0=Timer0_L; TR0=1;}*///外部中断1voidinfrared()interrupt2 //外部中断2,接收一个数据位{ uint8i,j;unsignedinttemp;EX1=0; //关闭外部中断1,不再接收二次红外信号的中断,只解码当前红外信号//检测引导码的9ms低电平temp=GetLowTime();if(temp<c(8500)||temp>c(9500)){ gotoexit;}//检测引导码的4.5ms高电平temp=GetHighTime(); if(temp<c(4000)||temp>c(5000)){ gotoexit;}//检测后续4字节数据for(i=0;i<4;i++){for(j=0;j<8;j++){ temp=temp>>1; //temp中各个数据位右移一位,因为先读出来的是高字节temp=GetLowTime();if(temp<c(200)||temp>c(800)){gotoexit; //低电平不在合理的范围内,认为出错,停止解码}//由高电平时间判断该bit的值temp=GetHighTime();if(temp>c(2000)&&temp<c(200)){ //如果高电平的时间在560us左右,则该位为0gotoexit;} Ir_Buf[i]>>=1; if(temp>c(1120)) Ir_Buf[i]|=0x80;}}//保存第3字节的键码值 //红外108ms发射代码由一个起始码9ms,一个结果码4.5ms,低八位地址码9-18ms,高八位地址码,8位数据位,8位数据位的反码///SendData(Ir_Buf[2]); if(Ir_Buf[2]==0x09) { PasswordCounter=0; sprintf(strDisplayLine1,"%s","InputPassword:"); sprintf(strDisplayLine2,"%s",""); for(i=0;i<16;i++) { strTruePassword[i]=0; } } elseif(Ir_Buf[2]==0x47) //按了最右上面的按钮 { nMode=0; bLogined=0; sprintf(strDisplayLine1,"%s","InputPassword:"); sprintf(strDisplayLine2,"%s",""); } elseif(Ir_Buf[2]==0x43) //按了向右快进箭头,重置密码 { if(bLogined) { PasswordCounter=0; sprintf(strDisplayLine1,"%s","NewPassword:"); sprintf(strDisplayLine2,"%s",""); for(i=0;i<16;i++) { strTruePassword[i]=0; } nMode=1; //重置密码 } else { sprintf(strDisplayLine1,"%s","InputPassword:"); sprintf(strDisplayLine2,"%s","LoginFirst..."); } } else { if(nMode!=0) { if(nMode==1) { NewPwd[PasswordCounter]=Ir_Buf[2]; strDisplayLine2[PasswordCounter]='*'; PasswordCounter++; if(PasswordCounter==6) { nMode=2; PasswordCounter=0; sprintf(strDisplayLine1,"%s","AgainPassword:"); sprintf(strDisplayLine2,"%s",""); } } else { ReNewPwd[PasswordCounter]=Ir_Buf[2]; strDisplayLine2[PasswordCounter]='*'; PasswordCounter++; if(PasswordCounter==6) { /// SendString(ReNewPwd);/// SendString(NewPwd); if(NewPwd[0]==ReNewPwd[0]&&NewPwd[1]==ReNewPwd[1]&&NewPwd[2]==ReNewPwd[2]&&NewPwd[3]==ReNewPwd[3]&&NewPwd[4]==ReNewPwd[4]&&NewPwd[5]==ReNewPwd[5]) { sprintf(strDisplayLine2,"%s","Success!"); NoPowerBuzzerBeep(); //正确蜂鸣器提示音 I2CBuf[0]=NewPwd[0]; I2CBuf[1]=NewPwd[1]; I2CBuf[2]=NewPwd[2]; I2CBuf[3]=NewPwd[3]; I2CBuf[4]=NewPwd[4]; I2CBuf[5]=NewPwd[5]; /// i2c_serwrite(I2CBuf,0,len); //重新将新密码写入I2C IapEraseSector(IAP_ADDRESS);//擦除扇区(60s2两个扇区) for(i=0;i<len;i++) { IapProgramByte(IAP_ADDRESS+i,(unsignedchar)I2CBuf[i]); } } else { sprintf(strDisplayLine2,"%s","NotSuccess!"); } nMode=0; PasswordCounter=0; } } } else { if(PasswordCounter==0) //清屏 { sprintf(strDisplayLine1,"%s","InputPassword:"); sprintf(strDisplayLine2,"%s",""); w_string(0x80,strDisplayLine1); w_string(0xC0,strDisplayLine2); } strTruePassword[PasswordCounter]=Ir_Buf[2]; strDisplayLine2[PasswordCounter]='*'; PasswordCounter++; if(PasswordCounter==6) { if(strTruePassword[0]==I2CBuf[0]&&strTruePassword[1]==I2CBuf[1]&&strTruePassword[2]==I2CBuf[2]&&strTruePassword[3]==I2CBuf[3]&&strTruePassword[4]==I2CBuf[4]&&strTruePassword[5]==I2CBuf[5]) { sprintf(strDisplayLine2,"%s","Right!"); NoPowerBuzzerBeep(); //正确蜂鸣器提示音 G5VControl(); //继电器打开 bLogined=1; //登陆验证通过 } else { sprintf(strDisplayLine2,"%s","Error!"); } PasswordCounter=0; } } } w_string(0x80,strDisplayLine1); w_string(0xC0,strDisplayLine2); exit:IE1=0; //外部中断标志位清零EX1=1;}#if!defined_STC12C5A60S2_H#define_STC12C5A60S2_H////新一代1T8051系列单片机内核特殊功能寄存器C51CoreSFRs//76543210ResetValuesfrACC=0xE0;//Accumulator累加器0000,0000sfrB=0xF0;//BRegister0000,0000sfrPSW=0xD0;//ProgramStatusWordCYACF0RS1RS0OVF1P0000,0000//sbitCY=PSW^7;sbitAC=PSW^6;sbitF0=PSW^5;sbitRS1=PSW^4;sbitRS0=PSW^3;sbitOV=PSW^2;sbitP=PSW^0;//sfrSP=0x81;//StackPointer0000,0111sfrDPL=0x82;//DataPointerLowByte0000,0000sfrDPH=0x83;//DataPointerHighByte0000,0000////新一代1T8051系列单片机系统管理特殊功能寄存器//76543210ResetValuesfrPCON=0x87;//PowerControlSMODSMOD0LVDFPOFGF1GF0PDIDL0001,0000//76543210ResetValuesfrAUXR=0x8E;//AuxiliaryRegisterT0x12T1x12UART_M0x6BRTRS2SMODBRTx12EXTRAMS1BRS0000,0000//sfrAUXR1=0xA2;//AuxiliaryRegister1-PCA_P4SPI_P4S2_P4GF2ADRJ-DPS0000,0000/*PCA_P4:0,缺省PCA在P1口1,PCA/PWM从P1口切换到P4口:ECI从P1.2切换到P4.1口,PCA0/PWM0从P1.3切换到P4.2口PCA1/PWM1从P1.4切换到P4.3口SPI_P4:0,缺省SPI在P1口1,SPI从P1口切换到P4口:SPICLK从P1.7切换到P4.3口MISO从P1.6切换到P4.2口MOSI从P1.5切换到P4.1口SS从P1.4切换到P4.0口S2_P4:0,缺省UART2在P1口1,UART2从P1口切换到P4口:TxD2从P1.3切换到P4.3口RxD2从P1.2切换到P4.2口GF2:通用标志位ADRJ:0,10位A/D转换结果的高8位放在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论