红外遥控器课程设计_第1页
红外遥控器课程设计_第2页
红外遥控器课程设计_第3页
红外遥控器课程设计_第4页
红外遥控器课程设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机遥控系统是将红外遥控技术和单片机应用技术相结合的一种方案。本系统为红外遥控电子密码锁的控制管理部分,只要再连接上不同用途的电磁锁即可成为一个完整的红外遥控电子密码锁系统应用到各种领域中。而且本系统还设计有学习NEC红外编码遥控器的功能,通过红外接收解码电路,把遥控器的键码还原并储存起来,再利用查找对比的方法便能够识别不同的遥控器,大大提高了系统的灵活性和实用性。本系统以单片机作为核心元件将电子密码锁和无线遥控技术结合起来,使其具有修改密码、报警锁定等功能,不仅能进行远距离遥控解锁,还能实现近距离按键密码初始化及复位解除报警。同时采用E2PROM作为存储单元,方便用户存储、修改密码和遥控器

2、键码;采用LCD显示令使用更加方便直观。红外线遥控电子密码锁能实现多种控制功能,改善了传统机械锁的各种缺点,有较好的市场发展前景和技术应用价值。而且本系统的红外接收解码部分延时计数准确,并且有错误校验,所以整个接收解码的准确性非常高。设计电路主要由红外线解码学习电路、密码修改和存储电路、声光提示报警电路、LCD显示电路组成。系统能完成输入密码开锁、出错报警、超次锁定、修改用户密码等基本的密码锁的功能,并且还能实现远距离遥控、按键密码初始化、掉电存储、声光提示、遥控器学习识别等附加功能。关键词:电子密码锁红外遥控单片机NEC编码遥控器学习目 录1 设计目的意义 . . . . . . . . .

3、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 在线编程电路和实物图. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .5.

4、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .53 设计方案. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5、 . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124硬件分析及设计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . .

6、. . . . . . . . . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124.1.2 NEC编码格式介绍. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .12. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

7、. . . . . . . . . . . . . . . . . . . . . . .14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

8、 . . . . . . . . . . . . . . . . .14. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155 软件设计. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15. . . . . . . . . . . . . . . . . . . . . . . .

9、 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13. . . . . . . . . . . . . . . . . . . .

10、. . . . . . . . . . . . . . . . . . . . . . . . . . . .145.2.3密码判断、报警及修改程序. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136功能分析及总结. . . . . . . . . . . . . . . . .

11、. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .137具体操作流程. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .13参考文献. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

12、 . . 16附录. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 设计目的意义随着人们生活水平的提高,如何实现家庭防盗这一问题也变得尤其重要。目前国内,大部分人使用的还是传统的机械锁。传统的机械锁由于其构造的简单,被撬的事件屡见不鲜。即使是一把质量过关的机械锁,通过急开锁,甚至可以在不损坏锁的前提下将锁打开。而且,在日常的生活和工作中,若使用传统的机械式钥匙开锁,人们常需携带多把钥匙,

13、使用极不方便,且钥匙丢失后安全性即大打折扣。为此,本系统试着设计具有防盗报警功能的红外线遥控电子密码锁来代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点。而且还添加了红外遥控、遥控器学习识别和LCD显示等功能,可以实现远距离开关锁、修改密码等,系统灵活性强,操作简单直观、使用非常方便。由于这是一次学生的实习项目,本产品未必能尽善尽美,但基本的要求还是可以满足。2 在线编程电路和实物图(详见附录1)2.2实物图复位键LED灯指示蜂鸣器STC89C52RCLCD对比度调节电阻一体化红外接收头SM0038图1 实物图3设计方案3.1 发射模块的方案使用NEC编码格式红外线遥控编码

14、芯片uPD6122G等作为主芯片再加上外围电路完成发射部分,或直接购买红外线遥控编码芯片的遥控器成品作为系统的发射部分。因为是红外线遥控编码专用芯片,其内部已经集成了按键检测、处理和红外编码模块。而且无须编程,使用十分方便。故市面上的绝大多数的红外遥控器都是使用类似的方案,可见这方面的技术已经相当成熟。在抗干扰能力上,因为没有涉及到软件,故其抗干扰能力强。3.2 接收模块的方案发射模块使用型号为HZ-FT007的20键车载MP3红外遥控器和创维RC-585型DVD遥控器,因为它们都是采用NEC编码格式的红外遥控芯片作为主要芯片;使用一体化红外接收头SM0038和单片机STC89C52RC结合的

