基于51单片机的密码锁

来源:互联网 发布:没离开过高音数据 编辑:程序博客网 时间:2024/05/01 04:39

基于51单片机的密码锁

整体
功能:无输入时显示日历,温度,可进行调时设定,密码输入功能
器件:51单片机系统版,ds1302时钟模块,4*4矩阵键盘,ds18b20温度传感器,12864液晶显示屏。
这个设计构想其实老早就有了,由于快接近期末考试所以一直在构想中,等到考试完准备利用暑假的时候实现它。
考试结束就去某宝购买器件,为了锻炼自己的焊接水平买了系统版的散件自己去焊接(这个系统板的功能很强几乎可以当开发板用了),又买了一些配件耗材。过了几天等到寝室的人回家后有了空闲的地方就开始实现目标了。
前一天就把系统版焊接了一下,焊到最后发现1k的上拉电阻不知道什么时候段为两半了,看了看原理图发现它就影响了几个二极管不影响其他的工作于是就没有焊接。
焊接完后当然要测试了,插上isp线电源灯亮了,不错下个蜂鸣器程序看看,结果毫无反应,当时心里就想做事情不可能一帆风顺肯定会出问题,于是看了看开发板发现晶振没插。的确晶振没插要是会响就坏了。
第二天自己动手焊接了4*4键盘,没什么问题一次通过。
接下来就要最难的也是最重要的程序编写了。由于一开始写过时钟程序在1602上仿真所以按照以前的程序改了改在12864上成功显示出来了。
时钟程序过后就要设计密码程序了,我就单独的写了一个密码程序但是写的过程中发现这才是最难的,有些看似很简单的操作其实程序上并不一定简单,有些逻辑现在想想很是巧妙。比如按下一个按键要显示其对应的数字并且让系统知道这是第几位密码并且不影响下一次的操作,当时很想不通怎样设计但是现在看看的确是一个很简单的东西。
到密码程序写完之后就要进行综合了这一部分的主函数设计当时也遇到了许多瓶颈就是当时钟显示的时候按下密码输入按键屏幕刷新进入密码输入界面但是时间还是会显示在屏幕上影响操作,看了看主函数后发现如果时间和密码函数在同一个循环里对ds1302的读写操作会始终存在造成上述现象,所以要把两个程序分开于是设计了一个标志位flag和一个if语句进行分割。
由于用了模块化编程所以文件之间的连接存在许多错误经过不断地调时程序错误和警告逐渐的由十多个变为0个并能按预期的设想进行操作而且还偶然的解决了一个百思不得其解的现象(温度传感器是从以前的程序上参考过来的在原来的程序上能够以0.1的刻度变换但在这上面只能按0.5的刻度去变化,由于程序相同但出现了不同的结果所以感到很困惑一直以为是硬件电路的不同照成的。到最后发现传感器的初始化函数忘了加在新的程序里了由于软件只是进行了警告并没有报错并且当时警告我并没有去修改)。
最后享受成果的同时我算了一下代码将近1000行了。肯定的里面有些代码是不合理的有些是多余的有些事无用的但是我相信自己的努力是没有白费的。程序

0 0
原创粉丝点击