基于51单片机的红外遥控密码锁160毕业设计(编辑修改稿)内容摘要:

0 主程序流程图 5 系统仿真与硬件调试 系统仿真和调试方案 根据上述各个模块的功能以及 PCB 设计可用 PROTEUS 来进行仿 真,修改程序。 仿真图如下图 21 所示: 开始 红外解码 有红外中断。 接收码正确否。 密码对否。 调用中断解码程序 红外解码 报警 开锁 中断返回 基于 51 单片机的红外遥控密码锁 15 图 21 整体仿真图 仿真图与 PCB 原理图稍有差异,例如图 中的存储器 24c02 实物为 8 个管脚,但在 PROTEUS 仿真中却只 有六个管脚,其中少的两个管脚:管脚 4 为 GND 即直接接地,管脚 8 为 VCC,为电源。 SCK 接时钟线即为 SCL, SDA 接数据线,其余均接地。 另外,1602 本为 16 个管脚,在 PROTEUS 仿真中是 14 个管脚,管脚 3 调节 1602 亮度接 1K滑动变阻器。 实际电路中,管脚 3 应接 10K 滑动变阻器,管脚 15 接 10 欧电阻。 为了保证程序可在实物中使用,每个芯片接入到单片机的 IO 口都会与 PCB 原理图保持一致。 然后分模块逐一进行调试。 由于本次设计采用的是市场卖的遥控器,在 PROTEUS 中无法进行仿真,所以在基于 51 单片机的红外遥控密码锁 16 PROTEUS 仿真中只有 主控模块的原理图。 因此,先写矩阵键盘控制密码锁的程序。 根据程序设计思路首先对矩阵键盘进行扫描,将对应的数字以 *的形式显示到 1602 上,这里要考虑 1602 的写地址。 以及 24c02 的读写操作。 系统硬件调试 1) 1602 显示模块 电源能够供电并芯片没有出现发热等不正常现象说明焊接正确。 将 1602 的显示程序通过学习板烧到做好的电路板中,检测 1602 是否正常显示,若 1602 只亮屏不显示字符此时调节滑动变阻器改变对比度。 若调节滑动变阻器 1602 依然不显示,此时再看看程序中 1602 初始化函数是否有错,再看硬件 有没有问题,本人在调试 1602的时候就遇到类似问题,电路与程序都完全正确, 1602 却依然不能正常显示,有时会出现乱码的现象,最后发现竟然是单片机没有与插槽接触完全,导致 1602 的控制端与单片机接触不良,因此,会出现时而乱码时而不显示的状况。 单片机固定牢固之后 1602 便可正常显示。 2)按键扫描 1602 能够正常显示之后再看通过按键扫描能不能将数字传递到 1602 显示,首先检测硬件电路是否完全通路,再将程序烧进单片机中,按下数字键看能否将数字显示到 1602 制定的位置上,此时还要注意密码不能超过六位数。 一般按键如 果电路正确,并且程序和硬件都无差错则在仿真中运行正确实物也可以轻松实现器功能。 3)存储器硬件调试 在本次设计中,如上述介绍为了防止掉电丢失采用 AT24c02 进行存储数据。 主要是将按键按下的值保存到存储器中,并能够从中读取。 按下解锁键, LCD1602 首行显示提示语,令一行则是显示将要输进去的密码。 此时程序中还要进行密码的对比,若正确, led 亮,说明锁已经打开。 错误,则灯灭,说明锁已经关闭。 本人在调试过程中发现输入密码时不能够正常开锁,而真正能通过的密码无从得知,若不通过存储器的读取,将初始值直接与键入值比较 ,此时密码正确。 说明存储器在读密码的时出现某些未知的错误。 经过对程序的调试,让此时存储器随机出现的密码显示到 1602 上,然后再在开锁时键入对应的密码,此时密码正确。 这说明原始设定的密码在调用的过程中被某一句程序改写。 此时再回到 PROTEUS 仿真,看下存储器接线与 PCB 是否一致,以及芯片是否安置正确。 经过检查发现电路板上放置的芯片并不是 AT24c02,更换芯片后便能够实现开锁,改密等功能。 基于 51 单片机的红外遥控密码锁 17 4)红外遥控模块 首先写一个红外遥控发送接收程序,看是否将字符正确显示到 1602 上。 参考网上给的遥控器键码值使用 swith 语句同矩阵按键扫描返回数字及调用功能函数。 经过参考网上给出的例程,加上外部中断 1 程序,使用中断,检测是否发送信号。 再将写好的程序烧到单片机中,验证通过则证明遥控器可以正确使用,再将两个程序综合到一起来实现双控。 调试结果 本次设计整体调试结果:给电路板送入 +5V 电源, 1602 第一行中间显示 wele,然后按解锁键, 1602 第一行显示 input code 此时输入密码再按确定键。 若密码正确模拟锁 led 点亮并显示 right,密码 不正确 显示 error 蜂鸣器 鸣叫 并跳转到 最初的 界面。 按 下改密按键, 1602 第一行显示 input old code,输入旧密码(密码错误则提示,并重新输入),若密码正确,画面提示 input new code,此时键入新密码(六位数),然后按确定键,画面显示 input new code again。 再一次键入设置的新密码。 若两次密码相同,则 1602 显示 plete。 然后切断电源,重新给电路板供电,再次输入密码(输入刚才设定的新密码), 1602 显示 right 并模拟锁发光二极管点亮。 然后用遥控器如上操作,同样可以进行开锁及修改密码。 6 总结与展望 确定研究课题之后,查阅相关 资料,设计相应的原理图。 由于相同功能的芯片有很多,经过对比其实用性,是否易操作,外围电路以及程序设计难易等等来选择较合理的芯片。 另外要考虑仿真与实物的不同,所以在画 PCB 板时,除了注意与仿真保持一致还要注意在实物中的效果,因此要考虑元器件封装及接入器件的电阻大小等等。 写程序时为了达到预期效果,对新接触的芯片进行研究,通过多次修改完成每个模块的运行。 最艰难的应该是对电路板的调试,虽然在仿真中效果了令人满意,但当在实物中时却达不到仿真的效果,这就要通过多次检测,从每根线的焊接到每个芯片的管脚接通情况都要一一测量。 每一次失败都会离成功又进一步。 本次 毕业设计 不仅仅是对我大学四年的检测也是对我毅力的考验,让我在一次次的打击之后变得更坚强。 致谢 从开始选定课题到现在经历了将近半年的时间,在这期间遇到一些困难想要放弃的时候室友们都会鼓励我,让我再次有了信心。 遇到不懂的问题实验室那些经验丰富的同学都会过来给予建议,感谢他们的帮助。 另外,还要感谢赵老师,总是在百忙之基于 51 单片机的红外遥控密码锁 18 余指导我,帮我解决了不少难题,让我顺利完成了设计。 参考文献 [1] 张毅刚 . 单片机原理及应用 (第二版) [M]. 北京 :高等教育出版社 , 20xx: 1642. [2] 林伸茂 . 8051 单片机彻底研究基础篇 [M]. 北京 :人民邮电出版社, 20xx:24150. [3] 麦山,皮佑国 .基于单片机的协议红外遥控系统 [J].1998. [4] 邱玉春,李文俊 .单片机系统中的红外通信接口 [J].20xx:56163. [5] 张文峥 ,李先亮 ,张其善 .IrDA 红外通信在导航仪中的应用 [J]. 20xx. [6] 康华光等 .电子技术基础第 2 版 [M].北京 :高等教育出版社, 20xx:10156. [7] 牛翌光 .单片机原理及接口技术 [M].北京 :电子工业出版社 , 20xx: 3279. 附录 1.元器件清单 元器件名称及规格 数量 51 单片机 1 晶振 12MHZ 1 瓷片电容 30PF 2 电解电容 10 uF 2 USB 1 发光二极管 2 蜂鸣器 1 三极管 PNP 1 AT24C02 1 滑动变阻器 10K 1 排阻 10K 1 电阻 1K 4 按键 17 自锁按键 1 电阻 10K 3 电阻 10 欧 1 2.源程序 include include //包含 _nop_()函数定义的头文 件 define uchar unsigned char define uint unsigned int define delayNOP()。 {_nop_()。 _nop_()。 _nop_()。 _nop_()。 }。 define dword unsigned long 基于 51 单片机的红外遥控密码锁 19 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 20xx0411 define wait_time 600 //等待 600s 后关闭显示屏,节电 uchar IRCOM[7]。 /****红外延时函数声明 *****/ void delay(uint)。 void delay1ms()。 void delay(unsigned char x)。 void display()。 void delay1(int ms)。 sbit IRIN=P3^3。 //外部中断 1 //sbit lock=P2^3。 //模拟锁 sbit buzzer=P2^4。 //蜂鸣器 void delay(unsigned char x) //x* { unsigned char i。 while(x) { for (i = 0。 i13。 i++) {} } } sbit sda=P2^6。 sbit scl=P2^5。 dword time_value=0,passwords=123456。 基于 51 单片机的红外遥控密码锁 20 bit key_flag=0,currentdisflag=1,lastdisflag=1,keystatusflag=0,dispassword_=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 }。 uchar code tab4[]={Wele 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[]={Wele... }。 uchar code tab9[]={ }。 uchar code message[16]={0123456789abcdef}。 /****************************LCD1602 驱动 **************************/ define LCD_Data P0//数据接口 sbit rs=P2^0。 //定义接口 sbit rw=P2^1。 sbit en=P2^2。 sbit led=P2^3。 void LCD_Init(void)。 void LCD_WriteData(uchar WDLCD)。 void LCD_WriteCommand(uchar WCLCD)。 void DisplayOneChar(uchar X, uchar Y, uchar DData)。 void DisplayListChar(uchar X, uchar Y, uchar code *DData)。 /******************************延时函数 ****************************/ void delay11(){。 } 基于 51 单片机的红外遥控密码锁 21 void delay2(uint t) //延时函数 ms { uint x,y。 for(x=t。 x0。 x) for(y=110。 y0。 y)。 } /****************************1602 写数据函数 **************************/ void LCD_WriteData(uchar WDLCD) { rs=1。 rw=0。 en=1。 LCD_Data=WDLCD。 delay2(1)。 en=0。 } /************************。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。