15、方式完成接收解码模块,学习识别NEC编码格式的不同遥控器;使用单片机内部eeprom作为存储模块;使用LCD1602A实现系统的显示模块。系统的总框图如图3所示。这样的选择使系统在较低成本的情况下较好地实现系统的功能,而且系统有着较高的抗干扰性和稳定性。按键uPD6122GSM0038MCULCD1602电磁锁NEC编码遥控器图2 选用方案系统框图4硬件分析及设计4.1 发射模块原理4.1.1红外发送系统原理红外遥控信号是一连串的二进制脉冲码。为了使其在无线传输过程中免受其他红外信号的干扰,通常都是先将其调制在特定的载波频率上,然后再经红外发光二极管发射出去,红外线接收装置则会滤除其它杂波只接

16、收该特定频率的信号并将其还原成二进制脉冲码。在本红外遥控系统中,红外信号的载波频率为38KHz。通常,红外遥控系统中所采用的编码方式有两种:通过脉冲宽度来实现信号调制的脉宽调制(PWM)和通过脉冲串之间的时间间隔来实现信号调制的脉时调制(PPM)。本系统是采用PPM方法,即用两个脉冲之间的时间间隔来表示二进制信息。为了确保发送端和接收端之间数据传输的准确无误,红外线信号还要按照特定的传输协议来进行信号传输。常用的红外线信号传输协议有NEC协议、RC-5协议、RC-6协议、Sharp协议等。4.1.2NEC编码格式介绍本系统使用的型号为HZ-FT007的20键车载MP3红外遥控器和创维RC-58

17、5型DVD遥控器请参看附录2中的实物图,它们主要芯片都是NEC编码格式的红外遥控芯片。NEC编码广泛应用于电视机,DVD,PC电脑,音响等,是比较常用的一种红外编码格式。下面以NEC编码标准的红外编码芯片uPD6122G作为例子介绍。NEC遥控编码是连续的32位二进制码组,其中的前十六位是用户码,后16位为8位的数据码及其反码。在每次编码之前还会发送9ms高电平和4.5ms低电平组成的引导码(或称起始码)。而且第二段的用户码也可以在遥控应用电路中被设置为第一段用户码的反码。它的帧结构如下图所示。图3 帧结构NEC编码标准是以用不同脉冲的时间间隔来区分0和1的,uPD6122Gmsmsms的组合

18、表示二进制的0msms,周期为的组合表示二进制的1。其波形如下图所示。图4 脉冲波形图使用455KHz晶振时各代码所占的时间如下图所示:图5 晶振时各代码所占时间uPD6122G按键输出有两种方式:一种是每次按键都输出完整的一帧数据;另一种是按下按键不松开时,发送完整的一帧数据后再发送重复码,直到按键被松开。其波形如下图所示。图6 按键输出波形4.2接收模块原理4.2.1接收解码原理接收解码的关键是如何识别0和1,本系统使用的是一体化红外接收头进行红外信号接收,在没有信号的时候其输出端是高电平,而有信号的时候是低电平,所以其输出信号电平正好和遥控发射端相反。从上面的讨论可以发现在遥控发射端0和

19、1均以0.56ms的高电平开始,不同的是低电平的宽度,0ms,1ms,所以必须根据低电平的宽度区别0和1。本系统用中断的方式实现从接收头到MCU的信号传输。如图9所示,红外接收头的输出端连接到单片机的INT0脚。接收头输出端有低电平信号输出时引起单片机的中断。单片机响应中断并进行信号的接收解码。解码后的信号就变成相应的遥控器按键代码,从而可以成为密码锁的密码。接收头SM0038MCUINT0图7中断接收示意图4.2.2该模块的硬件电路接收解码电路由一体化红外接收头SM0038和单片机STC89C52RC组成。 STC系列单片机具有在系统中直接可编程特性,其好处是:省去购买通用编程器,单片机在用

20、户系统上即可下载/烧录用户程序,而无须将单片机从已生产好的产品上拆下,再用通用编程器将程序代码烧录进单片机内部。有些程序尚未定型的产品可以一边生产,一边完善,加快了产品进入市场的速度,减小了新产品由于软件缺陷带来的风险。由于可以在用户的目标系统上将程序直接下载进单片机看运行结果对错,故无须仿真器,因此选择使用这款单片机。一体化红外接收头SM0038是集信号放大、滤波、检波、整形于一体的红外接收器,电路内置PIN二极管和前置放大器,采用可以红外滤波的环氧树脂材料封装,可靠性高,不易受环境影响并可以防止非控制信号的输出脉冲出现。它的内部电路如图10所示。图8SM0038内部结构图SM0038内置带

