ImageVerifierCode 换一换
格式:DOCX , 页数:36 ,大小:242.48KB ,
资源ID:7103454      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7103454.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机C语言程序设计课程设计密码锁.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机C语言程序设计课程设计密码锁.docx

1、单片机单片机 C 语言程序设计课程设计密码锁语言程序设计课程设计密码锁 单片机 C 语言程序设计课程设计密码锁 课程设计(论文)任务书 课程设计(论文)题目:单片机 C 语言程序设计课程设计 基本内容:利用实验室提供的实验仪器,自行选题设计一套硬件系统;采用单片机 C 语言编写程序,使之成为完整的设备。课程设计(论文)专题部分:题目:电子密码锁 基本内容:利用实验板上的 LCD显示屏、24C02 及 8279等资源设计电子密码锁系统,要求实现输入正确开锁,错误警告等相关功能。学生接受课程设计(论文)题目日期 第 20 周 指导教师签字:2013 年 7 月 18日 摘要 传统密码锁由于外形单一

2、并容易人为损坏,以无法满足人们对安全日益增长的需求。而电子密码锁因其具有使用方便,可靠性强,成本低廉,正逐步代替传统密码锁,被广泛应用于安全领域。本文设计了一种智能电子式密码锁,它以单片机为控制核心,配合输入模块,显示模块及报警模块共同完成了密码服务。控制部分使用 AT89C51 单片机,其价格低廉,功耗较低,配有足够的内部资源来完成电子密码锁的核心控制。使用 Intel公司的8279 芯片,管理 4*4 键盘,作为密码输入及功能选择的输入模块。显示模块利用RT12864LCD 显示器,以更加友好的界面完成人机交互。而报警模块利用 led等及蜂鸣器提示密码输入情况,并完成危机报警功能。电子密码

3、锁功能丰富,正确输入密码时,可进入欢迎界面,进行功能选择,如修改密码服务,可对原始通用密码进行修改,修改过程中需二次确认密码,两次输入相同才可修改成功,防止了因用户手误造成无法再次进入系统。退出功能保证用户在特殊情况下一键加锁,防止信息泄露。密码锁还配有三次报警功能和超时报警功能,当三次输入错误或第一次输入错误后,5s 内无法进入系统,密码锁将进入自锁状态,防止他人暴力破解密码。关键词:电子密码锁,单片机,24C02,LCD,RT12864Hz;第 1章 绪论 1 1.1设计目的 1 1.2 设计意义 1 1.3 设计要求 1 第 2章 总体设计方案 2 2.1设计思路 2 2.2系统设计总框

4、图 2 第 3章 硬件电路设计及简要描述 4 3.1 硬件设计原理图 4 3.2 内部资源的使用 4 3.3 单片机外围电路 5 3.3.1 复位电路的设计 5 3.3.2 时钟发生电路设计 6 3.4 密码锁控制电路 6 3.4.1 键盘管理芯片 8279 6 3.4.2 LCD显示电路 8 3.4.3 密码存储电路 9 3.4.4 蜂鸣报警电路 9 3.4 元件清单 10 第 4章 软件程序设计 11 4.1 程序流程图 11 4.2 系统初始化 12 4.3 按键识别设计 12 4.4 5s 定时设计 13 4.5 密码修改设计 14 参考文献 16 附录 电子密码锁系统程序源代码 17

5、 设计心得体会 32 第 1章 绪论 1.1设计目的(1)软件及硬件上进一步了解单片机的原理;(2)掌握、运用 C51 语言编程,提升 C51 编程能力;(3)熟练掌握 RT12864 液晶显示模块和 8279 键盘操作管理芯片;(4)熟悉 24C02 掉电存储功能。1.2 设计意义(1)深入了解了单片机 C51 语言的实际应用;(2)通过独立思考,独立操作切实提高自己的编程能力;(3)增强团队合作意识;(4)运用所学知识发现问题、分析问题、解决问题;1.3 设计要求 根据实验室提供的实验箱、计算机等设备由我们自行设计了电子密码锁系统,实现如下要求:基本要求:采用 24C02 或 IC 卡,设

