单片机课程设计报告电子密码锁完整版.docx
- 文档编号:14000728
- 上传时间:2023-06-19
- 格式:DOCX
- 页数:39
- 大小:57.57KB
单片机课程设计报告电子密码锁完整版.docx
《单片机课程设计报告电子密码锁完整版.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告电子密码锁完整版.docx(39页珍藏版)》请在冰点文库上搜索。
单片机课程设计报告电子密码锁完整版
HENsystemofficeroom【HEN16H-HENS2AHENS8Q8-HENH1688】
单片机课程设计报告电子密码锁
山东交通学院
单片机原理与应用课程设计
院(部):
轨道交通学院
班级:
自动化121
学生姓名:
学号:
指导教师:
时间:
—
课程设计任务书
题目电子密码锁设计
系(部)轨道交通学院
专业班级自动化121
学生姓名
学号
06月01日至06月12日共2周
指导教师(签字)
系主任(签字)
年月日
一、设计内容及要求
本实验基于51单片机利用矩阵按键、步进电机、lcd1602等模块实现电子密码锁的输入密码、密码比对、步进电机的驱动、修改密码等功能。
设计内容包括:
1)lcd1602显示;2)矩阵按键的输入;3)24C08的储存于读取;4)步进电机的驱动;5)线路的链接。
设计要求:
1)能演示;2)能回答答辩过程中提问的问题;3)完成设计报告。
二、设计原始资料
单片机原理及接口技术李全利2010年1月
单片机原理及应用教程2006年1月
刘瑞新2003年07月?
三、设计完成后提交的文件和图表
1.计算说明书部分
1)方案论证报告打印版或手写版
2)程序流程图
3)具体程序
2.图纸部分:
具体电路原理图打印版
四、进程安排
教学内容学时地点
资料查阅与学习讨论2天406实验室
分散设计4天406实验室
编写报告2天406实验室
成果验收2天406实验室
按分组选择不同的实验台,每组3人,题目可重复选择,但每题目不得超过10人。
五、主要参考资料
《电子设计自动化技术基础》马建国、孟宪元编清华大学出版2004年4月
《单片机原理及接口技术》张毅刚人民邮电出版社.2008年
《实用电子系统设计基础》姜威2008年1月
《单片机系统的PROTEUS设计与仿真》张靖武2007年4月
指导老师成绩
答辩小组成绩
总成绩
3.总体设计.......................................2
4
密码比较模块..............................6
..............................6
......................................8
......................................9
附录.............................................10
摘要
设计运用了ATMEL公司的AT89S52芯片系统,将微处理器、总线、蜂鸣器、矩阵键盘、存储器和I/O口等硬件集中一块电路板上,通过读取键盘输入的数据(密码)并储存到ATMEL91224C08存储器中,然后判断之后键盘输入的数据与已存储的数据是否相同来决定打开密码箱或锁键盘或报警。
在keil4软件中编程,系统可实现6位密码的处理,并通过控制步进电机控制密码箱门的电子锁,同时还可以修改改密码。
利用单片机系统制作的密码箱安全性能更高,更易操作且体积小。
关键词:
单片机、密码锁、修改密码
1.设计要求
本实验将实现六位数的电子密码锁。
要求使用4X4行列式键盘作为输入,并用LCD实时显示。
具体要求如下:
1.开机时LCD显示“welcometouse”,初始化密码为“123456”,密码可以更改。
2.按下“10”,开始则显示“EnterPlease:
”。
3.随时可以输入数值,并在LCD上实时显示‘*’。
当键入数值时,为了保密按从左到右依次显示‘*’,可键入值为0~9。
4.按下“13”键,则表示确定键按下,进行密码对比。
如相符则在LCD第一行显示“Openthedoor!
”,同时指示灯亮起并且步进电机旋转一定的角度;如不符,则LCD第一行显示“Wrongpassword!
”,并且蜂鸣器同时提示一下。
如果密码连续三次错误则蜂鸣器连续响5下,并且持续5秒不能进行任何操作5.在开锁状态下按下“12”键,进入修改密码状态,LCD同时提示“Enternewcode!
”。
为删除按键,出入之后可以进行删除。
按键为关闭按键,只有在打开状态下才可以关闭,按下之后LCD显示“Closethedoor!
”。
2.功能概述
此设计分为四个功能模块。
第一模块:
按键输入模块,用于密码的输入以及其他的密码操作按键。
第二模块:
LCD模块,是与使用者交流的界面,用于显示各种状态下的内容。
第三模块:
步进电机模块,用于控制密码锁的打开与关闭。
第四模块:
24C08模块,用于储存输入的密码并读出来。
3.总体设计
本次设计作品的主要构成部分包括80C51单片机、LCD1602、24C08、矩阵按键、LED等、蜂鸣器。
如图1总体仿真图,图2实物图。
图1总体电路图
图2密码锁实物图
4.硬件设计
矩阵按键设计
如图3所示矩阵按键由P1口控制,了加强密码的保密性,采用一个4×4的矩阵式键盘可以任意设置用户密码(1-16位长度),从而提高了密码的保密性,同时也能减少与单片机接口时所占用的I/O口线的数目,节省了单片机的宝贵资源,在按键比较多的时候,通常采用这种方法。
每一行与每一列的交叉处不相同,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N根行线与M根列线,即可组成具有N×M个按键的矩阵键盘。
在这种行列式矩阵键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
当确认有按键按下后,下一步就是要识别哪一个按键被按下。
对键的识别方法通常有两种:
一种是通用的组行扫描查询法;另一种是速度较快的线反转法。
此系统中,我们采用线反转法。
首先辨别键盘中有无按键被按下,在单片机I/O口向键盘送全扫描字,然后读入行线状态来判断。
具体方法是:
向行线输出全扫描字00H,把全部列线置成低电平,然后将列线的电平状态读入累加器A中。
如果有按键被按下,总会有一根行线电瓶被拉至低电平从而使行线不全为1。
判断键盘中哪一个按键被按下通常是通过将列线逐列至低电平后,检查行输入状态来实现的。
方法是:
依次给列线送低电平,然后检查所有行线状态,如果全为1,则所按下的按键不在此列;如果不全为1,则所按下的按键必在此列,而且是在与零电平行线相交的交点上的那个按键。
图3矩阵按键电路
LCD显示设计
显示电路是为了给使用者以提示而设置的,显示部分由液晶显示器LCD1602(如图4所示)取代普通的数码管完成。
P0口作为数据传输口、、分别连接RS、RW、E。
开锁时,按下键盘上的开锁按键后,利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。
当密码输入完成时,如果输入的密码正确的话,LCD显示“openthedore!
”。
如果密码不正确,LCD显示屏会显示“Wrongpassword!
”,同时红灯亮起。
通过LCD显示屏,可以清楚地判断出密码锁所处的状态。
图4LCD显示屏
步进电机模块设计
步进电机是一种将电脉冲转化为角位移的执行机构。
通俗一点讲:
当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度步进角。
您可以通过控制脉冲个来控制角位移量,从而达到准确定位的目的;同时您可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。
步进电机28BYJ48型四相八拍电机,电压为DC5V—DC12V。
当对步进电机施加一系列连续不断的控制脉冲时,它可以连续不断地转动。
每一个脉冲信号对应步进电机的某一相或两相绕组的通电状态改变一次,也就对应转子转过一定的角度(一个步距角)。
当通电状态的改变完成一个循环时,转子转过一个齿距。
四相步进电机可以在不同的通电方式下运行,常见的通电方式有单(单相绕组通电)四拍(A-B-C-D-A...),双(双相绕组通电)四拍(AB-BC-?
CD-DA-AB-...),八拍(A-AB-B-BC-C-CD-D-DA-A...)。
如图4所示。
由ULN2003来控制,ULN2003的1、2、3、4引脚分别连接、、、口。
图5步进电机模块
密码修改设计
AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8位存储空间,具有工作电压宽(~)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。
下面是它的电路图。
图5中AT24C02的1、2、3脚是三条地址线,用于确定芯片的硬件地址。
在AT89C51
试验开发板上它们都接地,第8脚和第4脚分别为正、负电源。
第5脚SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送,在AT89C51试验开发板上和单片机的连接。
第6脚SCL为串行时钟输入线,在AT89C51试验开发板上和单片机的连接。
SDA和SCL都需要和正电源间各接一个的电阻上拉。
第7脚需要接地。
通过使用24C02便可以实现对密码的储存于读取进一步实现密码锁的改密码功能。
图6AT24C02
密码比较设计
该模块将输入密码字符串与设定密码字符串比较。
如果相同,执行开锁动作并将输入错误次数清零;如果不同,累计错误次数,如果是第三次输入错误,系统锁死并发出声光告警;如果小于三次,显示密码错误信息,返回密码输入环节。
逻辑框图如图6所示。
图7密码比较流程图
5.软件设计及流程图
系统的软件设计采用汇编语言编码。
设计方法是先用文本编辑器编写源码,然后用软件KeilC51编译,如果没有错误,可连接生成.HEX格式的文件。
如果有错误则无法连接,但可在生成的.OBJ文件中找到代码错误的地方,便于修改。
当然也可以直接在Keil中编码。
生成的HEX文件是记录文本行的ASCII文本文件,在HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。
HEX文件经常被用于将程序或数据传输存储到ROM、EPROM,大多数编程器和模拟器使用HEX文件。
图8单片机控制总体电路
图7为单片机控制总体电路,图8软件运行流程图。
图9软件运行流程图
6.个人体会
通过这次课程设计,让我更加深刻了解课本知识,和以往对知识的疏忽得以补充,在设计过程中遇到一些模糊的操作和专业用语,比如说单片机定时器,以及中断的选择,通过对单片机的操作实现自己设计的功能,在使用手册时,有的数据很难查出,但是这些问题经过这次设计,都一一得以解决,我相信单片机这本书中还有很多我为搞清楚的问题,但是这次的课程设计给我相当的基础知识,为我以后工作打下了严实的基础。
虽然这次课程是那么短暂的2周时间,我感觉到这些天我的所学胜过我这一学期所学,这次任务原则上是设计,其实就是一次大的作业,是让我对课本知识的巩固和应用,对程序的设计,修改以及调试,使我做事的耐心和仔细程度得以提高。
课程设计是培训学生运用本专业所学的理论知识和专业知识来分析解决实际问题的重要教学环节,是对三年所学知识的复习和巩固。
同样,也促使了同学们的相互探讨,相互学习。
因此,我们必须认真、谨慎、踏实、一步一步的完成设计。
如果时间可以重来,我可能会认真的去学习和研究,也可能会自己独立的完成一个项目,我相信无论是谁看到自己做出的成果时心里一定会很兴奋。
此次设计让我明白了一个很深刻的道理:
团队精神固然很重要,但人往往还是要靠自己的努力,自己亲身去经历,这样自己的心里才会踏实,学到的东西才会更多。
参考文献
[1]马建国、孟宪元.电子设计自动化技术基础.机械工业出版社.2004.
[2]姜威.实用电子系统设计基础.北京理工大学出版社.2008.
[3]张靖武.单片机系统的PROTEUS设计与仿真.电子工业出版社.2007.
[4]孙福成.KEILC项目教程.西安电子科技大学出版社.2012.
[5]张毅刚.单片机原理及接口技术.人民邮电出版社.2008.
8.附录:
源程序
#include<>
#include<>
#defineOP_READ0xa1//器件地址以及读取操作,0xa1即为10100001B
#defineOP_WRITE0xa0//器件地址以及写入操作,0xa1即为10100000B
#defineuintunsignedint
#defineucharunsignedchar
#defineKEYP1
#defineNo_key20
#definelcddataP0
sbitSDA=P3^5;//将串行数据总线SDA位定义在为引脚
sbitSCL=P3^4;//将串行时钟总线SDA位定义在为引脚
sbitlcden=P2^2;
sbitlcdrs=P2^0;
sbitlcdrw=P2^1;
sbitlight=P2^3;
sbitlight1=P2^4;
sbitdeng=P3^7;
sbitBEEP=P3^6;
ucharj,z,y,j1,j2;//h使用修改后的密码开锁标志位
ucharn=0,h=0;//中间标志位用于传递信息保证密码修改过后按复位按键密码修改标志位不改变
ucharaa;
ucharcodeFFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};
ucharcodeREV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//反转编码
ucharcodetable[]="Welcometouse!
";
ucharcodetable1[]="Openthedoor!
";
ucharcodetable2[]="EnterPlease:
";
ucharcodetable3[]="Closethedoor!
";
ucharcodetable4[]="Wrongpassword!
";
ucharcodetable5[]="Enternewcode!
";
ucharcodetable6[]="Newcodefinish";
ucharcodekey_table[16]={1,2,3,10,
4,5,6,11,
7,8,9,12,
0,13,14,15};
ucharPassword[]={1,2,3,4,5,6};//设置的初始密码
ucharsave[15];
ucharmima[15];
ucharconflag;//确认标志
ucharlockflag;//键盘锁定标志
ucharstartflag;//开始标志
ucharopen;//门打开标志位
ucharbegain;//开始标志
voiddelay1(uintt);
voiddelay(uintz);
voidwright_com(ucharcom);//写命令函数
voidwright_data(uchardate);//写数据函数
voidinit();//初始化函数
voiddisplay_open();//显示openthedoor
voiddisplay_close();//显示closethedoor
voiddisplay_wrong();
voiddisplay_newcode();//显示输入新密码
voiddisplay_codefinish();//显示新密码成功
voiddelete();//删除输入的最后一个数
ucharkeyscan();//带返回值的键盘扫描程序
voidenter_code(uchart);//
voidenter_code1(uchart);
voidenter_code2(uchart);
voidconfirm();//确认密码对不对,把输入的数据与密码逐一对比
voidconfirm1();
voidsucceed_an();//密码正确时的响应
voidfail_an();//密码失败时的响应
voidalarm();//发出警报声
voidreset();//复位函数
voidreset_save();
voiddisplay_enter();//显示输入
voidmotor_ffw();
voidmotor_rev();
/*****************************************************
函数功能:
延时1ms
(3j+2)*i=(3×33+2)×10=1010(微秒),可以认为是1毫秒
***************************************************/
voiddelay1ms()
{
uchari,n;
for(i=0;i<10;i++)
for(n=0;n<33;n++)
;
}
/*****************************************************
函数功能:
延时若干毫秒
入口参数:
n
***************************************************/
voiddelaynms(uintn)
{
uchari;
for(i=0;i delay1ms(); } voidstart()//开始位 { SDA=1;//SDA初始化为高电平“1” SCL=1;//开始数据传送时,要求SCL为高电平“1” _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SDA=0;//SDA的下降沿被认为是开始信号 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SCL=0;//SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递) } voidstop()//停止位 { SDA=0;//SDA初始化为低电平“0”_n SCL=1;//结束数据传送时,要求SCL为高电平“1” _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SDA=1;//SDA的上升沿被认为是结束信号 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SDA=0; SCL=0; } //**********从AT24Cxx读取数据******** unsignedcharReadData() //从AT24Cxx移入数据到MCU { unsignedchari; unsignedcharx;//储存从AT24Cxx中读出的数据 for(i=0;i<8;i++) { SCL=1;//SCL置为高电平 x<<=1;//将x中的各二进位向左移一位 x|=(unsignedchar)SDA;//将SDA上的数据通过按位“或“运算存入x中 SCL=0;//在SCL的下降沿读出数据 } return(x);//将读取的数据返回 } //*******函数功能: 向AT24Cxx的当前地址写入数据******** //在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0 bitWriteCurrent(unsignedchary) { unsignedchari; bitack_bit;//储存应答位 for(i=0;i<8;i++)//循环移入8个位 { SDA=(bit)(y&0x80);//通过按位“与”运算将最高位数据送到S //因为传送时高位在前,低位在后 _nop_();//等待一个机器周期 SCL=1;//在SCL的上升沿将数据写入AT24Cxx _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SCL=0;//将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲 y<<=1;//将y中的各二进位向左移一位 } SDA=1;//发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线, //以让SDA线转由接收设备(AT24Cxx)控制 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 SCL=1;//根据上述规定,SCL应为高电平 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 _nop_();//等待一个机器周期 ack_bit=SDA;//接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节 //若送高电平,表示没有接收到,传送异常 SCL=0;//SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递) returnack_bit;//返回AT24Cxx应答位 } //***************向AT24Cxx中的指定地址写入数据*****************) voidWriteSet(unsignedcharadd,unsignedchardat) //在指定地址addr处写入数据WriteCurrent { start();//开始数据传递 WriteCurrent(OP_WRITE);//选择要操作的AT24Cxx芯片,并告知要对其写入数据 WriteCurrent(add);//写入指定地址 WriteCurrent(dat);//向当前地址(上面指定的地址)写入数据 stop();//停止数据传递 delaynms(4);//1个字节的写入周期为1ms,最好延时1ms以上 } unsignedcharReadCurrent()//从AT24Cxx中的当前地址读取数据 { unsignedcharx; start();//开始数据传递 WriteCurrent(OP_READ);//选择要操作的AT24Cxx芯片,并告知要读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告 电子 密码锁 完整版