21、通滤波器、积分器、和自动增益控制电路以抑制各种干扰和噪音。数据信号和干扰信号的主要区别在于载波频率、脉冲波长和工作周期上。所以数据信号应该满足载波信号的频率尽量接近带通滤波器的中心频率(38KHZ);脉冲长度在300us以上;数据的编码类型相兼容。而本系统选用的SM0038在这三方面和NEC编码格式是相配的。4.3 存储模块原理STC89C51、52内部都自带有2K字节的EEPROM,54、55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次以上,先来介绍下ISP与IAP的区别和特点。STC单片机内部有几个专门

22、的特殊功能寄存器负责管理ISP/IAP功能的,见表1。表1ISP/IAP相关寄存器列表名称地址功能描述D7D6D5D4D3D2D1D0复位值ISP_DATAE2hFlash数据寄存器1111 1111ISP_ADDRHE3hFlash高字节地址寄存器0000 0000ISP_ADDRLE4hFlash低字节地址寄存器0000 0000ISP_CMDE5hFlash命令模式寄存器-MS2MS1MS0xxxx x000ISP_TRIGE6hFlash命令触发寄存器xxxx xxxxISP_CONTRE7hISP/IAP 控制寄存器ISPENSWBSSWRST-WT2WT1WT0000x x000I

23、SP_DATA:ISP/IAP操作时的数据寄存器。ISP/IAP从Flash读出的数据放在此处,向Flash写入的数据也需放在此处。ISP_ADDRH:ISP/IAP操作时的地址寄存器高八位。ISP_ADDRL:ISP/IAP操作时的地址寄存器低八位。ISP_CMD:ISP/IAP操作时的命令模式寄存器,须命令触发寄存器触发方可生效。命令模式如表2所示。表2 ISP_CMD寄存器模式设置D7D6D5D4D3D2D1D0模式选择保留命令选择-000待机模式,无ISP操作-001对用户的应用程序flash区及数据flash区字节读-010对用户的应用程序flash区及数据flash区字节编程-01

24、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,STC89

25、LE52RC单片机内部可用Data Flash(EEPROM)的地址如表3所示,其它型号单片机请查阅相关资料。表3 STC89C52RC、STC89LE52RC单片机内部EEPROM地址表第一扇区第二扇区第三扇区第四扇区起始地址结束地址起始地址结束地址起始地址结束地址起始地址结束地址2000H21FFH2200H23FFH2400H25FFH2600H27FFH第五扇区第六扇区第七扇区第八扇区起始地址结束地址起始地址结束地址起始地址结束地址起始地址结束地址2800H29FFH2A00H2BFFH2C00H2DFFH2E00H2FFFH每个扇区为512字节,建议大家在写程序时,将同一次修改的数据

26、放在同一个扇区, 方便修改,因为在执行擦除命令时,一次最少要擦除一个扇区的数据,每次在更新数据前都必须要擦除原数据方可重新写入新数据,不能直接在原来数据基础上更新内容。4.4液晶显示模块原理系统中采用LCD1602作为显示器件输出信息。与传统的LED数码管显示器件相比,液晶显示模块具有体积小、功耗低、显示内容丰富等优点,而且不需要外加驱动电路,现在液晶显示模块已经是单片机应用设计中最常用的显示器件了。LCD1602可以显示2行×16个字符,具有8位数据总线D0-D7,和RS、R/W、E三个控制端口,工作电压为5V,并且带有字符对比度调节和背光设置。LCD1602与单片机的连接电路图参

27、考附录3。其管脚功能简介如下:VL:LCD对比度调节端,电压调节范围为05V。接正电源时对比度最弱,接地电源时对比度最高,可以用一个10K的电位器来调整对比度;RS:数据或者指令选择端。处理器写入指令时,RS为低电平,写入数据时,RS为高电平;R/W:读写控制端。R/W为高电平时,读取数据;R/W为低电平时,写入数据;E:LCD模块使能信号控制端。写数据时,需要下降沿触发模块;D0D7:8位数据总线,三态双向;BLA: LED背光正极。需要背光时,BLA串接一个限流电阻接VCC;BLK: LED背光负极。5软件设计5.1编程语言目前,对单片机的编程主要采用汇编和C语言。汇编语言有执行效率高、速