6、置 6位密码,最多比较 3次,利用 LED灯显示密码输入正确与否。(1)利用 24C02 或 IC 卡,设置 6 位密码;(2)当密码输入正确后的密码后开锁,用红灯亮绿灯灭表示关锁,绿灯亮红灯灭表示开锁;(3)密码最多可以试输入三次,如果三次输入错误,红灯闪烁,并发报警警报。附加要求:第一次输入密码与开锁的时间超过 5s,红灯闪烁,并发报警警报。第 2章 总体设计方案 2.1设计思路 本设计主要由单片机、4*4键盘、LCD液晶显示屏和密码存储等部分组成。其中键盘用于输入数字密码和进行各种功能的实现。用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与之前保存的密码进行对比,从而

7、判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者蜂鸣报警电路。2.2系统设计总框图 图 2.1 系统设计总框图 各模块功能如下 1、键盘输入控制模块:采用 8279管理键盘输入,有效节省了 I/O 口的资源。4*4键盘上的键分别用于密码输入和其他功能调用;2、密码存储模块:芯片 24C02 用于完成密码的掉电存储,使密码断电后得以保存;3、LCD液晶显示模块:采用芯片 RT12864Hz 实现液晶显示功能,用于实现友好的人机交互界面,提高了可读性,使用户对密码锁的运行情况一目了然;4、蜂鸣报警电路模块:通过 LED灯和压电蜂鸣器,对输错密码和输入超时实行报警;5、复位电路:完成系统的复

8、位;6、时钟电路:用于单片机的起振;7、内部定时模块:利用内部定时器 T0完成设计的附加要求。第 3章 硬件电路设计及简要描述 3.1 硬件设计原理图 硬件设计原理图如图 3.1:图 3.1 硬件设计原理图 3.2 内部资源的使用 此设计中我们使用了单片机内部定时计数器 T0提供计时功能,判断密码输入是否超时,如果超时,系统将锁死。8279的 IRQ端经反向器与 89C51 的外部中断 INT0 相连接,判断是否有按键按下,如果有按键按下,则处理器去执行相应的操作。P1的 P1.2 和 P1.3 用于模拟 24C02 的双线通讯接口,P1.0 和 P1.1 连接红绿指示灯,通过控制其亮灭及闪烁

9、状态,辅助显示密码输入情况。P1.4 连接蜂鸣器,用于密码锁锁死时的报警功能。3.3 单片机外围电路 3.3.1 复位电路的设计 复位是单片机的初始化操作。单片机启动运行时,都需要先复位,起作用是使CPU 和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。但是单片机本身不能自动进行复位,必须配合外部电路才能实现。该复位电路采用按键电平复位电路,当单片机在运行中,按下复位键 S0后松开,在 RST 引脚持续出现 24个振荡周期的高电平信号使单片机复位,实现上电开关复位的操作。如图 3.2 所示 图 3.2 复位电路图 3.3.2 时钟发生电路设计 时钟电路为单片机产生时序脉冲,单片机

10、所有运算与控制过程都是在同一的时序脉冲驱动下进行的,当采用内部时钟时,连接方法如图 3.3 所示,在晶振引脚XTAL1(19脚)和 XTAL2(18 脚)之间接一个 6MHZ晶振,两个引脚对地分别再接入一个电容即可产生所需的时钟信号,电容我们选取 30pF。图 3.3 时钟发生电路图 3.4 密码锁控制电路 3.4.1 键盘管理芯片 8279 为了节省 I/O口资源,我们没有使用传统的行扫描法管理键盘,而选择了 8279控制芯片,由 8279读入键盘键值,用键值来控制程序的执行。8279芯片是一种通用的可编程键盘、显示接口器件,能完成对 64位按键和 16位 LED显示器的管理1,但本次设计中

11、没有使用 LED 功能。8279有多种功能和多种工作模式,其功能和模式靠设定命令字来确定。8279的命令字近 10 种,在使用 8279 之前,借鉴了实验的相关程序23,本文设计中的接线是:IRQ接 INT0,采用中断方式,ALE 接 CLK。图 3.4 键盘管理电路图 8279各端口地址分配如下:按键的操作面板如图 3.5所示,共计 10个数字键和 6个功能键。图 3.5 密码锁操作面板 【0】【9】10 个数字键用来输入密码,另外 6个功能键分别是:【A】设置新密码键、【C】清零键、【E】确定键和【F】退出键。其中清零键的功能是清除当前输入的密码后重新输入。确认键的功能是确认当前输入的密码

