




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
哈尔滨工业大学(威海)课程设计报告单片机原理及接口技术课程设计报告设计题目: 基于单片机的密码锁设计 学 号:110230208 110230218 110230228 姓 名: 李鹏宇 谭 宇 余 峰 指导教师: 张扬 信息与电气工程学院二零一四年六月数字密码锁设计在现代社会,电子密码锁已不是一个陌生的名词。本文中将要介绍的电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子锁装置。电子密码由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的青睐。本设计以单片机AT89C51作为密码锁监控装置的检测和控制核心,它是一种通过密码输入来控制电路或是芯片工作,运用键盘输入、密码修改、密码检测、液晶显示电路、执行电路、报警电路来完成开锁、密码修改等任务。利用识别密码是否正确来开锁或报警。采用键盘输入的电子密码锁具有较高的优势。采用数字信号编码和二次调制方式,不仅可以实现多路信息的控制,提高信号传输的抗干扰性,减少错误动作,而且功率消耗低;反应速度快、传输效率高、工作稳定可靠等。软件设计采用自上而下的模块化设计思想,以使系统朝着分布式、小型化方向发展,增强系统的可扩展性和运行的稳定性。本文设计的密码锁具有安全性高、成本低、功耗低、易操作等优点,并且利用Keil编程工具进行编程,并在Proteus电路仿真软件中进行了设计仿真。密码锁主要优点有:(1)保密性好,编码量多,远远大于弹子锁。随机开锁成功率几乎为零。(2)密码可变。用户可以经常更改密码,防止密码被盗,同时也可以避免因人员的更替而使锁的密级下降。(3)误码输入保护。当输入密码错误时,系统会报警。(4)操作简单易行,一学即会。关键词:AT89C51;单片机设计;密码锁;控制电路;1. 设计任务结合实际情况,基于AT89C51单片机设计一个数字密码锁。该系统应满足的功能要求为:(1) 总共设置8位密码,每位密码值范围为18;(2) 可自行设定和修改密码; (3)密码按键时有声音提示; (4)键入密码错误报警五秒,连续三次键入错误报警一分钟,报警期间输入密码无效;(5)输入密码正确,有一秒的开锁提示音;(6)密码设定完毕后有两秒提示音;(7)开锁后五秒内未进入,自动锁闭。2. 整体方案设计采用一种是用以AT89C51为核心的单片机控制方案。选用单片机AT89C51 作为本设计的核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现基本的密码锁功能。在单片机的外围电路外接输入键盘用于密码的输入和一些功能的控制,外接LCD显示器用于显示作用。其原理如下图2.1所示:图2.1 单片机控制密码锁原理图本系统主要硬件设备:AT89C51单片机、EEPROM (AT24C02)、4*4矩阵键盘、液晶显示、蜂鸣器 。各模块的主要功能如下:AT89C51单片机:AT89C51是一种低功耗/低电压、高性能的八位CMOS单片机,片内有一个4KB的FLASH可编程可擦除只读存储器(FPEROMFlash Programmable and Erasable Read Only Memory),它采用了CMOS工艺和ATMEL公司的高密度非易失性存储器技术,而且其输出引脚和指令系统都与MSC51兼容。片内置通用8位中央处理器(CPU)和FLASH存储单元,片内的存储器允许在系统内改编程序或用常规的非易失性存储器编程。因此,AT89C51是一种功能强、灵活性高且价格合理的单片机,可方便的应用于各种控制领域。EEPROM (AT24C02):在断电时存储密码锁的密码,防止密码断电丢失。4*4矩阵键盘:按键输入密码以及使单片机工作在各种不同的状态(输入密码,修改密码等)。液晶显示:显示密码等。蜂鸣器:在按键时做提醒,以及按错键后报警。3. 系统硬件电路设计3.1 AT89C513.1.1 主要特性(1)与MCS-51产品指令系统兼容 (2)4K字节可编程闪烁存储器 (3)寿命:1000写/擦循环(4)数据保留时间:10年(5)全静态工作:0Hz-24Hz(6)三级程序存储器锁定(7)128*8位内部RAM(8)32可编程I/O线(9)两个16位定时器/计数器(10)6个中断源 (11)可编程串行通道(12)低功耗的闲置和掉电模式(13)片内振荡器和时钟电路 另外,AT89C51是用静态逻辑来设计的,其工作频率可下降到零并提供两种软件的省电方式-空闲方式和掉电方式。在空闲方式中,CPU停止工作。在掉电方式中,片内振荡器停止工作,由于时钟被“冻结”,使一切功能都暂停,只保存片内RAM中的内容,直到下次硬件复位为止。AT89S51引脚图如图所示:图3-1AT 89C51引脚图 3.2 振荡器和时钟电路振荡器和时钟电路用于产生单片机正常工作时所需要的时钟信号,AT89C51单片机采用CMOS工艺,内部包含一个振荡器,可以用于CPU的时钟源;也允许采用外部振荡器,由外部振荡器产生的时钟信号来供内部CPU运行使用。XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。石晶振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。 图3.2 振荡器电路3.3单片机复位电路单片机的复位是一个很重要的部分,复位是使单片机的CPU以及系统的各个部件处于特定的初始状态,并使系统从初始状态开始工作。一般在系统上电,或者程序死机的时候需要进行单片机的复位。单片机复位原理是,在时钟电路开始工作后,在单片机的RST引脚施加24个时钟振荡脉冲(即两个机器周期)以上的高电平,单片机便可以实现复位。在复位期间,单片机的ALE引脚和引脚均输出高电平。当RST引脚从高电平跳变为低电平后,单片机便从0000H单元开始执行程序。本系统采用手动上电复位电路,这样可以人工复位单片机系统,如图3.4所示,当按下按键开关的时候,VCC通过一个电阻连接到RST引脚,给RST一个高电平;按键松开的时候,RST引脚恢复为低电平,复位完成。图3.3 手动上电复位电路3.4 键盘电路设计在单片机应用系统中,一般都会设置键盘,主要为了控制运行状态,输入一些命令或数据,以完成特定的人机交互。键盘是与单片机进行人机交互的最基本的途径,其以按键的形式来设置控制功能或输入数据,按键的输入状态本质上是一个开关量。对于简单的开关量的输入可以采用独立式按键,这种方法接口简单,但占用单片机I/O端口资源较多。对于输入参数较多、功能复杂的系统,需要采用矩阵式键盘进行输入控制。本系统采用4*4矩阵式键盘,键盘连接方式如图3.4所示:图3.4键盘电路图3.5液晶显示电路设计液晶显示器(LCD)是一种功耗很低的显示器,它的使用非常广泛,比如电子表、计算器、数码相机、计算机的显示器和液晶电视等。电子密码锁中需要显示的信息比较多,为了能直观的看到结果,并且为了设计显的美观,使用总线和排阻进行简化连接方式,本设计采用液晶显示屏LCD进行显示,具体连接方式如图3.5所示。图3.5 液晶显示器电路4. 系统程序设计4.1 主程序流程图本系统的程序功能采用线反转法来扫描查询4*4矩阵式键盘,如果有按键按下,则蜂鸣器响。键盘输入子程序如下:5 系统测试及仿真分析5.1 Proteus仿真软件Proteus ISIS是英国Labcenter公司开发的电路分析与实物仿真软件。它运行于Windows操作系统上,可以仿真、分析(SPICE)各种模拟器件和集成电路,该软件的特点是:实现了单片机仿真和SPICE电路仿真相结合。具有模拟电路仿真、数字电路仿真、单片机及其外围电路组成的系统的仿真、RS232动态仿真、I2C调试器、SPI调试器、键盘和LCD系统仿真的功能;有各种虚拟仪器,如示波器、逻辑分析仪、信号发生器等。支持主流单片机系统的仿真。目前支持的单片机类型有:68000系列、8051系列、AVR系列、PIC12系列、PIC16系列、PIC18系列、Z80系列、HC11系列以及各种外围芯片。提供软件调试功能。在硬件仿真系统中具有全速、单步、设置断点等调试功能,同时可以观察各个变量、寄存器等的当前状态,因此在该软件仿真系统中,也必须具有这些功能;同时支持第三方的软件编译和调试环境,如Keil C51 uVision3等软件。具有强大的原理图绘制功能。总之,该软件是一款集单片机和SPICE分析于一身的仿真软件,功能极其强大。一、进入Proteus ISIS双击桌面上的ISIS 6 Professional图标或者单击屏幕左下方的“开始”“程序”“Proteus 6 Professional” “ISIS 6 Professional”,出现如图5.1所示屏幕,表明进入Proteus ISIS集成环境。图5.1 启动时的屏幕二、工作界面Proteus ISIS的工作界面是一种标准的Windows界面,如图5.2所示,包括:标题栏、主菜单、标准工具栏、绘图工具栏、状态栏、对象选择按钮、预览对象方位控制按钮、仿真进程控制按钮、预览窗口、对象选择器窗口、图形编辑窗口。图5.2 Proteus 工作界面图5.2 仿真结果分析当系统初始化之后进入密码输入提示阶段,液晶显示器显示:Input_Password!_,I2C对密码进行提示,8位密码是01234567,。效果图如图5.3所示: 图5.3 系统初始化后仿真图当密码输入错误时,液晶显示器LCD显示Password_Error! Try_again!,红灯闪烁,并报警。效果如图5.4所示 图5.4 密码输入错误时仿真图当密码输入正确时,液晶显示器LCD显示right! Select: 1:open_2:modify_,同时红灯和黄灯均亮,并有密码正确的提示报警音,效果如图5.5所示:图5.5 密码输入正确时仿真图当需要修改密码时,按下修改密码键,进入如图5.6所示界面:图5.6 开锁显示仿真图密码输入正确后,输入密码确认键,进入如图5.7所示密码修改成功界面: 图5.7 密码修改仿真图6. 程序清单#include#define uint unsigned int#define uchar unsigned charvoid key_scan();uchar count0,count1,count3,num,n=0,temp,a,j,count4;uchar mima8;/初始密码存储区uchar tab_key50;/输入密码存储区uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;bit enterflag;/确认键按下与否的标志bit mimaflag;/密码正确与否的标志bit xiugaiflag;/修改密码标志bit enter1flag;/修改密码确认键标志sbit red=P00;sbit bell=P12;sbit rs=P25;sbit rw=P26;sbit lcden=P27;sbit scl=P15;sbit sda=P36;uchar code table1=input the passco;uchar code table2=de: -;uchar code table3=*;uchar code table4=right (_) ;uchar code table5=first error!;uchar code table6=second error!;uchar code table7=third error see ;uchar code table8=u tomorrow (_);uchar code table9=define the passc;uchar code table10=ode: -;uchar code table11=code is new;/*键盘消抖函数*void delay1() ; void delay2(uchar x)uchar a,b;for(a=x;a0;a-) for(b=100;b0;b-);void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);/*e2room的初始化*void start() /开始信号sda=1;delay1();scl=1;delay1();sda=0;delay1();void stop() /停止sda=0;delay1();scl=1;delay1();sda=1;delay1();/*应答信号*void respond() uchar i;scl=1;delay1();while(sda=1)&(i250)i+;scl=0;delay1();/*写字节操作函数*void write_byte(uchar date)uchar i,temp;temp=date;for(i=0;i8;i+)temp=temp1;/保持最高位,左移到进位CYscl=0; delay1();sda=CY;delay1();scl=1;delay1();scl=0;delay1();sda=1;/总线释放delay1();/*读字节操作函数*uchar read_byte()uchar i,k;scl=0;delay1();sda=1;delay1();for(i=0;i8;i+)scl=1;delay1();k=(k1)|sda; /或运算,放到最低位scl=0;delay1();return k;/*写地址函数*void write_add(uchar address,uchar date)start();write_byte(0xa0);respond();write_byte(address);respond();write_byte(date);respond();stop();/*读地址函数*uchar read_add(uchar address)uchar date;start();write_byte(0xa0);respond();write_byte(address);respond();start();write_byte(0xa1);respond();date=read_byte();stop();return date;/*LCD1602的初始化*void write_com(uchar com)rs=0;lcden=0;P0=com;delay(5);lcden=1;delay(5);lcden=0;void write_date(uchar date)rs=1;lcden=0;P0=date;delay(5);lcden=1;delay(5);lcden=0;/*密码比较函数*bit mimacmp()bit flag;uchar i;for(i=0;i8;i+)if(mimai=tab_keyi)flag=1;elseflag=0;i=8;return(flag);/返回flag/*LCD显示函数开始*void lcd_display()uchar i=0;write_com(0x80+0x40+8);for(i=0;in;i+)write_date(table30);/*键盘功能分配函数群开始*/* 0 * 1 *2 * 3* /* 4* 5* 6 *7 */*8* 9* 确认(A) *无效(B)/*取消(C)*修改密码键(D)*确认修改键(E)*无效(F)void key_manage1()tab_keyn=0;n+;if(xiugaiflag=1)mimacount4=0;count4+;void key_manage2()tab_keyn=1;n+;if(xiugaiflag=1)mimacount4=1;count4+;void key_manage3()tab_keyn=2;n+;if(xiugaiflag=1)mimacount4=2;count4+;void key_manage4()tab_keyn=3;n+;if(xiugaiflag=1)mimacount4=3;count4+;void key_manage5()tab_keyn=4;n+;if(xiugaiflag=1)mimacount4=4;count4+;void key_manage6()tab_keyn=5;n+;if(xiugaiflag=1)mimacount4=5;count4+;void key_manage7()tab_keyn=6;n+;if(xiugaiflag=1)mimacount4=6;count4+;void key_manage8()tab_keyn=7;n+;if(xiugaiflag=1)mimacount4=7;count4+;void key_manage9()tab_keyn=8;n+;if(xiugaiflag=1)mimacount4=8;count4+;void key_manage10()tab_keyn=9;n+;if(xiugaiflag=1)mimacount4=9;count4+;/*确认键* void key_manage11()enterflag=1;/确认键按下if(n=8) /只有输入8个密码后按确认才做比较mimaflag=mimacmp();elsemimaflag=0; if(enterflag=1)enterflag=0;n=0;/用FFFFFFFF清除已经输入的密码for(count3=0;count38;count3+)delay(5);tab_keycount3=0x0f;TR1=1;/打开计数器1count1=0;/定时器1由50MS累计到1S所用的计数器if(mimaflag=1)a=0;write_com(0x01);write_com(0x80);for(count3=0;count316;count3+)write_date(table4count3);/密码正确,显示RIGHT,绿灯亮delay(5); bell = 0; delay(1000); /1S 提示音 bell = 1; else n=0; red=0; bell=0;a+;if(a=1)for(count3=0;count38;count3+) /ffffffff清除密码delay(5);tab_keycount3=0x0f;write_com(0x01);write_com(0x80);for(count3=0;count316;count3+)write_date(table5count3);/密码错误,显示 first error,红灯亮delay(5);TR1=1;bell = 0;delay(10000); /5S 报警音bell = 1; if(a=2)for(count3=0;count38;count3+) /ffffffff清除密码delay(5);tab_keycount3=0x0f;write_com(0x01);write_com(0x80);for(count3=0;count316;count3+)write_date(table6count3);/密码错误,显示SECOND ERROR,红灯亮delay(5);TR1=1; if(a=3)for(count3=0;count38;count3+) /ffffffff清除密码delay(5);tab_keycount3=0x0f;write_com(0x01);write_com(0x80);for(count3=0;count316;count3+)write_date(table7count3);/密码错误,显示third error see,红灯亮delay(5);write_com(0x80+0x40);for(count3=0;count316;count3+)write_date(table8count3);/密码错误,显示 U TOMORROW ,红灯亮delay(5);TR1=0;void key_manage12()tab_keyn=11;n+; /密码计数清零/*取消键* void key_manage13()n=0; /密码计数清零write_com(0x80);/指针所指位置for(count3=0;count316;count3+)write_date(table1count3);/第一行显示INPUT THE PASSPORD:delay(5);write_com(0x80+0x40);for(count3=0;count316;count3+)write_date(table2count3);/开机显示-delay(5);tab_keycount3=0x0f;/用FFFFFFFF清楚已经输入的密码/*修改密码键*void key_manage14()uchar aa=0;n=0;xiugaiflag=1;write_com(0x01);write_com(0x80);for(count3=0;count316;count3+)write_date(table9count3);/显示define the passworddelay(5);tab_keycount3=0x0f;/用FFFFFFFF清楚已经输入的密码write_com(0x80+0x40);for(count3=0;count316;count3+)write_date(table10count3);/显示-delay(5);TR0=1;/*修改密码键的确认键*void key_manage15()n=0;enter1flag=1;if(enter1flag=1)enter1flag=0;count4=0;for(count3=0;count316;count3+)tab_keycount3=0x0f;/用FFFFFFFF清楚已经输入的密码 write_com(0x01);write_com(0x80);for(count3=0;count316;count3+)write_date(table11count3);delay(100);TR1=1;count1=0;void key_manage16()tab_keyn=15;n+;/*定时器1的50MS,共延时1秒*void time_1() interrupt 3TH1=(65536-50000)/256;TL1=(65536-50000)%256;if(count120)count1+;else /计时到1STR1=0;count1=0;mimaflag=0;red=1;bell=1;/显示FFFFFFFFwrite_com(0x01);write_com(0x80);for(count3=0;count316;count3+)write_date(table1count3);/显示INPUT THE PASSCODEdelay(5);write_com(0x80+0x40);for(count3=0;count316;count3+)write_date(table2count3);/开机显示FFFFFFFFdelay(5);/*定时0*void time_0() interrupt 1TH0=(65536-50000)/256;TL0=(65536-50000)%256;if(count48)key_scan();elseTR0=0;count4=0;/初始化函数void init()uchar i;lcden=0;write_com(0x38);/打开显示模式设置write_com(0x0c);/打开显示,光标等等设置未零write_com(0x06);/当读或写一个字符后地址指针加一,且光标加一,当写一个字符后整频显示左移,write_com(0x01);/清零指令write_com(0x80);/指针所指位置/定时器初始化TMOD=0x11;/T0,T1工作方式1TH0=(65536-2000)/256;TL0=(65536-2000)%256;/T0初始化2MSTH1=(65536-50000)/256;TL1=(65536-50000)%256;/T1初始化50MSTR1=0;ET1=1;EA=1;TR0=0;ET0=1;count0=0;/初始没有密码输入,故为零enterflag=0;/没有确认键按下mimaflag=0;/密码正确与否键先置零red=1;/红灯不亮/*密码存入EPROM中*delay(5);scl=1;delay(5);for(i=0;i8;i+)write_add(i,8);delay2(100);for(i=0;i8;i+)mimai=read_add(i);delay(5);void main()rw=0;init();write_com(0x80);/指针所指位置for(count3=0;count316;count3+)write_date(table1count3);/第一行显示INPUT THE PASSPORD:delay(5);write_com(0x80+0x40);for(count3=0;count316;count3+)write_date(table2count3);/开机显示FFFFFFFFdelay(5);while(1)key_scan(); /调用键盘扫描函数lcd_display(); /*键盘扫描函数开始*void key_scan()/*扫描第一行*P1=0xfe; temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(100);if(temp!=0xf0)temp=P1;switch(temp)case 0xee:bell=0; /*按键声音*/delay(30);bell=1;key_manage1();break;case 0xde:bell=0; /*按键声音*/delay(30);bell=1;key_manage2();break;case 0xbe:bell=0; /*按键声音*/delay(30);bell=1;key_manage3();break;case 0x7e:bell=0; /*按键声音*/delay(30);bell=1;key_manage4();break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;/*扫描第二行*P1=0xfd; temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(100);if(temp!=0xf0)temp=P1;switch(temp)case 0xed:bell=0; /*按键声音*/delay(30);bell=1;key_manage5();break;case 0xdd:bell=0; /*按键声音*/delay(30);bell=1;key_manage6();break;case 0xbd:bell=0; /*按键声音*/delay(30);bell=1;key_manage7();break;case 0x7d:bell=0; /*按键声音*/delay(30);bell=1;key_manage8();break;while(temp!=0xf0)temp=P1;temp=temp&0xf0;/*扫描第三行*P1=0xfb; temp=P1;temp=temp&0xf0;if(temp!=0xf0)delay(100);if(temp!=0xf0)temp=P1;switch(temp)case 0xeb:bell=0; /*按键声音*/delay(30);bell=1;key_manage9();break;case 0xdb
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年金华东阳市人民医院招聘编外人员8人考前自测高频考点模拟试题含答案详解
- 2025重庆广播电视集团所属企业招聘人工智能工程师解决工程师4人笔试历年参考题库附带答案详解
- 2025华夏银行社会招聘模拟试卷附答案详解(模拟题)
- 2025辽宁沈阳市能源集团所属铁法能源公司招聘57人笔试历年参考题库附带答案详解
- 2025贵州习水县红景公司招聘3人笔试历年参考题库附带答案详解
- 2025福建漳州片仔癀药业股份有限公司市属国企应届毕业生专场招聘福建农林大学“青春筑梦国企同行”和华阳体育馆书记市长送岗笔试历年参考题库附带答案详解
- 2025广东佛山市高明区选聘9名公办初中校长考前自测高频考点模拟试题带答案详解
- 2025江西赣州市宁都县翠微旅游资源开发有限公司职业经理人招聘1人笔试历年参考题库附带答案详解
- 2025九洲集团成都创智融合科技有限公司招聘系统岗等测试(四川)笔试历年参考题库附带答案详解
- 2025“才聚齐鲁成就未来”山东黄金集团井下技能工人招聘2025人笔试历年参考题库附带答案详解
- 2025年临床诊疗指南:过敏性紫癜详解
- 行业干货!智研咨询发布《2024年中国低空物流行业发展动向及市场前景研究报告》
- 沿海养殖区生态环境修复-洞察分析
- 北师大版九年级上册数学第一次月考试卷附答案
- 中央空调系统维保服务报价清单
- 新人教版《海水的性质》课件
- 【新课标】高中生物新课程标准考试题三套
- 2025小学道德与法治开学第一课(思想政治理论教育课)
- 异博定治疗方案
- 申请法院司法赔偿申请书
- 锻造操作机安全检查表模版
评论
0/150
提交评论