密码锁课程设计.docx
《密码锁课程设计.docx》由会员分享,可在线阅读,更多相关《密码锁课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
![密码锁课程设计.docx](https://file1.bdocx.com/fileroot1/2022-12/13/5d12a57a-fe14-402d-9482-291f19c6959d/5d12a57a-fe14-402d-9482-291f19c6959d1.gif)
密码锁课程设计
单片机技术课程设计说明书
密码锁
系、部:
电气与信息工程
学生姓名:
彭锟
指导教师:
王韧职称副教授
专业:
自动化
班级:
自本0801
完成时刻:
2020-12-27
摘要
随着科技的日趋进展,电子密码操纵系统已愈来愈符合人们的要求。
本文介绍了基于单片机和串行EEPROM的智能密码操纵系统,对系统硬件设计和软件实现进行了详细的描述。
该系统采纳AT89S52单片机和AT24C02串行EEPROM,通过AT89S52模拟I2C总线和AT24C02通信,实现密码操纵的功能。
本文从经济有效的角度动身,采纳美国Atmel公司的单片机AT89S52作为主控芯片与数据存储器单元,结合外围的矩阵键盘输入、LCD液晶显示、开锁等,用C语言编写主控芯片的操纵程序与EEPROM读写程序相结合,设计了一款能够多次更改密码功能的电子密码操纵系统。
这种电路设计具有防试探按键输入、开锁、修改密码等多种功能。
密码长度可变、保密性强、灵活性高。
经实验证明,该密码操纵系统具有设计方式合理,简单易行,本钱低,平安利用等特点,符合车辆、办公室用锁要求,具有推行价值。
关键词密码操纵;单片机;24C02
ABSTRACT
Asthedevelopmentofscienceandtechnologydaybyday,thekeycontrolsystemismoreinlinewiththerequirementsofpeople.ThepaperpresentsacryptographicsmartpasswordcontrolbasedonMCUandserialEEPROM,describeshardwarestructureandsoftwaredesignofthesystem.ItadoptsAT89S52andAT24C02,realizesthefunctionofcryptographicsmartpasswordcontrol.AT89S52communicateswithAT24C02byI2Cbustoachievethepasswordcontrolfunction.
Thisarticlefromtheeconomicalandpracticalpointofview,theuseoftheUnitedStatesAtmelCorporationAT89S52microcontrollerasamasterchipandthedatamemoryunit,combinedwiththeexternalmatrixkeyboardinput,LEDdigitaldisplay,unlockandsoon,dominatedbytheCprogramminglanguagechipEEPROMofthecontrolproceduresandthecombinationofreadingandwritingprogramdesignedtochangeapasswordmanytimes,thepolicefunctionwiththeelectronicthepasswordcontrol.Thiscircuitdesignwithanti-testbuttoninput,intelligentcontrollock,unlock,alarm,multiplefunctions,suchasChangePassword.Passwordlengthcanbechanged,evenmoresecretandflexiblethanothers.
Experimentsshowthatthepasswordcontrolsystemischaracterizedbyitsreasonabledesigningmethods,simpleoperation,lowcostandpropertyofsafetyandpracticality.Besides,thepasswordcontrolcanbeusedintheofficeandhasgreatpotentialforcommercialdevelopment.
KeyWordsPasswordcontrol;Single-chip;24C02
1设计课题任务、功能要求说明及整体方案介绍……………………………………4
设计课题任务………………………………………………………………4
功能要求说明………………………………………………………………4
整体方案介绍………………………………………………………………4
2设计课题硬件系统的设计…………………………………………………………5
设计课题硬件系统各模块功能简要介绍……………………………………5
设计课题电路原理图、PCB图、元器件布局图各1份……………………6
设计课题元器件清单…………………………………………………………6
3设计课题软件系统的设计…………………………………………………………7
设计课题利用单片机资源的情形……………………………………………7
设计课题软件系统各模块功能简要介绍……………………………………7
设计课题软件系统程序流程框图……………………………………………8
设计课题软件系统程序清单…………………………………………………11
4设计结论、仿真结果、误差分析、教学建议……………………………………34
设计课题的设计结论及利用说明……………………………………………34
设计课题的仿真结果…………………………………………………………34
设计课题的误差分析…………………………………………………………34
设计体会………………………………………………………………………35
教学建议………………………………………………………………………36
参考文献………………………………………………………………………………37
致谢………………………………………………………………………………………38
附录………………………………………………………………………………………39
1设计课题任务、功能要求说明及整体方案介绍
设计课题任务
设计一个具有特定功能的密码锁。
该密码锁上电或按键复位后能自动显示菜单系统界面,依照菜单界面的数字进入对应的进入工作状态。
该密码锁具有系统原始密码,用户能够设定并存储用户密码,密码输入时应处于保密显示状态,密码输入正确时应显示密码输入正确提示信息,不然,显示密码输入错误提示信息。
功能要求说明
设计一个利用AT89S52单片机操纵的电子密码锁,该电子密码功能包括10个密码输入,密码输入进程中有清除输入,密码正确和错误等提示,还有密码修改,12864LCD显示菜单实现多功能等等。
方案介绍
电子密码锁系统核心用AT89S52单片机操纵,密码输入按键为4*4矩阵键盘16个按键实现密码输入,有0—9能够做为密码输入,E、F别离是退出和确信键,D键是清除输入时输错时的密码,设计比较人性化。
密码存储电路利用AT24C02芯片,该芯片能够实现掉电存储,而且数据可保留时刻长,与单片机连接简单,当断电时能够将用户修改的密码保留到24C02实现断电了密码仍是正确的,LCD用12864字符型液晶显示,能有更好的视觉成效,也能更好的明白你输的密码是正确仍是错误。
电子密码锁系统如下图:
AT89s52
键盘输入
复位电路
晶振电路
电源输入
显示电路
24c02电路
图电子密码锁系统方框图
2设计课题硬件系统的设计
设计课题硬件系统各模块功能简要介绍
2单片机最小系统
单片机采纳AT89S52单片机,AT89S52是一种低功耗、高性能CMOS8位微操纵器,具有8K在系统可编程Flash存储器,与工业80C51产品指令各引脚完全兼容。
单片机最小系统要紧有两块组成,其一为晶振起振电路,其二为复位电路。
在此,咱们采纳按键手动复位,相对来讲,这种复位方式加倍方便人性化,没必要要切断电源即可对系统进行复位。
按键密码输入电路设计
由于本设计中要求利用0-910个密码数值按键输入,数量较多,故利用矩阵键盘,因此本设计就采纳行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O线的数量,在按键比较多的时候,通常采纳如此方式。
本设计中采纳矩阵键盘行线和单片机~相连,列线与单片机~相连。
键盘扫描采纳行扫描法,即依次置行线中的每一行为低电平,其余均为高电平,扫描列线电平状态,为低电平即表示该键按下。
键盘消抖采纳软件延时消抖,能够减小硬件电路复杂程度,操纵简单。
密码存储电路设计
密码存储采纳24C02存储,它能都掉电存储数据。
掉电存储单元的作用是在系统电源断开的时候,存储当前设定的密码数据。
24C02是ATMEL公司的2KB字节的电可擦除\是模拟的IIC总线式EEPROM,采纳两线串行的总线和单片机通信,电压最低能够到,额定电流为1mA,静态电流10Ua,芯片内的资料能够在断电的情形下保留40年以上,而且采纳8脚的DIP封装,利用方便。
本实验中,AT24C02的SCLK和SDA引脚(SDA为数据线,SCLK为时钟信号线)接上拉电阻后与单片机的和脚相连。
显示模块设计
显示电路采纳12864字符型LCD显示。
中文字符型12864中文液晶显示模块能够显示字母、数字符号、中文字型及图形,具有画图及文书画面混合显示功能。
提供三种操纵接口,别离是8位微处置器接口,4位微处置器接口及串行接口。
所有的功能,包括显示RAM,字型产生器,都包括在一个芯片里面,只要一个最小的微处置系统,就能够够方便操作模块。
内置2M-位中文字型ROM(CGROM)总共提供8192个中文字型(16x16点阵),16K-位半宽字型ROM(HCGROM)总共提供126个符号字型(16x8点阵),64x16-位字型产生RAM(CGRAM),另外画图显示画面提供一个64x256点的画图区域(GDRAM),能够和文书画面混和显示,使显示功能加倍壮大。
本设计中咱们采纳的字符型12864LCD,自带中文字库,使咱们的程序操纵显示加倍简单,设计的时候能够灵活依照咱们的要求显示汉字,简单明了,而且利用该LCD如单片机操纵器的串行接口模式,LCD显示模块与单片机的连接仅仅只需要5根线,比图像型LCD显示模块要少了7根线,大大节约了单片机的I/O口!
另外该类液晶还支持反白显示,如此咱们能够利用该功能将显示做成单行反白式菜单,能够让液晶现实更多的内容使设计加倍切近人们的生活利用习惯,使设计加倍人性化!
在设计中,咱们将密码修改,做成二级菜单项选择项,通过按键操作,功能更壮大,操作简单方便明了。
另外依照功能扩展需要,咱们乃至能够添加多级菜单,是电子密码锁功能加倍壮大!
本设计中液晶串口一共用到5根线与单片机相连其中RS引脚,R/W引脚,PSB引脚,EN引脚,RESET引脚别离对应与单片机的,,,,相连接。
设计课题电路原理图、PCB图、元器件布局图
设计课题电路原理图附录一
设计电路的PCB图附录二
设计电路的元器件布局图附录三
设计课程元器件清单(附录四)
3设计课题软件系统的设计
设计课题利用单片机资源的情形
单片机的P0口是显示器LCD12864的传送口D0-D7,P1口是矩阵键盘的接口,接的是LCD的RS引脚,接的是LCD的RW引脚,接的是LCD的PSB引脚,接的是24C02的SCL引脚,接的是24C02的SDA,接的是LCD的E信号引脚,接的是74LS373的LE引脚,接的是RST引脚。
3.2设计课题软件系统各模块功能简要介绍
单片机最小系统
这部份软件主若是对其他各部份的工作做预备,包括对LCD的初始化、清屏。
和对24C02的初始化,键扫(等待键按下从而进入对应的功能)等。
功能按键输入处置
这部份程序设计主若是对键盘输入的键值做出处置,让单片机和LCD显示器能识别按下的键和进入到相应的功能的界面中。
3.2.3密码存储程序设计
这部份程序会把密码送到24C02里,即便在单片机供电不正常了,当再次来电了还能正常利用。
这就保证了密码的利历时刻。
这部份包括把密码写到24C02,和从24C02中读数到单片机,让修改的密码在断电时也能报密码保留起来。
显示模块
LCD12864能显示8912个汉字和128个字符。
只需在LCD不忙的时候就能够够对LCD12864写指令或数据。
题软件系统程序流程框图
电子密码锁主程序流程图如图
.2键功能程序流程图如图
密码设置流程图如图
开锁程序流程图如图
电子密码锁主程序流程图
开始
初始化24c02
LCD初始化
开机界面显示
菜单界面
按键处理
结束
键功能程序
确认按下
Y
N
图主程序流程图
.2键功能程序流程图
键功能程序
键值=‘输入’?
键值=‘确认’?
键值=‘清除’?
键值=‘修改’
键值=‘确认’?
密码输入程序
修改程序
清除程序
开锁程序
确认程序
Y
Y
Y
Y
Y
N
N
N
N
返回
N
图按键功能程序流程图
密码设置流程图
按下修改键
输密码
所输入密码正确?
输新密码
修改成功
Y
确认程序
修改程序
N
图密码修改程序流程图
开锁程序流程图
初始化
输入密码
确认程序
所输入密码正确?
Y
开锁成功
开锁程序
N
图开锁程序流程图
系统程序清单
#include<>
#include<>
#defineucharunsignedchar
#defineuintunsignedint
#defineOP_READ0xa1/*对24C02进行器件地址和读取操作的函数*/
#defineOP_WRITE0xa0/*对24C02进行器件地址和写入操作的函数*/
#defineMAX_ADDR0xff/*需要用到的24C02最大地址*/
#defineLCD_dataP0/*数据口*/
sbitLCD_RS=P3^0;/*寄放器选择输入*/
sbitLCD_RW=P3^1;/*液晶读/写操纵*/
sbitLCD_EN=P3^5;/*液晶使能操纵*/
sbitLCD_PSB=P3^2;/*串/并方式操纵*/
sbitLCD_RST=P3^7;/*液晶复位引脚*/
sbitLE=P3^6;/*373引脚*/
sbitSDA=P3^4;/*24C02引脚*/
sbitSCL=P3^3;/*24C02引脚*/
ucharkey,key,i;
ucharkeyx=0,q=0;
ucharj,cc;
uchardd,run;
ucharat,att;
ucharv,f_50ms,f_x=0;
uchartmp,tmp2,p;
ucharar;
uinte;
bitReadRTC_Flag;
bittimer;
/*********************************************************/
#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};
/**********开机界面显示字符***********/
ucharcodeDIS1[]={"☆★湖南工学院☆★"};
ucharcodeDIS2[]={"★☆★☆★☆★☆"};
ucharcodeDIS3[]={"QQ号码:
7"};
ucharcodeDIS4[]={"TEL:
"};
/**************菜单显示字符**************/
ucharcodeDIS5[]={"1.万年历2.点阵屏"};
ucharcodeDIS6[]={"3.频率计4.密码锁"};
ucharcodeDIS7[]={"5.信号源6.电压表"};
ucharcodeDIS8[]={"7.温度计8.计算器"};
/**********密码锁显示字符*************/
ucharcodeDIS24[]={"退出确信"};
ucharcodeDIS411[]=("请输入密码或超级");
ucharcodeDIS412[]=("密码:
");
ucharcodeDIS413[]=("*");
ucharcodeDIS414[]=("");
ucharcodeDIS421[]=("1.修改密码");
ucharcodeDIS422[]=("密码错误");
ucharcodeDIS423[]={"退出"};
ucharcodeDIS424[]=("密码正确");
ucharcodeDIS431[]=("请输入新密码:
");
ucharcodeDIS432[]=("09");
ucharcodeDIS433[]=("密码修改成功");
ucharmimatable[8];
ucharcodechaoji[8]={8,8,8,8,8,8,8,8};
ucharATtable[8];
ucharATTtable[8];
/******************************************************************/
ucharcodeTable_OF_Digits[]=
{/*--文字:
0--*/
/*--宋体9;此字体下对应的点阵为:
宽x高=6x12--*/
/*--宽度不是8的倍数,现调整为:
宽度x高度=8x12--*/
0x00,0x00,0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x00,
/*--文字:
1--*/
0x00,0x00,0x20,0x60,0x20,0x20,0x20,0x20,0x20,0x70,0x00,0x00,
/*--文字:
2--*/
0x00,0x00,0x70,0x88,0x88,0x10,0x20,0x40,0x80,0xF8,0x00,0x00,
/*--文字:
3--*/
0x00,0x00,0x70,0x88,0x08,0x30,0x08,0x08,0x88,0x70,0x00,0x00,
/*--文字:
4--*/
0x00,0x00,0x10,0x30,0x50,0x50,0x90,0x78,0x10,0x18,0x00,0x00,
/*--文字:
5--*/
0x00,0x00,0xF8,0x80,0x80,0xF0,0x08,0x08,0x88,0x70,0x00,0x00,
/*--文字:
6--*/
0x00,0x00,0x70,0x90,0x80,0xF0,0x88,0x88,0x88,0x70,0x00,0x00,
/*--文字:
7--*/
0x00,0x00,0xF8,0x90,0x10,0x20,0x20,0x20,0x20,0x20,0x00,0x00,
/*--文字:
8--*/
0x00,0x00,0x70,0x88,0x88,0x70,0x88,0x88,0x88,0x70,0x00,0x00,
/*--文字:
9--*/
0x00,0x00,0x70,0x88,0x88,0x88,0x78,0x08,0x48,0x70,0x00,0x00};
UcharcodeTable[]={0xff,0xff,0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff};
/*******************延时函数************************************/
voiddelay(intms)
{
while(ms--)
{
uchari;
for(i=0;i<150;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/***************************************************************/
/*延时函数2*/
voiddelay1(intms)
{
{while(--ms);
}
}
/************检查LCD忙状态********************************/
/*lcd_busy为1时,忙,等待。
lcd-busy为0时,闲,可写指令与数据*/
bitlcd_busy()
{
bitresult=0;
LCD_RS=0;
LCD_RW=1;
LCD_EN=1;
delayNOP();
result=(bit)(P0&0x80);
LCD_EN=0;
return(result);
}
/*写指令数据到LCDRS=L,RW=L,E=高脉冲,D0-D7=指令码*/
oidlcd_wcmd(ucharcmd)/*写指令数据到LCD*/
{
while(lcd_busy());/*只有不忙的时候才能写指令*/
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
_nop_();
_nop_();
P0=cmd;/*cmd代表指令*/
delayNOP();
LCD_EN=1;
delayNOP();
LCD_EN=0;
}
/*写显示数据到LCDRS=H,RW=L,E=高脉冲,D0-D7=数据************************/
voidlcd_wdat(uintdat)/*写显示数据到LCD*/
{
while(lcd_busy());/*只有不忙的时候才能写显示数据*/
LCD_RS=1;
LCD_RW=0;
LCD_EN=1;
_nop_();
_nop_();
P0=dat;/*dat代表显示数据,是8位的二进制数*/
_nop_();
_nop_();
LCD_EN=0;
}
/*************LCD初始化设定****