12、。设置新密码键的功能是当密码输入正确时,可以重新修改密码。退出键的功能是退出到密码输入界面。表 3.1 按键功能表 按键 键名 功能说明 09 数字键 输入密码 A 设置新密码键 选择重置密码 C 清零键 密码清零 E 确认键 确认 F 退出键 退出 3.4.2 LCD显示电路 由 RT12864Hz,按键和保护电阻组成的外部扩展电路。其工作过程是通过单片机P3.6/WR 和 P3.7/RD接于 RT12864,采用并行数据通讯模式。图 3.6 液晶显示电路图 LCD显示器各端口地址分配如下:图 3.7 LCD显示器各端口地址分配 3.4.3 密码存储电路 因为考虑到密码锁的实际应用,要求掉电

13、时密码不会丢失,所以密码不储存在单片机的 RAM里,而是储存在外面扩展的 EEPROM 里,因此本文选用 AT24C02 芯片单片机通过串口通信。AT24C02 是 ATMEL公司生产的 I2C 串行 EEPROM 芯片45,存储量为 256字节。AT24C02 的操作时序符合标准的 I2C 规范。通过 SCLK(时钟线)和 SDA(数据线)两线分别与 89C51 的 P1.2 和 P1.3 相连,对芯片进行读写操作。SCLK为时号,SDA 传送双向数据信号。图 3.8 掉电存储电路图 3.4.4 蜂鸣报警电路 按照题目的要求,当连续三次密码输入错误时,系统蜂鸣报警,我们采用实验板上的压电式蜂

14、鸣器,当 P1.4 输出低电平时,三极管导通,蜂鸣器发音。图 3.9 蜂鸣报警电路图 3.5 元件清单 本次设计所用元件见表 3.2 表 3.2 元件清单 器件名称 数量 89C51 1个 8279 1个 6MHz 晶振 1个 RT12864Hz 1个 74ALS138 1个 74LS245 1个 74LS573 1个 74LS00 1个 74LS08 1个 AT24C02 1个 电阻 若干 按键 18个 第 4章 软件程序设计 4.1 程序流程图 根据设计要求,我们设计了如下的流程图,满足用户在任何时刻按下任何键均有反应。图 4.1 主程序流程图 说明:以上流程图仅显示了该密码锁的主要功能,

15、一些具体功能的实现在后文子程序中将做具体讲解。4.2 系统初始化 系统的初始化包括如下方面:1、8279的扫描模式为编码扫描;2、内部定时/计数器 T0的设定;3、液晶显示屏模式的设定。4.3 按键识别设计 在系统初始化并读取密码完成后,液晶显示界面 1“状态:closed任意键输入密码”,提示用户可以输入密码。此时程序即不断的扫描按键,检查是否有任意键被按下。如果有,则开始输入密码,此时液晶屏显示界面 2“密码:”在输入密码的时候,难免有输入错误的时候,我们特此设计了清零键,当输入密码时,检测到清零键的按下,我们将清除所有输入的密码,然后重新进入界面 2 重新输入密码,在六位密码输入结束后,

16、我们也设计了确定键,当检测到确定键按下时,开始密码比较。具体的流程图如 4.2所示 图 4.2 按键识别流程图 图 4.3 界面 1 图 4.4 界面 2 4.4 5s 定时设计 根据该设计的附加要求“第一次输入密码与开锁的时间超过 5s,红灯闪烁,并发报警警报”。我组对此的理解是在密码输入错误之后,重新输入密码到开锁的时间不超过 5s。利用 89C51 内部的定时器 T0,用中断方式进行管理,初值在系统初始化时已经设置好,采用定时器方式 1,每次定时 25ms,设置变量 time,每次定时中断,time自加,当第一次密码输入错误后,便打开定时器中断,只有在 5s 内开锁成功,中断才关闭,否则

17、将红灯闪烁并蜂鸣报警,显示为界面 3。图 4.5 界面 3 4.5 密码修改设计 为了丰富电子密码锁的功能,我们在完成设计的基本要求之外,额外增添了密码修改功能。即当用户密码输入正确后,可以进入界面 4功能选择模块,按下 A键便可修改密码,此时显示界面 5“新密码:”输入 6位密码后按确定键,这时显示界面6“再次输入:”,需要再次输入密码进行确认,若两次输入密码一致,则显示“Succeeded”新密码便改好了,若前后两次输入不一致,则显示“Type Error”,然后返回到功能选择界面 4。图 4.6 界面 4 图 4.7 界面 5 图 4.8 界面 6 图 4.9界面 7 参考文献 1.In

