版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于51单片机的红外遥控密码锁摘 要:关于如何加强家庭住房安全问题日益突出。传统的机械防盗锁构造过于简单,尽管有些经过加固以及增加相应的防护措施,但是锁被撬现象屡见不鲜,无法保障人们的安全。本次设计中制作的一种密码锁,具有很好的保密性。另外,此处采用的是双控模式,即使用键盘控制的同时,也可以使用遥控器。操作中的提示语用lcd来显示。密码由六位0到9的数字够成,加大保密强度,此外,本设计中采用的at24c02具有防止掉电丢失数据的作用。关键词:51单片机;密码锁;红外;lcd1602based on 51 scm infrared remote control combination lock
2、abstract: security issues have become increasingly prominent on how to strengthen the family home. traditional mechanical anti-theft lock structure is too simple, although some had been strengthened and increased appropriate protective measures, but lock pry common occurrences, can not guarantee the
3、 safety of people. a lock made in the design, with good confidentiality. in addition, here is the dual-control mode that is controlled using the keyboard at the same time, you can also use the remote control. prompt operation using the lcd display. password by six 0-9 of digital enough increase conf
4、identiality strength, in addition, the design used in at24c02 prevent power-down data loss.key words: 51 scm; combination lock;infrared;lcd1602目 录1 引言- 1 -1.1研究背景与意义- 1 -1.2 研究现状- 1 -1.3 研究内容- 1 -2 系统设计方案- 2 -2.1 总体方案- 2 -2.2 系统框图- 2 -3 系统硬件电路设计- 3 -3.1 单片机最小系统设计- 3 -3.2 lcd显示电路设计- 4-3.3 矩阵键盘电路设计- 5
5、 -3.4 存储电路设计-6 -3.5红外发送接收电路设计- 7 -3.6 模拟锁与报警电路设计- 10 -3.7系统pcb设计- 11 -4 系统软件设计- 12 -4.1 程序设计思路- 12 -4.2 算法与流程图-13 -5 系统仿真与硬件调试- 14 -5.1系统仿真和调试方案- 14 -5.2 系统硬件调试- 16 -5.3 调试结果- 17 -6 总结与展望- 17 -致谢-17 -参考文献- 18-附录- 18 -1元器件清单- 18 -2源程序-18 -基于51单片机的红外遥控密码锁1 引言1.1 研究背景与意义我们知道当某一个公司研发一些新产品时都会特别重视其资料的安全问题
6、,在竞争日益激烈的当下,新研发的产品资料,科研项目,以及单位的文件档案、财务报表,个人资料等等,都是特别保护的对象,万一泄露将直接关系到一个企业的存亡。再从我们身边来说,家庭住房多采用一般的机械锁。这样不仅不安全,而且,每天都要带钥匙很不方便。若不慎丢失钥匙更会产生事倍功半的效果。本次设计的密码锁将满足人们的要求。在科技高速发展的今天,非接触式控制越来越受大家欢迎,利用红外遥控,方便又安全。另外,红外线不会产生信号干扰,反应速度迅速、工作稳定度高等特点。而在工业制造中,在高压、辐射、腐蚀等恶劣环境下,采用红外遥控能够很好地隔离这些干扰。在本次设计中,为了更加方便操作,除了采用矩阵键盘对密码锁进
7、行控制外,还可以用遥控器进行控制,以达到双控的目的。1.2 研究现状目前大部分的家庭用锁采用的都是机械式的,一种钥匙对应一把锁,但钥匙可复制,这无疑给人们的安全带来极大威胁。另外,其最大的缺点是利用简单工具就能很容易地把锁撬开。加深了人们的安全隐患。针对这种情况,本次设计制作了一种红外遥控密码锁,遥控器型号很常见,应用及为广泛,若突然摔坏或丢失即可到商店购买。由于本设计采用的存储器可防止断电数据丢失,因此更换遥控器或在整个电路断电又重启的情况下密码仍为先前设定值,具有很好的保密性。此外,密码共有六位,每位由0到9,十个数字构成,因此可设定106种密码,提高密保安全。然而,一般设备都采用专用的遥
8、控编码及解码集成电路,此类电路虽然制作简单,但由于某些特定功能的限制,例如编码解码等协议限制,只适用于专用的电器产品,配套性强,应用范围也因此受到限制。1.3 研究内容主要的设计实施过程:本次设计选用atmel公司的单片机at89c51,用于控制的lcd等。第二步,使用altium designer 6完成原理图,并设计pcb图完成人工布线。并腐蚀电路板。第三步,在keil uvision4软件中用c语言进行编程,外加仿真软件对程序进行修改,调试。第四部,结合软、硬件对电路板进行调试。最后完成本次设计。2 系统设计方案2.1 总体方案方案一:采用矩阵按键,通过单片机将字符送到数码管显示,另外,
9、密码锁部分用电磁继电器来进行模拟。 存储密码为防止断电丢失,用存储器进行存储。报警部分采用比较常用的蜂鸣器,外围驱动电路较简单。方案二:同样采用矩阵键盘,考虑到需要显示多个字符的问题,此时采用液晶显示lcd1602。此处的模拟锁用发光二极管来代替。用存储器at24c02来存储密码,报警部分依然采用蜂鸣器。通过两个方案的比较综合,考虑到外围设备,成本等问题,本次设计将采用第二种方案。硬件方面解决单片机与外围电路的设计,主控模块采用方案二来进行设计,另外用遥控器作为发送端的同时,应在主控模块加上接收模块,对遥控器发射的信号进行接收,解码等处理。由于键码值由商家提供,因此只需将每个键码值赋予特定的功
10、能,以此来控制密码锁的开关,改密等,并送到lcd1602上显示。另外,还有单片机最小系统。软件方面,首先是按键扫描问题,如何判断哪一个按键按下,如何让其并以何种形式显示到lcd1602上,这里就要考虑到1602的显示,地址写入等问题。红外的控制是本设计的难点,遥控器是以红外波的方式将特定的信号送给红外接收头。由于本设计采用的遥控器比较普遍,因此编码解码问题可以很容易查阅到。2.2 系统框图本文所设计的作品系统由at89s51单片机及其最小系统、矩阵键盘、红外接收头、遥控器、蜂鸣器、模拟锁、lcd1602液晶显示等部分组成。其系统框架图如图1所示4*4按键 51 单 片 机 蜂鸣器模拟锁lcd红
11、 外 发 射 器上键复位红 外 发 射 器晶振电路红外接收头图1 总体系统框架图3 系统硬件电路设计3.1 单片机最小系统设计本次设计的单片机采用atmel公司推出的at89s51系列单片机。最小系统包括上电复位电路和晶振电路【1】【2】。上电复位电路结构如图2中r1,r2,c3和sw1.其中r1和r2分别为1k和10k。通过手动来进行复位。图2 上电复位电路晶振电路结构如图3中y1,c1,c2.本设计选择12mhz频率的石英晶体,补偿电容采用30pf左右的瓷片电容.图3 晶振电路3.2 lcd显示电路设计从设计成本来考虑,显示电路部分首先会想到用数码管,但由于一个数码管只可以显示一个字符,例
12、如本次设计中,进入界面要显示welcome,输入密码是也要提示input code等等,就要用到10多个数码管。此外,每个数码管的位选端必须要通过单片机的io口进行控制,这就要占用多个io口,且在pcb板中进行手动布线时会很复杂。因此这次设计中,采用lcd1602。由于采用的lcd1602是16×2两行显示。第一行显示提示内容,第二行显示键入的数值。lcd1602具有很高的性价比,且应用很广泛。另外本设计使用插针将1602接到电路中,若1602出现故障更换方便。1602外观如下图4所示:图4 lcd1602管脚图lcd1602在电路中的连接方式,如下图所示: 图5 lcd硬件连接图3
13、.3 矩阵键盘电路设计本次设计要运用按键来控制,这时会想到有独立式键盘和矩阵式键盘两种连接方式,其中,独立键盘需要使用多个io口,由于本次设计要用到16个按键,因此若用独立按键会极大降低io口的利用率。因此,本次实验采用的是4×4矩阵键盘,电路连接比较复杂,但同时提高了io口的利用率。如下图所示,16个按键上分别实现不同功能,其中输入数字键:0、1、2、3、4、5、6、7、8、9;以及相应的功能键。键盘的每个按键所代表的功能如下图所示:图6 4×4矩阵键盘3.4 存储电路设计关于密码保护问题,除了由六位随机数字组成,还要考虑到断电之后数据会丢失的问题,为了防止掉电丢失,本设
14、计采用at24c02存储器。是一个2k位串行cmos e2prom。内部含有256个8位字节,catalyst公司的先进cmos技术实质上减少了器件的功耗。管脚图如图7所示: 图7 at24c02管脚图表1 at24c02管脚功能管脚名称管脚功能a0、a1、a2器件地址选择sda串行数据/地址scl串行时钟wp写保护vcc+1.8-6.0工作电压vss接地图8存储器地址位下图为24c02在硬件中的的连接图,根据各个管脚功能只需把a0、a1、a2、wp接地,按照i2c协议,时钟线scl和数据线sda需接10k上拉电阻。图9 at24c02硬件连接图3.5 红外发送接收电路设计1)红外发送模块这次
15、设计中用到的遥控器其实物图如下图所示: 图10 小型遥控器 特点:通过无线来控制,携带方便,低成本,低功耗等。遥控器应用范围:电器、儿童玩具等。按编码分类,有两种编码方式,主要分为rc5码和nec码【3-5】。由于本次设计用到的遥控器采用的是nec编码协议,下面将重点描述nec码特性。nec格式的特征:(1)使用16位客户代码(2)使用8位数据代码(3)引导码间隔是9 ms + 4.5 ms(4)使用38 khz载波频率下图为接收头上观察到的波形: 图11 遥控信号周期波形图12 引导码间隔图nec码编码原理如下:(1)数据帧结构(组成) 图13 数据帧结构图(2)“0”、“1”的表示方法:
16、图14 “0”和“1”的发射图 2)红外接收本次设计采用的红外遥控信号的接收集红外接收和放大于一体,不需要添加其他外围电路,就可以输出与ttl电平兼容的信号。以此来完成红外遥控的发送于接收。本次设计采用的是vs_1838b。外观如下: 图15 红外接收头vs_1838b由于密码采用双控模式,在主控模块采用矩阵键盘进行密码的输入及修改,因此,将红外接收端接到单片机的外部中断1来检测是否有红外信号,进而判断遥控器是否有按键按下,并进行密码的输入与修改。由原理图可知,接收头的三个管脚,只需要将gnd接地vcc接入电源,另一根输出线接入到单片机的外部中断1口即可。红外接收头与单片机的连接硬件电路如下图
17、所示: 图16 红外接收头连接图3.6 模拟锁与报警电路设计本次设计采用led来模拟锁,将发光二极管接到单片机的io口上,实际应用中接上一个1k电阻以保证发光二极管的亮度。如下图所示:图17 led连接图 报警电路采用的是蜂鸣器,由于蜂鸣器的工作电流一般比较大,这将导致单片机的io口无法直接进行驱动【6】【7】。以至于单片机的i/o 口是无法直接驱动,所以要使用放大电路用以驱动蜂鸣器,本次设计采用三极管来进行蜂鸣器的驱动。蜂鸣器驱动电路的外围设计:蜂鸣器、三极管再加上一个1k电阻接到单片机的io口上。蜂鸣器外围电路如下: 图18 蜂鸣器连接图3.7 系统pcb设计根据上述每个模块的设计,以及单
18、片机的各个管脚特性整体电路如图19。由于lcd接的是单片机的p0口所以每个管脚要接一个10k的上拉电路,即10k排阻。电源部分采用的是usb给单片机提供+5v的电源,发光二极管来指示有没有给单片机供电。再考虑每个模块需要加入的外围电路,以及接入到单片机相应的io口,为了方便程序的修改,要严格按照仿真的接法接到单片机的管脚,本设计总体原理图如下图所示:图19 总体原理图4 系统软件设计4.1 程序设计思路本次设计的密码锁,采用的是双控模式,即在主控模块中有4×4矩阵键盘可以输入数字来进行改密等功能,同时也可以用遥控器来实现。首先考虑到矩阵键盘的扫描问题,单片机io口默认为高电平,如上面
19、矩阵键盘图所示,键盘的列和行分别接p1口的高低电平,可以先固定在某一行进行扫描,利用switch语句返回每个按键锁表示的数值及跳转到某个功能函数中去,以此来实现按键控制。其次是1602lcd显示问题,先将lcd初始化,首行显示提示语例如登陆界面 显示welcome,开锁是显示input code等。第二行用来显示密码。考虑到安全性,将会将数字显示成*,提示语及密码均显示在lcd的正中间以保证屏幕的整体美观效果。其中密码为六位数。然后是at24c02存储器,防止密码断电丢失。先写24c02的驱动程序,时钟信号,读写数据等等,要考虑怎么将密码写入到24c02中,以及从中读取等问题。让lcd显示字符
20、的同时保存到at24c02中。最后要考虑远程遥控问题,遥控器来发送红外波,并由接收头接收信号经过处理之后传到单片机中,再经过程序运行处理来进行开锁、改密等。由前面的硬件介绍部分可知接收头连接的是外部中断1,当发射器发送信号时,外部中断1打开,此时进入中断程序,遥控器的21个按键有各自的键码值,同上述按键扫描采用switch语句可返回各个按键代表的数字及功能,以此来实现遥控器对密码锁的控制。另外,密码锁是用发光二极管来模拟,只需用高低电平来控制io口即可。即当接发光二极管接的io口为低电平时led点亮(可认为开锁)。当io口味高电平时led熄灭,此时认为上锁。蜂鸣器是用三极管来驱动接入到单片机的
21、io口,如发光二极管,当io口为低电平时蜂鸣器响。所以,当密码错误时,给io口送低电平即可达到报警效果。4.2 算法与流程图鉴于密码锁在输入密码时可有矩阵按键及遥控器进行双控,红外遥控采用中断的方式进行接收信号,先是按键的扫描,判断是执行某个任务还是将输入密码输送到lcd1602上面。接收头的输出管脚连接的是单片机的外部中断1口,因此,在程序运行时,首先要判断是否产生中断。先是遥控器发射出红外波,由接收部分将发射过来的信号转换为电信号,再经过放大电路等将其还原成相应的编码信号,然后通过译码器译码,将相应的解码赋予不同的功能,从而进行对密码锁的控制,实现遥控效果。本设计的主流程图如下图所示:开始
22、有红外中断?接收码正确否?密码对否?调用中断解码程序红外解码报警开锁中断返回 图20 主程序流程图5 系统仿真与硬件调试5.1 系统仿真和调试方案根据上述各个模块的功能以及pcb设计可用proteus来进行仿真,修改程序。仿真图如下图21所示: 图21整体仿真图仿真图与pcb原理图稍有差异,例如图5.1中的存储器24c02实物为8个管脚,但在proteus仿真中却只有六个管脚,其中少的两个管脚:管脚4为gnd即直接接地,管脚8为vcc,为电源。sck接时钟线即为scl,sda接数据线,其余均接地。另外,1602本为16个管脚,在proteus仿真中是14个管脚,管脚3调节1602亮度接1k滑动
23、变阻器。实际电路中,管脚3应接10k滑动变阻器,管脚15接10欧电阻。为了保证程序可在实物中使用,每个芯片接入到单片机的io口都会与pcb原理图保持一致。然后分模块逐一进行调试。由于本次设计采用的是市场卖的遥控器,在proteus中无法进行仿真,所以在proteus仿真中只有主控模块的原理图。因此,先写矩阵键盘控制密码锁的程序。根据程序设计思路首先对矩阵键盘进行扫描,将对应的数字以*的形式显示到1602上,这里要考虑1602的写地址。以及24c02的读写操作。5.2 系统硬件调试1)1602显示模块电源能够供电并芯片没有出现发热等不正常现象说明焊接正确。将1602的显示程序通过学习板烧到做好的
24、电路板中,检测1602是否正常显示,若1602只亮屏不显示字符此时调节滑动变阻器改变对比度。若调节滑动变阻器1602依然不显示,此时再看看程序中1602初始化函数是否有错,再看硬件有没有问题,本人在调试1602的时候就遇到类似问题,电路与程序都完全正确,1602却依然不能正常显示,有时会出现乱码的现象,最后发现竟然是单片机没有与插槽接触完全,导致1602的控制端与单片机接触不良,因此,会出现时而乱码时而不显示的状况。单片机固定牢固之后1602便可正常显示。2)按键扫描1602能够正常显示之后再看通过按键扫描能不能将数字传递到1602显示,首先检测硬件电路是否完全通路,再将程序烧进单片机中,按下
25、数字键看能否将数字显示到1602制定的位置上,此时还要注意密码不能超过六位数。一般按键如果电路正确,并且程序和硬件都无差错则在仿真中运行正确实物也可以轻松实现器功能。3)存储器硬件调试在本次设计中,如上述介绍为了防止掉电丢失采用at24c02进行存储数据。主要是将按键按下的值保存到存储器中,并能够从中读取。按下解锁键,lcd1602首行显示提示语,令一行则是显示将要输进去的密码。此时程序中还要进行密码的对比,若正确,led亮,说明锁已经打开。错误,则灯灭,说明锁已经关闭。本人在调试过程中发现输入密码时不能够正常开锁,而真正能通过的密码无从得知,若不通过存储器的读取,将初始值直接与键入值比较,此
26、时密码正确。说明存储器在读密码的时出现某些未知的错误。经过对程序的调试,让此时存储器随机出现的密码显示到1602上,然后再在开锁时键入对应的密码,此时密码正确。这说明原始设定的密码在调用的过程中被某一句程序改写。此时再回到proteus仿真,看下存储器接线与pcb是否一致,以及芯片是否安置正确。经过检查发现电路板上放置的芯片并不是at24c02,更换芯片后便能够实现开锁,改密等功能。4)红外遥控模块首先写一个红外遥控发送接收程序,看是否将字符正确显示到1602上。参考网上给的遥控器键码值使用swith语句同矩阵按键扫描返回数字及调用功能函数。经过参考网上给出的例程,加上外部中断1程序,使用中断
27、,检测是否发送信号。再将写好的程序烧到单片机中,验证通过则证明遥控器可以正确使用,再将两个程序综合到一起来实现双控。5.3 调试结果本次设计整体调试结果:给电路板送入+5v电源,1602第一行中间显示welcome,然后按解锁键,1602第一行显示input code 此时输入密码再按确定键。若密码正确模拟锁led点亮并显示right,密码不正确显示error蜂鸣器鸣叫并跳转到最初的界面。按下改密按键,1602第一行显示input old code,输入旧密码(密码错误则提示,并重新输入),若密码正确,画面提示input new code,此时键入新密码(六位数),然后按确定键,画面显示inp
28、ut new code again。再一次键入设置的新密码。若两次密码相同,则1602显示complete。然后切断电源,重新给电路板供电,再次输入密码(输入刚才设定的新密码),1602显示right并模拟锁发光二极管点亮。然后用遥控器如上操作,同样可以进行开锁及修改密码。6 总结与展望确定研究课题之后,查阅相关资料,设计相应的原理图。由于相同功能的芯片有很多,经过对比其实用性,是否易操作,外围电路以及程序设计难易等等来选择较合理的芯片。另外要考虑仿真与实物的不同,所以在画pcb板时,除了注意与仿真保持一致还要注意在实物中的效果,因此要考虑元器件封装及接入器件的电阻大小等等。写程序时为了达到预
29、期效果,对新接触的芯片进行研究,通过多次修改完成每个模块的运行。最艰难的应该是对电路板的调试,虽然在仿真中效果了令人满意,但当在实物中时却达不到仿真的效果,这就要通过多次检测,从每根线的焊接到每个芯片的管脚接通情况都要一一测量。每一次失败都会离成功又进一步。本次毕业设计不仅仅是对我大学四年的检测也是对我毅力的考验,让我在一次次的打击之后变得更坚强。 致谢从开始选定课题到现在经历了将近半年的时间,在这期间遇到一些困难想要放弃的时候室友们都会鼓励我,让我再次有了信心。遇到不懂的问题实验室那些经验丰富的同学都会过来给予建议,感谢他们的帮助。另外,还要感谢赵老师,总是在百忙之余指导我,帮我解决了不少难
30、题,让我顺利完成了设计。参考文献1 张毅刚. 单片机原理及应用(第二版)m. 北京:高等教育出版社, 2010: 16-42. 2 林伸茂. 8051单片机彻底研究基础篇m. 北京:人民邮电出版社,2003:24-150. 3 麦山,皮佑国.基于单片机的协议红外遥控系统j.1998.4 邱玉春,李文俊.单片机系统中的红外通信接口j.2000:56-163.5 张文峥,李先亮,张其善.irda 红外通信在导航仪中的应用j. 2000.6 康华光等.电子技术基础第2版m.北京:高等教育出版社,2004:10-156.7 牛翌光.单片机原理及接口技术m.北京:电子工业出版社,2008:32-79.附
31、录1元器件清单元器件名称及规格数量51单片机1晶振12mhz1瓷片电容30pf2电解电容10 uf 2usb1发光二极管2蜂鸣器1三极管pnp1at24c021滑动变阻器10k1排阻10k1电阻1k4按键17自锁按键1电阻10k3电阻10欧12源程序#include<at89x52.h>#include<intrins.h> /包含_nop_()函数定义的头文件#define uchar unsigned char#define uint unsigned int#define delaynop(); _nop_();_nop_();_nop_();_nop_();#d
32、efine dword unsigned long#define keypad p1#define password_length 6 /不要超过9#define password_addr 0x10#define password_entry 0x08#define addwr 0xa0 /写数据地址,需要参考24c02芯片文档#define addrd 0xa1 /读数据地址#define default_passwords 123456#define default_entrywords 20130411#define wait_time 600 /等待600s后关闭显示屏,节电ucha
33、r ircom7;/*红外延时函数声明*/void delay(uint);void delay1ms();void delay(unsigned char x) ;void display();void delay1(int ms);sbit irin=p33; /外部中断1/sbit lock=p23;/模拟锁sbit buzzer=p24;/蜂鸣器void delay(unsigned char x) /x*0.14msunsigned char i;while(x-)for (i = 0; i<13; i+) sbit sda=p26;sbit scl=p25;dword tim
34、e_value=0,passwords=123456;bit key_flag=0,currentdisflag=1,lastdisflag=1,keystatusflag=0,dispassword_com=0,dispassword_flag=0;uchar second=0,minute=0,hour=0;uchar key=0,keycounts=0,t_num=0;uchar code tab1="input code "uchar code tab2=" right! "uchar code tab3="error "uc
35、har code tab4="welcome enter "uchar code tab5="input old code "uchar code tab6="input new code "uchar code tab7="input code again"uchar code tab8="complete! "uchar code cls= " "uchar code open="welcome. "uchar code tab9="- &q
36、uot;uchar code message16="0123456789abcdef"/*lcd1602驱动*/#define lcd_data p0/数据接口sbit rs=p20;/定义接口sbit rw=p21;sbit en=p22;sbit led=p23;void lcd_init(void);void lcd_writedata(uchar wdlcd);void lcd_writecommand(uchar wclcd);void displayonechar(uchar x, uchar y, uchar ddata);void displaylistch
37、ar(uchar x, uchar y, uchar code *ddata);/*延时函数*/void delay11();void delay2(uint t) /延时函数msuint x,y;for(x=t;x>0;x-)for(y=110;y>0;y-); /*1602写数据函数*/void lcd_writedata(uchar wdlcd) rs=1;rw=0;en=1;lcd_data=wdlcd;delay2(1);en=0;/*1602写指令函数*/void lcd_writecommand(uchar wclcd)/busyc为0时忽略忙检测 rs=0; rw=
38、0; en=1; lcd_data=wclcd; delay2(1); en=0;/*1602初始化函数*/void lcd_init(void)lcd_writecommand(0x38); /设置显示模式:16x2,5x7,8位数据接口 lcd_writecommand(0x0c); /开显示,显示光标,光标闪烁 lcd_writecommand(0x06); /读写一个字符后,地址指针及光标加一,且光标加一整屏显示不移动 lcd_writecommand(0x80); /设置光标指针/*1602按指定位置显示一个字符函数*/void displayonechar(uchar x, uch
39、ar y, uchar ddata) y &= 0x1; x &= 0xf;/限制x不能大于15,y不能大于1 if (y) x |= 0x40;/当要显示第二行时地址码+0x40; x |= 0x80;/ 算出指令码 lcd_writecommand(x);/这里不检测忙信号,发送地址码 /delay(1); lcd_writedata(ddata); /delay(1);/*1602按指定位置显示一串字符函数*/void displaylistchar(uchar x, uchar y, uchar code *ddata) uchar listlength; listle
40、ngth = 0; y &= 0x1; x &= 0xf;/限制x不能大于15,y不能大于1 while (ddatalistlength!='0')/若到达字串尾则退出 if (x <= 0xf)/x坐标应小于0xf displayonechar(x, y, ddatalistlength);/显示单个字符 listlength+; x+; /*lcd1602驱动*/*24c02驱动*/void start() /开始信号sda=1;delay11();scl=1;delay11();sda=0;delay11();scl=0;void stop() /
41、停止信号sda=0;delay11();scl=1;delay11();sda=1;delay11();scl=0;sda=0;void respons() /应答uchar i;sda=0;scl=1;delay11();while(sda=1)&&(i<250)i+;scl=0;delay11();void write_byte(uchar indata) /写一个字节uchar i,temp;temp=indata;for(i=0;i<8;i+)temp=temp<<1;scl=0;delay11();sda=cy;delay11();scl=1;
42、delay11();scl=0;delay11();sda=1;delay11();uchar read_byte() /读一个字节uchar i,k=0;scl=0;delay11();sda=1;delay11();for(i=0;i<8;i+)scl=1;delay11();k=(k<<1)|sda;scl=0;delay11();return k;void wrtorom_byte(uchar address,uchar indata)start();write_byte(addwr);respons();write_byte(address);respons();w
43、rite_byte(indata);respons();stop();uchar rdfromrom_byte(uchar address)uchar indata;start();write_byte(addwr);respons();write_byte(address);respons();start();write_byte(addrd);respons();indata=read_byte();stop();return indata;void wrtorom_dword(uchar address,dword indata) uchar temp=0,i=0; /refresh_d
44、isplay(0,1,cls); for(i=0;i<4;i+) temp=(indata>>(8*i)&0xff; /displayonechar(7-2*i,1,messagetemp%0x10); /displayonechar(6-2*i,1,messagetemp/0x10); delay2(1); wrtorom_byte(address+i,temp); delay2(1); /displaydata(indata);dword rdfromrom_dword(uchar address) uchar i=0,temp=0; dword indata=0
45、; /refresh_display(0,1,cls); for(i=0;i<4;i+) temp=rdfromrom_byte(address+3-i); indata=(indata<<8)+temp; /displayonechar(2*i+1,1,messagetemp%0x10); /displayonechar(2*i,1,messagetemp/0x10); delay2(1); /displaydata(indata);delay2(1); return indata;void init_24c02() /初始化sda=1;delay11();scl=1;de
46、lay11();/*24c02驱动*/*定时器1中断*/void ir_in() interrupt 1unsigned char j,k,n=0;unsigned char q=0;th0=(65536-50000)/256; tl0=(65536-50000)%256;ex1 = 0; delay(15);if (irin=1) ex1 =1;return; /确认ir信号出现/*/while (!irin) /等ir变为高电平,跳过9ms的前导低电平信号。delay(1);for (j=0;j<4;j+) /收集四组数据 for (k=0;k<8;k+) /每组数据有8位wh
47、ile (irin) /等 ir 变为低电平,跳过4.5ms的前导高电平信号。delay(1);while (!irin) /等 ir 变为高电平delay(1);while (irin) /计算ir高电平时长delay(1);n+; if (n>=30) ex1=1;return; /0.14ms计数过长自动离开。 /高电平计数完毕 ircomj=ircomj >> 1; /数据最高位补“0”if(n>=8)ircomj = ircomj | 0x80; /数据最高位补“1” n=0;if(ircom2!=ircom3) ex1=1;return; ircom5=ircom2 & 0x0f; /取键码的低四位ircom6=ircom2 >> 4; /右移4次,高四位变为低四位if(ircom5>9) ircom5=ircom5+0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年家庭供暖工程保险合同
- 2024年度城市公共交通服务质量评估合同2篇
- 2024年固定额度信用授信及贷款服务协议版B版
- 2024年度水泥采购具体合同样本版B版
- 2024商场店面租赁合同
- 2024年企业代缴员工社保协议样本版
- 2024年度建筑工程室内装饰地毯定制销售合同
- 2024年专业个人防水施工服务合作合同版B版
- 2024年度旅游服务公司间合作协议版B版
- 2024年度旅游服务与合作协议
- 铜229-1 12号 pep广州版小学英语五年级上册 module5-6 unit7-10 修改 4000字 版面设计
- 2024年东华软件技术有限公司招聘笔试参考题库含答案解析
- 《物资编码培训》课件
- 校长校园安全预防与应急处理培训课件
- 护士长竞聘完整版本
- VHDL语言-矩阵键盘代码键盘
- NB-T 11230-2023 风力发电机组振动传感器技术规范
- 公司反贿赂协议书
- 合同补充协议书 装修合同补充协议书
- 普通车床知识简介课件
- 色彩搭配:认识不同的色彩搭配
评论
0/150
提交评论