基于51单片机的密码锁

基于51单片机的密码锁##

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

  • 5
    点赞
  • 2
    评论
  • 15
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

评论 2 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

lsAmorFati

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值