18、tel 8279 date sheet 2.张志,高大志,杨为民等微控制器原理及接口技术实验教程M沈阳:东北大学出版社,2004 3.闻绍飞C51 单片机实验指导书M沈阳:东北大学出版社,2000 4.马忠梅,籍顺心单片机的 C 语言应用程序设计M北京:北京航空航天大学出版社,2005 5.李朝青单片机原理及接口技术M北京:北京航空航天大学出版社,2008 附录 电子密码锁系统程序源代码#include#include#include /*Ports*/#define c8279 XBYTE0 x2021 /8279 命令端口#define d8279 XBYTE0 x2020 /8279 数

19、据端口#define wc_ad XBYTE0 x2070 /lcd 写命令端口#define wd_ad XBYTE0 x2071 /lcd 写数据端口#define rs_ad XBYTE0 x2072 /lcd 读状态端口#define rd_ad XBYTE0 x2073 /lcd 读数据端口/*Variable Statement*/sbit g_led=P10;/绿灯 sbit r_led=P11;/红灯 sbit SCL=P12;/24c02 时钟线 sbit SDA=P13;/24c02 数据线 sbit alm=P14;/蜂鸣报警 unsigned char bdata fl

20、ag=0 xff;/标志位变量 sbit key_flag=flag7;/按键标志 sbit enter_flag=flag6;/enter 键标志 sbit perr_flag=flag5;/密码错误标志 sbit terr_flag=flag2;/输入错误标志 sbit clr_flag=flag4;/清除标志 sbit re_flag=flag3;/返回退出标志 unsigned char xdata psave6;/存储的密码数组 unsigned char xdata pinput6;/输入的密码数组 unsigned char err_num=0;/密码输入错误次数 signed

21、char p_num=0;/密码位数 unsigned char err;/密码比较差值 unsigned char bdata status;/lcd 状态 sbit busy=status7;/lcd 忙状态 bdata char com_data;/24c02 读写数据 sbit h_bit=com_data7;/24c02 读写数据高位 sbit l_bit=com_data0;/24c02 读写数据地位 unsigned char com;/8279 读入键值 unsigned int time=0;/定时器中断计数/*Function Statement*/void ini_int

22、(void);void ini_8279(void);void Ini_all(void);void dis_1st(void);void c_start(void);void c_stop(void);void ack(void);void s_move(char a);void delay(int time);unsigned char rd_24c02(char a);void wr_24c02(char a,char b);void lcd_busy(void);void ini_lcd(void);void pos(unsigned char x,unsigned char y);v

23、oid dis(unsigned char x,unsigned char y,unsigned char*s);void clr(void);void p_err(void);void dis_enter(void);void p_rst(void);void tm_err(void);void read_key(unsigned char*sr,unsigned char x,unsigned char y,unsigned char*s,unsigned char pos);void p_cmpr(unsigned char*pw1,unsigned char*pw2,unsigned

24、char flag);void int0(void)interrupt 0 using 1 c8279=0 x50;/读取 FIFI Ram 命令 com=d8279&0 x0f;/读取键值 if(com=0 x0e)enter_flag=0;/读入的是 enter键 if(com=0 x0c)clr_flag=0;/读入的是清除键 key_flag=0;void intT0(void)interrupt 1 using 2 TH0=(65536-50000)/256;TL0=(65536-50000)/256;/定时初值,100ms time+;/定时中断计数 if(time=100)/计数

25、 100次,到达 10s ET0=0;tm_err();/*Interrupt Enable*内部资源初始化程序*/void ini_int(void)EA=1;EX0=1;ET0=1;/开中断 TMOD=0 x01;/定时器模式 TH0=(65536-50000)/256;TL0=(65536-50000)/256;/定时器初值 PT0=1;/中断优先级,T0最高 /*All Initializing*整体初始化程序*/void Ini_all(void)clr();ini_lcd();/lcd初始化 ini_8279();/8279 初始化 ini_int();/内部资源初始化 key_f