28、度快、与硬件结合紧密等特点。尤其在进行I/O端口管理时,使用汇编语言有快捷、直观的优点。但是使用汇编语言相对于使用高级语言编程难度要大一些,且程序可读性低,开放性差,从系统开发时间来看,效率不是很高。 C语言是一种结构化语言,可产生紧凑代码。C语言可以用许多机器级函数直接控制操作8051硬件。与汇编语言相比,C语言有如下的优点: 不要求了解单片机的指令系统,仅要求对8051的存储结构有初步了解; 寄存器分配,不同存储器的寻址及数据类型等细节可由编译器管理; 程序有规范的结构,可分为不同的函数,这种方式可使程序结构化; 具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性; 关键字及运

29、算符可用近似人的思维方式使用; 编程及程序调试时间显著缩短,从而提高效率; 提供的库包含许多标准子程序,具有较强的数据处理能力; 已编好的程序可容易地植入新程序,因为它具有方便的模块化编程技术。当然,采用混编模式,就能结合两者的优点。本着学习的目的,本系统均采用C51语言编写。5.2主要程序说明及流程图本系统的软件程序主要包括主程序、接收解码程序、密码判断和报警程序、密码修改程序、遥控器学习识别程序几个大的模块程序。5.2.1主程序主程序首先是初始化程序,然后就等待红外接收头输出端的低电平,低电平出现说明遥控有键按下,外部中断设定为下降沿触发,故单片机进入中断服务程序进行信号的接收解码。当接收

30、到遥控器识别按键时,单片机查找AT24C02并判断此遥控器ID是否已存在。当ID不存在时,系统进入遥控器学习模式,保存新ID及其键码;当遥控器ID已存在时,系统进入密码输入界面,并且接收到八位的密码以后就开始运行密码核对程序,当密码输入正确后,就可以进行开锁、上锁或修改密码的操作。当密码输入错误的时候就会进入密码输入提醒程序提醒用户重新输入密码,密码输入累积到3次时系统会报警并锁定。初始化等待遥控识别按键遥控学习模式密码核对报警锁定开锁上锁密码修改N错误正确遥控ID存在?密码锁模式Y图9主程序流程图5.2.2接收解码程序红外接收解码的关键是如何识别0和1码,我的做法是根据0和1码的高电平宽度不

31、一样的特点来进行识别。接收程序的流程图如图10所示。进入红外接收程序后先关闭中断。接着的工作是避开9msms的低电平的引导码,并且判断是否干扰信号或者重复信号。正如前面所说,一体化红外接收头的输出端电平跟遥控发射端电平相反。如图14所示。所以只要遥控有键按下单片机就会马上产生中断接收数据。跟在引导码后面的是32位用户码和数据码,也就是我们想要的数据,单片机把它接收并保存。当接收完8位的数据时要更换另外一个数据缓冲区,当32位的键码都接收完的时候就意味这一帧的数据已经接收完毕。然后根据接收到的数据码和数据反码是否对应位相反来确定接收的这一帧数据是否正确,最后退出接收解码程序。发射模块MCU9ms

