




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、- 1 - 单单 片片 机机 课课 程程 设设 计计 报报 告告 课题名称:基于单片机的电子密码锁 学 校: 系 别:机械电子工程系 专 业:应用电子技术 姓 名: 学 号: 指导教师: - 2 - 目录目录 一一 设计总说明设计总说明.- 3 - 二二 电子密码锁的系统设计电子密码锁的系统设计.- 4 - 2.12.1 设计方案论证与比较设计方案论证与比较.- 4 - 2.22.2 电子密码锁总体设计电子密码锁总体设计.- 4 - 三三 硬件电路设计硬件电路设计.- 5 - 3.13.1 单片机单片机 at89c51at89c51 简介简介.- 5 - 3.23.2 4444 矩阵键盘矩阵键
2、盘 .- 5 - 3.33.3 震荡电路震荡电路 .- 6 - 3.43.4 外部存储器电路外部存储器电路 .- 6 - 3.53.5 1602lcd1602lcd 液晶显示液晶显示 .- 7 - 3.63.6 ledled 及蜂鸣器及蜂鸣器 .- 7 - 3.73.7 完整电路图及元器件清单完整电路图及元器件清单.- 8 - 四四 软件程序设计软件程序设计.- 9 - 4.14.1 程序设计流程图程序设计流程图.- 9 - 4.24.2 电子密码锁源程序电子密码锁源程序 .- 10 - 五五 仿真调试仿真调试.- 15 - 5.15.1 使用使用 k keileil生成生成hexhex文件文
3、件.- 15 - 5.25.2 使用使用 p proteusroteus仿真过程仿真过程.- 16 - 六六 总结与体会总结与体会.- 19 - 七七 参考文献及参考文献及 pcbpcb 封装图封装图.- 19 - 7.17.1 参考文献参考文献 .- 19 - 7.27.2 pcbpcb 封装图封装图 .- 20 - - 3 - 一 设计总说明 在日常的生活和工作中, 住宅与部门的安全防范、单位的文件档案、财务报表以及一 些个人资料的保存多以加锁的办法来解决。若使用传统的机械式钥匙开锁,人们常需携带 多把钥匙, 使用极不方便, 且钥匙丢失后安全性即大打折扣。随着科学技术的不断发展, 人们对日
4、常生活中的安全保险器件的要求越来越高。为满足人们对锁的使用要求,增加其 安全性,用密码代替钥匙的密码锁应运而生。密码锁具有安全性高、成本低、功耗低、易 操作等优点。 在安全技术防范领域,具有防盗报警功能的电子密码锁逐渐代替传统的机械式密码锁, 克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上 都大大提高一步。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处 理器的智能密码锁,它除具有电子密码锁的功能外,还引入了智能化管理、专家分析系统 等功能,从而使密码锁具有很高的安全性、可靠性,应用日益广泛。 基于以上思路,本次设计使用 atmel 公司的 at8
5、9c51 实现一基于单片机的电子密码锁 的设计,其主要具有如下功能: (1)设置 6 位密码,密码通过键盘输入,按键确实按下,发出提示音。若密码正确, 则将锁打开。 (2)密码可以由用户自己修改设定(只支持 6 位密码) ,锁打开后才能修改密码。 (3)断电后密码可保存。 电子密码锁的设计主要由三部分组成:44 矩阵键盘接口电路、密码锁的控制电路、 密码存储电路、输出显示电路。另外系统还有 led 提示灯,蜂鸣器等。 密码锁设计的关键问题是实现密码的输入、清除、更改、开锁等功能: (1)密码输入功能:按下一个数字键,依次输入密码。 (2)密码清除功能:当按下清除键时,清除前面输入的所有值,并清
6、除所有显示。 (3)密码更改功能:将输入的值作为新的密码并保存。 (4)开锁功能:当按下开锁键,系统将输入与密码进行检查核对,如果正确锁打 开,否则不打开。 主要的设计实施过程:首先,选用 atmel 公司的单片机 at89c51,以及选购其他电子 元器件。第二步,使用 proteus pro7.7 设计硬件电路原理图,并设计 pcb 图完成布线。第 三步,使用 keil uvision3 软件编写单片机的 c 语言程序、仿真、软件调试。第四部,使 用 proteus 软件进行模拟软、硬件调试,完成本次课程设计。 - 4 - 摘要(关键词):电子密码锁 at89c51 44 矩阵键盘 密码输入
7、与修改 二 电子密码锁的系统设计 2.12.1 设计方案论证与比较设计方案论证与比较 方案一:卡片式电子密码锁。卡片式电子密码锁,它利用光电耦合的方式,将密码信息 从打孔的形式做在卡片上 ,只要将卡片插入锁内,就能将锁打开。如果卡片上密码信息不 对,密码锁发出报警声。这种方法是需要卡片做为钥匙,容易被盗和被仿制,安全性不高。 方案二:磁卡式电子密码锁,具有功能强、故障率低、可靠性高和工作寿命长等优点, 但这种方法的缺点是磁卡容易消磁,对用户造成不必要的麻烦。 方案三:用at89c51设计的多功能密码锁。以单片机作为微控制器,可以实现基于以上 优点,本系统选用该方案作为设计方案。按键有效指示、输
8、入错误、控制开锁、错误报警、 密码修改等功能,工作稳定可靠,保密性高,实用性强。 2.22.2电子密码锁总体设计电子密码锁总体设计 51 单片机 44 键盘 lcd 外部存储器 扬声器 晶振电路 发光二极管 等 图 2-1 系统原理框图 - 5 - 三 硬件电路设计 3.13.1 单片机单片机 at89c51at89c51 简介简介 at89c51 是美国 atmel 公司生产的低电压,高性能 cmos 8 位单片机,片内含 4k bytes 的可反复擦写的只读程序存储器(eprom)和 128bytes 的随机存取数据序存器(ram) ,器 件采用 atmel 公司的高密度/非易失性存储技术
9、生产,兼容标准 mcs-51 指令系统,片内置 通用 8 位中央处理器(cpu)和 flash 存储单元,at89c51 单片机为许多嵌入式控制系统提 供了一种灵活行高且价廉的方案。 主要特性: 与 mcs-51 兼容 4k 字节可编程 flash 存储器(寿命:1000 写/ 擦循环) 全静态工作:0hz-24khz 三级程序存储器保密锁定 128*8 位内部 ram 32 条可编程 i/o 线 两个 16 位定时器/计数器 5 个中断源 可编程串行通道 低功耗的闲置和掉电模式 片内振荡器和时钟电路 图 3-1 at89c51 引脚 图 3.23.2 4444 矩阵键盘矩阵键盘 如图 3-2
10、 所示,本系统采用 44 矩阵键盘,16 个按键分为输入数字键: 0、1、2、3、4、5、6、7、8、9;功能键确定、上锁、修改密码、保存密码、clr。 - 6 - 图 图图 3-2 44 矩阵键盘 3.33.3 震荡电路震荡电路 c1 30pf c2 30pf x1 图 3-3 振荡电路 本设计晶振选择频率为 12mhz,电容选择 30pf 如图 3-3。 经计算得单片机工作机器周期为: 12(112m)=1us。 - 7 - 3.43.4 外部存储器电路外部存储器电路 为了保证用户密码在系统掉电时不会丢失,本系统采用 at24c04 的 eeprom 存储器来存 储用户密码。电擦除可编程只
11、读存储器 eeprom(electrically erasable prom)是近年来开 始被广泛使用的一种只读存储器,它能在应用系统中进行在线改写,并能在掉电的情况下 保存数据而不需保证电源,因而完全符合系统的设计要求。虽然 eeprom 的擦除时间较长, 但这不影响整个系统的功能。在本系统,用户设定的密码就存于 eeprom at24c04 中。 at24c04 与单片机之间采用 i2c 总线通讯方式。 图 3-4 24c04a 外部存储器 3.53.5 1602lcd1602lcd 液晶显示液晶显示 图 3-5 lcd 液晶显示 主要技术参数 显示容量芯片工作电压工作电流最佳工作电压字符
12、尺寸 - 8 - 162 个字符4.55.5v2.0ma(5.0v)5.0v3.954.35mm 3.63.6 ledled 及蜂鸣器及蜂鸣器 图 3-6 led 开锁提示 如图,led 模拟锁的开关状态。若 led 亮,表示密码正确,开锁。 图 3-7 蜂鸣器 按键按下,密码锁打开等动作实现时发出提示音。 3.73.7 完整电路图及元器件清单完整电路图及元器件清单 - 9 - 开始 输入密码 正确否? 开锁 判断按键 上锁键 修改密码键 上锁 结束 输入新密码 修改密码 yes no 图 3-8 仿真电路图 元器件规格/型号数量 单片机at89c511 存储器24c04a1 lcdlm016
13、l1 晶振crystal1 瓷片电容cap2 电解电容cap-elec 电阻res2 电阻排respack-81 发光二级管led-yellow1 蜂鸣器sounder1 按钮button16 表 3-9 元件清单 四 软件程序设计 程序主要完成:开始时 lcd 显示“your password”提示输入密码,输入密码后按下确 认键,系统会将所输入与系统密码进行比对。若输入密码正确则显示“unlock ok”开锁, 然后可以选择上锁或者修改密码,如果密码错误则显示“error” 。开锁后,按下上锁键, 系统上锁并返回,选择修改密码则可以对系统进行修改密码操作。 4.14.1 程序设计流程图程序
14、设计流程图 - 10 - 图 4-1 程序设计流程图 4.24.2 电子密码锁源程序电子密码锁源程序 /-main.c- /名称:电子密码锁 /- / / 当输入 0-9 中的数字时可以输入密码,不超过 6 位,输入完成后按下 a / 键开锁,密码正确时 led 点亮,液晶屏显示开锁成功。 / 其他键功能是:b 上锁 c 重新输入密码 d 保存新密码 e 清除。 / 重设密码时要求先输入正确的密码成功开锁。 /- #include #include #include #define uchar unsigned char #define uint unsigned int #define de
15、lay4us(); /上次按键和当前按键序号,该矩阵中序号范围为 0-15,16 表示无按键 uchar pre_keyno = 16, keyno = 16; uchar code title_text = your password.;/标题字符串 uchar dsy_buffer10 = ;/显示缓冲 uchar userpassword10 = ;/用户输入的密码 void lcd_init();/液晶初始化 void display_string(uchar * str, uchar lineno);/在液晶指定行显示字符串 void iic_24c04_init();/iic 初始
16、化 - 11 - void beep();/蜂鸣器 uchar recstring (uchar slave,uchar subaddr,uchar *buffer,uchar n);/从 iic 读取 数据 uchar sendstring (uchar slave,uchar subaddr,uchar *buffer,uchar n);/向 iic 写入 数据 uchar keys_scan();/键盘扫描,返回键盘号 0-15 sbit led_open =p27;/开锁亮灯 sbit beep =p37;/蜂鸣器 /- / 延时 /- void delayms(uint x) uch
17、ar i; while (x-) for (i = 0;i 120; i+); /- / 蜂鸣器子程序 /- void beep() uchar i; for (i = 0;i 100; i+) delayms(1); beep = beep; beep=0; /- / 清除密码 /- void clear_password() userpassword0 = 0; dsy_buffer0 = 0; /- / 主程序 /- void main() uchar i = 0; uchar iic_password10; uchar is_valid_user = 0; p0 = 0 xff; p1
18、 = 0 xff; p2 = 0 xff; tmod = 0 x02; /t0 设置为 8 位自动重装模式 th0 = 175; tl0 = 175; tr0 = 1; /启动 t0 delayms(10); lcd_init(); /初始化 lcd - 12 - iic_24c04_init(); /初始化 24c04 display_string(title_text,0 x00); /在第 1 行显示标题 recstring(0 xa0, 0 , iic_password, 6); iic_password6 = 0; while(1) p1 = 0 xf0; if(p1 != 0 xf
19、0) keyno = keys_scan(); /扫描键盘获取键序号 keyno switch ( keyno ) case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: if ( i= 5 ) /密码限制在 6 位以内 /如果 i 为 0 则执行一次清屏 if (i =0) display_string( ,0 x40); userpasswordi = keyno + 0; userpasswordi+1 = 0; dsy_bufferi = *; dsy_bufferi+1 = 0;
20、display_string(dsy_buffer,0 x40); i+; break; case 10: /按 a 键开锁 if (strcmp(userpassword,iic_password) = 0) led_open = 0; /点亮 led clear_password(); display_string(unlock ok! ,0 x40); is_valid_user = 1; else led_open =1; /关闭 led clear_password(); display_string(error ! ,0 x40); is_valid_user = 0; i = 0
21、; break; case 11: /按 b 键上锁 led_open =1; clear_password(); display_string(title_text,0 x00); - 13 - display_string( ,0 x40); i = 0; is_valid_user = 0; break; case 12: /按 c 键设置新密码 /如果是合法用户则提示输入新密码 if ( !is_valid_user ) display_string(no rights !,0 x40); else i = 0; display_string(new password: ,0 x00)
22、; display_string( ,0 x40); break; case 13: /按 d 键保存新密码 if ( !is_valid_user ) display_string(no rights !,0 x40); else sendstring(0 xa0, 0 , userpassword, 6); /重新读入刚写的密码 recstring(0 xa0, 0 , iic_password, 6); iic_password6 = 0; i = 0; display_string(title_text,0 x00); display_string(password saved! ,0
23、 x40); break; case 14: /按 e 键消除所有输入 i = 0; clear_password(); display_string( ,0 x40); beep(); delayms(100); p1= 0 xf0; while (p1 != 0 xf0); /如果有键未释放则等待 while (p1 = 0 xf0); /如果没有再次按下按键则等待 /- 24c04.c - / 24c04 iic 读/写程序 /- sbit scl = p32;/串行时钟 sbit sda = p33;/串行数据 /- / 起始位 /- void start() - 14 - sda =
24、 1; scl = 1; delay4us(); sda = 0; delay4us(); scl = 0; /- / 停止位 /- void stop() sda = 0; scl = 1; delay4us(); sda = 1; delay4us(); scl = 0; /- / iic 总线初始化 /- void ack() sda = 0; scl = 1; delay4us(); scl = 0; sda =1; /- / 发送非应答信号 /- void no_ack() sda = 1; scl =1; delay4us(); scl = 0; sda = 0; /- / 从芯片
25、读取 1 字节 /- uchar recbyte() uchar i,rd; rd = 0 x00; sda = 1;/置数据线为输入方式 for(i = 0;i 8; i+) scl = 1; rd = 1; rd|=sda; delay4us();scl = 0; delay4us(); scl = 0; - 15 - delay4us(); return rd; /- / 向芯片发送 1 字节 /- uchar sendbyte(uchar wd) uchar i; bit ack0; for(i = 0;i 8;i+)/循环移入 8 位 sda = (bit)(wd _nop_();
26、_nop_(); scl = 1; delay4us(); scl = 0 ;wd = 1; delay4us(); sda = 1;/释放总线并准备读取应答 scl = 1; delay4us(); ack0 = !sda;/0 表示无应答 scl = 0; delay4us(); return ack0;/返回应答 /- / 发送多字节数据函数 /- uchar sendstring(uchar slave,uchar subaddr,uchar *buffer,uchar n) uchar i; start(); if (!sendbyte(slave)return 0;/器件地址 if
27、 (!sendbyte(subaddr) return 0;/器件子地址 start(); if (!sendbyte(slave + 1) return 0; /器件地址,读操作 for (i = 0; i 4 0 x0f; /对 0-3 行分别附加起始值 0,4,8,12 switch (tmp) case 1: keyno += 0; break; case 2: keyno += 4; break; case 4: keyno += 8; break; case 8: keyno += 12; return keyno; 五 仿真调试 5.15.1 使用使用 keilkeil 生成生成
28、 hexhex 文件文件 将上述代码经 keil 生成 hex 文件以便 proteus 仿真。keil 界面如下图: 图 5-1 keil 的使用 5.25.2 使用使用 proteusproteus 仿真过程仿真过程 - 17 - 使用 proteus 绘制原理图,然后将上一步 keil 生成的 hex 程序文件载入到单片机中, 点击运行,过程大致如下: 1.初始界面:lcd 显示“your password.”,提示输入密码,如下图: 图 5-2 初始界面 2.密码输入: 输入密码,按确定键,如果正确,显示“unlock ok!”并解锁。 图 5-3 密码正确 图 5-4 灯亮开锁 输入密码,按确定键,如果错误,则显示“error!”,不解锁。 - 18 - 图 5-5 密码错误 图 5-6 锁未开 3.密码修改及保存: 在密码输入正确,锁打开的情况下,按“修改密码”键,进入密码修改界面: 图 5-7 输入新密码 - 19 - 输入新密码后,按“保存密码”键,保存新密码: 图 5-8 保存密码 六 总结与体会 通过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 青少年健康生活习惯的新媒体引导策略
- 防骗指南保护个人信息安全
- 零售业大数据分析消费者行为与购物习惯
- 隐私保护策略为数据安全护航
- 银行系统数据安全审计及风险管理
- 防火材料与技术应用
- 防御技巧解析如何在遭遇危险时有效保护自己
- 金融领域的数据建模实践与思考
- 金融风险管理中的人工智能与数据科学整合
- 金融行业中的数据分析工具与技能
- GB 35181-2025重大火灾隐患判定规则
- 青科综评面试真题及答案
- 中国科学院大学《高级人工智能》2023-2024学年第一学期期末试卷
- 华南理工大学自主招生综合素质评价面试及试题指导
- 深圳市视频门禁报警系统联网数据规范
- 急性上消化道出血课件
- 不饱和聚酯树脂化学品安全技术说明书MSDS
- 《白内障》PPT课件.ppt
- 气田磨溪区块外围地区龙王庙组储层特征描述
- (最新整理)模板-消防安全评估质量过程控制体系(山东)
- 圆管切割机机构设计
评论
0/150
提交评论