26、lag=1;/按键标志位初始化 /*Menu 1 Display*显示初始界面*/void dis_1st(void)dis(0,1,状态:closed);/调用字符串显示程序 dis(0,2,任意键输入密码);/*Name Display*显示姓名*/void dis_name(void)dis(0,1,);/调用字符串显示程序 dis(0,2,,);/*8279 Initializing*8279初始化*/void ini_8279(void)c8279=0 x00;/编码扫描方式 /*24C02 Start*24C02 启动程序*/void c_start(void)SCL=0;_nop

27、_();SDA=1;_nop_();SCL=1;_nop_();SDA=0;_nop_();SCL=0;_nop_();/两线产生下降沿 /*24C02 Stop*24c02停止程序 */void c_stop()SCL=0;_nop_();SDA=0;_nop_();SCL=1;_nop_();SDA=1;/两线产生上升沿 _nop_();SCL=0;_nop_();/*Respond Function*24c02应答等待程序*/void ack()while(SDA);/等待 24c02 应答 SCL=0;_nop_();/*Data Shift Function*24c02串行输出移位程

28、序*a:移位写入的字符*/void s_move(char a)data unsigned char i;com_data=a;for(i=0;i8;i+)/8 位逐位写入 SCL=0;SDA=h_bit;SCL=1;com_data=com_data*2;/左移一位 SCL=0;_nop_();SCL=1;_nop_();/上升沿 /*Delay Function*延迟程序 */void delay(unsigned int time)int i;for(i=0;i=time;i+)i=i;/*Read Data From 24C02*从 24c02读数据*/unsigned char rd

29、_24c02(char a)data unsigned char i,command;c_start();/启动 24c02 command=0 xa0;s_move(command);/送写入指令 ack();/等待应答 s_move(a);/写入寄存器号 ack();c_start();command=0 xa1;s_move(command);/送读取指令 ack();SDA=1;for(i=0;i8;i+)/逐位读取数据 com_data=com_data*2;/左移一位 SCL=0;_nop_();SCL=1;_nop_();l_bit=SDA;/最低位写入 c_stop();ret

30、urn(com_data);/返回读取的数据 /*Write Data to 24C02*送 24c02数据 */void wr_24c02(char a,char b)unsigned char data command;c_start();/启动 24c02 command=0 xa0;s_move(command);/写入指令 ack();s_move(a);/写入寄存器号 ack();s_move(b);/写入数据 ack();c_stop();_nop_();/*LCD busy function*LCD忙状态检测程序 */void lcd_busy(void)do status=r

31、s_ad;/读取 LCD状态,最高位判断是否忙 while(busy);/*LCD Initializing*LCD初始化*/void ini_lcd(void)lcd_busy();wc_ad=0 x30;lcd_busy();wc_ad=0 x0C;lcd_busy();wc_ad=0 x01;lcd_busy();wc_ad=0 x02;lcd_busy();/*LCD Display Position Function*LCD显示位置指令写入程序*x:字符串显示位置 x坐标;y:字符串显示位置 y坐标*/void pos(unsigned char x,unsigned char y)

32、unsigned char temp;switch(y)/判断显示的行数 case 1:temp=0;break;case 2:temp=2;break;case 3:temp=1;break;case 4:temp=3;lcd_busy();wc_ad=0 x80+temp*0 x08+x;/计算指令代码,写入位置指令 /*LCD Display Function*LCD显示程序*x:字符串显示位置 x坐标;y:字符串显示位置 y坐标*s:显示的字符串 */void dis(unsigned char x,unsigned char y,unsigned char*s)pos(x,y);/显

33、示位置指令写入 lcd_busy();while(*s!=0)/字符串是否结束 wd_ad=*s;/写入一个字符 s+;/指向下一个字符 /*LCD Clear Function*LCD屏幕清除程序*/void clr(void)wc_ad=0 x01;lcd_busy();/写入清除命令,等待写入结束 /*Password Failured*密码错误服务程序*/void p_err(void)clr();g_led=1;r_led=0;/密码错误,绿灯灭,红灯亮 dis(2,2,failed);/输入错误 delay(0 x6000);clr();if(err_num!=2)dis(0,2,Please ReEnter);/如果没到 3次输入,提示重新输入 delay(0 x6000);clr();/*Time Out*超时服务程序*超时,系统锁死*/void tm_err(void)c

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1