单片机C语言程序设计课程设计密码锁.docx_第1页
单片机C语言程序设计课程设计密码锁.docx_第2页
单片机C语言程序设计课程设计密码锁.docx_第3页
单片机C语言程序设计课程设计密码锁.docx_第4页
单片机C语言程序设计课程设计密码锁.docx_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

东北大学课程设计(论文) 任务书课程设计(论文)任务书课程设计(论文)题目:单片机C语言程序设计课程设计基本内容:利用实验室提供的实验仪器,自行选题设计一套硬件系统;采用单片机C语言编写程序,使之成为完整的设备。课程设计(论文)专题部分:题目:电子密码锁基本内容:利用实验板上的LCD显示屏、24C02及8279等资源设计电子密码锁系统,要求实现输入正确开锁,错误警告等相关功能。学生接受课程设计(论文)题目日期第20周指导教师签字:2013年 7月18日东北大学课程设计(论文) 摘要摘要 传统密码锁由于外形单一并容易人为损坏,以无法满足人们对安全日益增长的需求。而电子密码锁因其具有使用方便,可靠性强,成本低廉,正逐步代替传统密码锁,被广泛应用于安全领域。本文设计了一种智能电子式密码锁,它以单片机为控制核心,配合输入模块,显示模块及报警模块共同完成了密码服务。控制部分使用AT89C51单片机,其价格低廉,功耗较低,配有足够的内部资源来完成电子密码锁的核心控制。使用Intel公司的8279芯片,管理4*4键盘,作为密码输入及功能选择的输入模块。显示模块利用RT12864LCD显示器,以更加友好的界面完成人机交互。而报警模块利用led等及蜂鸣器提示密码输入情况,并完成危机报警功能。电子密码锁功能丰富,正确输入密码时,可进入欢迎界面,进行功能选择,如修改密码服务,可对原始通用密码进行修改,修改过程中需二次确认密码,两次输入相同才可修改成功,防止了因用户手误造成无法再次进入系统。退出功能保证用户在特殊情况下一键加锁,防止信息泄露。密码锁还配有三次报警功能和超时报警功能,当三次输入错误或第一次输入错误后,5s内无法进入系统,密码锁将进入自锁状态,防止他人暴力破解密码。关键词:电子密码锁,单片机,24C02, LCD,RT12864Hz; - 32 -东北大学课程设计(论文) 目录目 录第1章 绪论11.1设计目的11.2 设计意义11.3 设计要求1第2章 总体设计方案22.1设计思路22.2系统设计总框图2第3章 硬件电路设计及简要描述43.1 硬件设计原理图43.2 内部资源的使用43.3 单片机外围电路53.3.1 复位电路的设计53.3.2 时钟发生电路设计63.4 密码锁控制电路63.4.1 键盘管理芯片 827963.4.2 LCD显示电路83.4.3 密码存储电路93.4.4 蜂鸣报警电路93.4 元件清单10第4章 软件程序设计114.1 程序流程图114.2 系统初始化124.3 按键识别设计124.4 5s定时设计134.5 密码修改设计14参考文献16附录 电子密码锁系统程序源代码17设计心得体会32东北大学课程设计(论文) 第1章 绪论第1章 绪论1.1设计目的(1) 软件及硬件上进一步了解单片机的原理;(2) 掌握、运用C51语言编程,提升C51编程能力;(3) 熟练掌握RT12864液晶显示模块和8279键盘操作管理芯片;(4) 熟悉24C02掉电存储功能。1.2 设计意义(1) 深入了解了单片机C51语言的实际应用;(2) 通过独立思考,独立操作切实提高自己的编程能力;(3) 增强团队合作意识;(4) 运用所学知识发现问题、分析问题、解决问题;1.3 设计要求根据实验室提供的实验箱、计算机等设备由我们自行设计了电子密码锁系统,实现如下要求:基本要求:采用24C02或IC卡,设置6位密码,最多比较3次,利用LED灯显示密码输入正确与否。(1) 利用24C02或IC卡,设置6位密码;(2) 当密码输入正确后的密码后开锁,用红灯亮绿灯灭表示关锁,绿灯亮红灯灭表示开锁;(3) 密码最多可以试输入三次,如果三次输入错误,红灯闪烁,并发报警警报。附加要求:第一次输入密码与开锁的时间超过5s,红灯闪烁,并发报警警报。东北大学课程设计(论文) 第2章 总体设计方案第2章 总体设计方案2.1设计思路本设计主要由单片机、4*4键盘、LCD液晶显示屏和密码存储等部分组成。其中键盘用于输入数字密码和进行各种功能的实现。用户通过连接单片机的矩阵键盘输入密码,后经过单片机对用户输入的密码与之前保存的密码进行对比,从而判断密码是否正确,然后控制引脚的高低电平传到开锁电路或者蜂鸣报警电路。2.2系统设计总框图图2.1 系统设计总框图l 各模块功能如下1、键盘输入控制模块:采用8279管理键盘输入,有效节省了I/O口的资源。4*4键盘上的键分别用于密码输入和其他功能调用;2、密码存储模块:芯片24C02用于完成密码的掉电存储,使密码断电后得以保存;3、LCD液晶显示模块:采用芯片RT12864Hz实现液晶显示功能,用于实现友好的人机交互界面,提高了可读性,使用户对密码锁的运行情况一目了然;4、蜂鸣报警电路模块:通过LED灯和压电蜂鸣器,对输错密码和输入超时实行报警;5、复位电路:完成系统的复位;6、时钟电路:用于单片机的起振;7、内部定时模块:利用内部定时器T0完成设计的附加要求。东北大学课程设计(论文) 第3章 硬件电路设计及简要描述第3章 硬件电路设计及简要描述3.1 硬件设计原理图硬件设计原理图如图3.1:图3.1 硬件设计原理图3.2 内部资源的使用 此设计中我们使用了单片机内部定时计数器T0提供计时功能,判断密码输入是否超时 ,如果超时,系统将锁死。 8279的IRQ端经反向器与89C51的外部中断INT0相连接,判断是否有按键按下,如果有按键按下,则处理器去执行相应的操作。 P1的P1.2和P1.3用于模拟24C02的双线通讯接口,P1.0和P1.1连接红绿指示灯,通过控制其亮灭及闪烁状态,辅助显示密码输入情况。P1.4连接蜂鸣器,用于密码锁锁死时的报警功能。3.3 单片机外围电路3.3.1 复位电路的设计 复位是单片机的初始化操作。单片机启动运行时,都需要先复位,起作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。但是单片机本身不能自动进行复位,必须配合外部电路才能实现。该复位电路采用按键电平复位电路,当单片机在运行中,按下复位键S0后松开,在RST引脚持续出现24个振荡周期的高电平信号使单片机复位,实现上电开关复位的操作。如图3.2所示图3.2 复位电路图3.3.2 时钟发生电路设计 时钟电路为单片机产生时序脉冲,单片机所有运算与控制过程都是在同一的时序脉冲驱动下进行的,当采用内部时钟时,连接方法如图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,但本次设计中没有使用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】退出键。其中清零键的功能是清除当前输入的密码后重新输入。确认键的功能是确认当前输入的密码。设置新密码键的功能是当密码输入正确时,可以重新修改密码。退出键的功能是退出到密码输入界面。表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 密码存储电路 因为考虑到密码锁的实际应用,要求掉电时密码不会丢失,所以密码不储存在单片机的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 蜂鸣报警电路 按照题目的要求,当连续三次密码输入错误时,系统蜂鸣报警,我们采用实验板上的压电式蜂鸣器,当P1.4输出低电平时,三极管导通,蜂鸣器发音。图3.9 蜂鸣报警电路图3.5 元件清单本次设计所用元件见表3.2表3.2 元件清单器件名称数量89C511个82791个6MHz晶振1个RT12864Hz1个74ALS1381个74LS2451个74LS5731个74LS001个74LS081个AT24C021个电阻若干按键18个东北大学课程设计(论文) 第4章软件程序设计第4章 软件程序设计4.1 程序流程图 根据设计要求,我们设计了如下的流程图,满足用户在任何时刻按下任何键均有反应。图4.1 主程序流程图 说明:以上流程图仅显示了该密码锁的主要功能,一些具体功能的实现在后文子程序中将做具体讲解。4.2 系统初始化系统的初始化包括如下方面:1、8279的扫描模式为编码扫描;2、内部定时/计数器T0的设定;3、液晶显示屏模式的设定。4.3 按键识别设计在系统初始化并读取密码完成后,液晶显示界面1“状态:closed任意键输入密码”,提示用户可以输入密码。此时程序即不断的扫描按键,检查是否有任意键被按下。如果有,则开始输入密码,此时液晶屏显示界面2“密码:”在输入密码的时候,难免有输入错误的时候,我们特此设计了清零键,当输入密码时,检测到清零键的按下,我们将清除所有输入的密码,然后重新进入界面2重新输入密码,在六位密码输入结束后,我们也设计了确定键,当检测到确定键按下时,开始密码比较。具体的流程图如4.2所示图4.2 按键识别流程图图4.3 界面1图4.4 界面24.4 5s定时设计 根据该设计的附加要求“第一次输入密码与开锁的时间超过5s,红灯闪烁,并发报警警报”。我组对此的理解是在密码输入错误之后,重新输入密码到开锁的时间不超过5s。 利用89C51内部的定时器T0,用中断方式进行管理,初值在系统初始化时已经设置好,采用定时器方式1,每次定时25ms,设置变量time,每次定时中断,time自加,当第一次密码输入错误后,便打开定时器中断,只有在5s内开锁成功,中断才关闭,否则将红灯闪烁并蜂鸣报警,显示为界面3。图4.5 界面34.5 密码修改设计 为了丰富电子密码锁的功能,我们在完成设计的基本要求之外,额外增添了密码修改功能。即当用户密码输入正确后,可以进入界面4功能选择模块,按下A键便可修改密码,此时显示界面5“新密码:”输入6位密码后按确定键,这时显示界面6“再次输入:”,需要再次输入密码进行确认,若两次输入密码一致,则显示“Succeeded”新密码便改好了,若前后两次输入不一致,则显示“Type Error”,然后返回到功能选择界面4。图4.6 界面4图4.7 界面5图4.8 界面6图4.9界面7东北大学课程设计(论文) 参考文献参考文献1.Intel 8279 date sheet 2.张志,高大志,杨为民等微控制器原理及接口技术实验教程M沈阳:东北大学出版社,20043.闻绍飞C51单片机实验指导书M沈阳:东北大学出版社,20004.马忠梅,籍顺心单片机的C语言应用程序设计M北京:北京航空航天大学出版社,20055.李朝青单片机原理及接口技术M北京:北京航空航天大学出版社,2008东北大学课程设计(论文) 附录附录 电子密码锁系统程序源代码#include #include #include /*Ports*/#define c8279 XBYTE0x2021/8279命令端口#define d8279 XBYTE0x2020/8279数据端口#define wc_ad XBYTE0x2070/lcd写命令端口#define wd_ad XBYTE0x2071/lcd写数据端口#define rs_ad XBYTE0x2072/lcd读状态端口#define rd_ad XBYTE0x2073/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 flag=0xff;/标志位变量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 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(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);void 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 char flag);void int0(void) interrupt 0 using 1 c8279=0x50;/读取FIFI Ram命令 com=d8279&0x0f;/读取键值if(com=0x0e)enter_flag=0;/读入的是enter键if(com=0x0c)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)/计数100次,到达10s ET0=0;tm_err(); /*Interrupt Enable* 内部资源初始化程序* */void ini_int(void) EA=1; EX0=1; ET0=1; /开中断 TMOD=0x01; /定时器模式 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_flag=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=0x00; /编码扫描方式/*24C02 Start* 24C02启动程序* */void c_start(void) SCL=0; _nop_(); 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串行输出移位程序* 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_24c02(char a)data unsigned char i,command;c_start(); /启动24c02command=0xa0; s_move(command); /送写入指令ack(); /等待应答 s_move(a); /写入寄存器号ack();c_start(); command=0xa1; 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(); return(com_data); /返回读取的数据/*Write Data to 24C02* 送24c02数据 */void wr_24c02(char a,char b)unsigned char data command;c_start(); /启动24c02command=0xa0; 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=rs_ad; /读取LCD状态,最高位判断是否忙 while(busy);/*LCD Initializing* LCD初始化 * */void ini_lcd(void)lcd_busy();wc_ad=0x30;lcd_busy();wc_ad=0x0C;lcd_busy();wc_ad=0x01;lcd_busy();wc_ad=0x02;lcd_busy();/*LCD Display Position Function* LCD显示位置指令写入程序* x:字符串显示位置x坐标; y:字符串显示位置y坐标*/void pos(unsigned char x,unsigned char y)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=0x80+temp*0x08+x; /计算指令代码,写入位置指令/*LCD Display Function* LCD显示程序* x:字符串显示位置x坐标; y:字符串显示位置y坐标 * s:显示的字符串 */void dis(unsigned char x,unsigned char y,unsigned char *s)pos(x,y); /显示位置指令写入lcd_busy();while(*s!=0) /字符串是否结束 wd_ad=*s; /写入一个字符 s+; /指向下一个字符 /*LCD Clear Function* LCD屏幕清除程序* */void clr(void)wc_ad=0x01;lcd_busy(); /写入清除命令,等待写入结束/*Password Failured* 密码错误服务程序 * */

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论