32、接收头9ms图10 接收头前导码信号变相图而单片机的接收端的01波形图如图15所示。在保存0码和1msms以后若读到为低电平,说明该位为0,反之则为1msms,否则如果该位为0读到的已是下一位的高电平,因此取(ms + 0ms左右均可。图11 单片机接收端的01波形图接收解码中断程序:void IR_IN() interrupt 0 using 0 unsigned char j,k,N=0; EX0 = 0; delay(15); if (IRIN=1) EX0 =1; return; /确认IR信号出现 while (!IRIN) /等IR变为高电平,跳过9ms的前导低电平信号。 dela

33、y(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计数过长自动离开。 /高电平计数完毕 IRCOMj=IRCOMj >> 1; /数据最高位补“0” if (N>=8) IRCOMj

34、= IRCOMj | 0x80; /数据最高位补“1” N=0; /end for k /end for j if (IRCOM2!=IRCOM3) EX0=1; return; IRCOM5=IRCOM2 & 0x0F; /取键码的低四位 IRCOM6=IRCOM2 >> 4; /右移4次,高四位变为低四位 if(IRCOM5>9) IRCOM5=IRCOM5+0x37; else IRCOM5=IRCOM5+0x30; if(IRCOM6>9) IRCOM6=IRCOM6+0x37; else IRCOM6=IRCOM6+0x30; LED3=0; beep

35、(); LED3=1; ir_data=IRCOM2; ir_flag=1; /信号接收成功标志位 EX0 = 1; 5.2.3密码判断、报警及修改程序电子密码锁的软件编程主要分为两方面,分别是接收密码后判断及报警部分和密码修改控制部分。首先介绍密码判断及报警程序。显示收到的键码并保存到接收缓存receive_code8,直到8位键码接收完毕。然后和原密码缓存origin_code8比较,判断密码是否正确。若密码正确则将标志位code_right=1;若不正确则报警并使密码输入错误次数wrong_num+,再判断错误次数是否已达3次,若是则程序进入死循环锁定。程序流程图所示。输入密码接收了6位

36、键码?code_right=1密码是否正确wrong_num+wrong_num=3?错误警告报警锁定NNNYYY输入密码接收了8位键码?code_right=1密码是否正确wrong_num+wrong_num=3?错误警告报警锁定NNNYYY图12 密码判断、报警大致程序流程 接着介绍密码修改控制程序。当密码输入正确以后用户按下“密码修改键”就会进入密码修改操作,单片机也就会运行密码修改程序。code_right=1修改密码?保存新密码新密码接收完毕?返回NNNNYYYY新密码确认完毕?两次密码相同?显示错误图13 密码修改流程图进入密码修改程序首先等待新密码的第一次输入。第一次输入的新密

37、码放在接收缓存receive_code8中,当输入完第八个密码后系统会提示再次输入密码,第二次输入的新密码放在密码比较缓存com_code8中。第二次输入密码完成后就检验两次输入的新密码是否相同,如果相同的话就更换密码,将新密码储存到芯片的eeprom中。Eeprom存储子程序:/* = 打开 ISP,IAP 功能 = */void ISP_IAP_enable(void) EA = 0; /* 关中断 */ ISP_CONTR = ISP_CONTR & 0x18; /* 0001,1000 */ ISP_CONTR = ISP_CONTR | WaitTime; /* 写入硬件延时

38、 */ ISP_CONTR = ISP_CONTR | 0x80; /* ISPEN=1 */* = 关闭 ISP,IAP 功能 = */void ISP_IAP_disable(void) ISP_CONTR = ISP_CONTR & 0x7f; /* ISPEN = 0 */ ISP_TRIG = 0x00; EA = 1; /* 开中断 */* = 公用的触发代码 = */void ISPgoon(void) ISP_IAP_enable(); /* 打开 ISP,IAP 功能 */ ISP_TRIG = 0x46; /* 触发ISP_IAP命令字节1 */ ISP_TRIG

39、= 0xb9; /* 触发ISP_IAP命令字节2 */ _nop_();/* = 字节读 = */unsigned char byte_read(unsigned int byte_addr) ISP_ADDRH = (unsigned char)(byte_addr >> 8);/* 地址赋值 */ ISP_ADDRL = (unsigned char)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD & 0xf8; /* 清除低3位 */ ISP_CMD = ISP_CMD | RdCommand; /* 写入读命令 */ ISP

40、goon(); /* 触发执行 */ ISP_IAP_disable(); /* 关闭ISP,IAP功能 */ return (ISP_DATA); /* 返回读到的数据 */* = 扇区擦除 = */void SectorErase(unsigned int sector_addr) unsigned int iSectorAddr; iSectorAddr = (sector_addr & 0xfe00); /* 取扇区地址 */ ISP_ADDRH = (unsigned char)(iSectorAddr >> 8); ISP_ADDRL = 0x00; ISP_C

41、MD = ISP_CMD & 0xf8; /* 清空低3位 */ ISP_CMD = ISP_CMD | EraseCommand; /* 擦除命令3 */ ISPgoon(); /* 触发执行 */ ISP_IAP_disable(); /* 关闭ISP,IAP功能 */* = 字节写 = */void byte_write(unsigned int byte_addr, unsigned char original_data) ISP_ADDRH = (unsigned char)(byte_addr >> 8); /* 取地址 */ ISP_ADDRL = (unsi

42、gned char)(byte_addr & 0x00ff); ISP_CMD = ISP_CMD & 0xf8; /* 清低3位 */ ISP_CMD = ISP_CMD | PrgCommand; /* 写命令2 */ ISP_DATA = original_data; /* 写入数据准备 */ ISPgoon(); /* 触发执行 */ ISP_IAP_disable(); /* 关闭IAP功能 */5.2.4主函数void main() /主函数 uchar m,a,b=0,c=0,e,f,k,i=0,j=0,wrong_num=0; uchar code_right=

43、0; uchar new1_code,new2_code; uchar receive_code8,com_code8; uint addr; IE = 0x81; /允许总中断中断,使能 INT0 外部中断 TCON = 0x01; /触发方式为脉冲负边沿触发 IRIN=1; /I/O口初始化 BEEP=1; /蜂鸣器初始化if(byte_read(0x2200)=0x11) /初始密码读取origin_code0=byte_read(0x2000);origin_code1=byte_read(0x2001);origin_code2=byte_read(0x2002);origin_co

44、de3=byte_read(0x2003);origin_code4=byte_read(0x2004);origin_code5=byte_read(0x2005);elseSectorErase(0x2000);byte_write(0x2000,0x0C);byte_write(0x2001,0x18);byte_write(0x2002,0x5E);byte_write(0x2003,0x08);byte_write(0x2004,0x1C);byte_write(0x2005,0x5A);origin_code0=0x0C;origin_code1=0x18;origin_code2

45、=0x5E;origin_code3=0x08;origin_code4=0x1C;origin_code5=0x5A; delay1(10); /延时 lcd_init(); /初始化LCD delay1(10); /延时 lcd_init(); delay1(10);EX0=0;/关中断 lcd_wcmd(0x01); lcd_pos(0); /设置显示位置为第一行的第1个字符 for(m=0;m<16;m+) lcd_wdat(welcm); delay1(10); /字符显示延时lcd_pos(0x40); /设置显示位置为第二行的第1个字符 for(m=0;m<16;m+

46、) lcd_wdat(cdis2m); delay1(10);EX0=1; /开中断delay1(500);beep();lcd_wcmd(0x01); /密码输入delay1(10);lcd_pos(0);for(m=0;m<16;m+) lcd_wdat(ent_signm);ir_flag=0;for(;) /密码接收、确认、显示 if(ir_flag=0) continue;ir_flag=0;/按键屏蔽if(ir_data=num_1|ir_data=num_2|ir_data=num_3|ir_data=num_4|ir_data=num_5|ir_data=num_6|ir

47、_data=num_7|ir_data=num_8|ir_data=num_9|ir_data=num_0) if(code_right=1) continue; receive_codei=ir_data; /按下一个键,显示一个星号lcd_pos(0x40+j);j+;lcd_wdat(codestari);i+;ir_data=0; if(ir_data=num_voldec) /密码输入修改键i-;if(i<0) i=0;j-;if(j<0) j=0;lcd_pos(0x40+j); lcd_wdat(ent_empty0); if(i>0) if(ir_data=n

48、um_play) / 密码输入完毕确认键 play a=0;if(i<6|i>6) a=1; /判断密码是否为六位数while(i-)if(origin_codei!=receive_codei)/与原密码比较 a+; if(a>0) wrong_num+; for(;)if(wrong_num=1&&b=0&&c=0) /第一次输入错误显示 lcd_wcmd(0x01);lcd_pos(0); for(m=0;m<16;m+)lcd_wdat(wrong_code1m);lcd_pos(0x40); for(m=0;m<16;m+

49、) lcd_wdat(ent_agam);LED1=0;beep();EX0=0;delay1(1000);EX0=1;lcd_wcmd(0x01);lcd_pos(0);for(m=0;m<16;m+) lcd_wdat(ent_signm);i=0;j=0;b=1;lcd_pos(0x40);for(m=0;m<16;m+)lcd_wdat(ent_emptym);break;else if(wrong_num=2&&b=1&&c=0)/第二次密码输入错误显示lcd_wcmd(0x01); lcd_pos(0); for(m=0;m<16;m+)lcd_wdat(wrong_code2m);lcd_pos(0x40); for(m=0;m<16;m+) lcd_wdat(ent_agam);LED2=0; beep();delay1(20);beep(); EX0=0;delay1(1000);EX0=1; lcd_wcmd(0x01

温馨提示

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

评论

0/150

提交评论