电子科技学院课程设计论文文档格式.docx
《电子科技学院课程设计论文文档格式.docx》由会员分享,可在线阅读,更多相关《电子科技学院课程设计论文文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
![电子科技学院课程设计论文文档格式.docx](https://file1.bdocx.com/fileroot1/2022-12/12/7e469b32-6209-4639-9c5d-ec5f7f53714e/7e469b32-6209-4639-9c5d-ec5f7f53714e1.gif)
随着人们生活水平的提高,如何进行防盗这一问题变得尤为突出,传统的机械锁由于其构造简单,被撬的事件屡见不鲜。
电子锁由于其保密性高,使用灵活性好,安全系数高,更具人性化等特点得到迅速的推广。
电子锁,它也是以51系列单片机为核心,利用单片机的编程来操纵单片机IO口电平的准确变化,不但能够实现差不多的密码锁功能,还能够进行密码的存储。
假如在要求较高的情况还能够利用通信功能来实现远程通信,从而达到远程操纵的功能。
再配以相应硬件电路,完成密码的设置、存贮、识别和显示、报警信号等功能。
单片机接收键入的密码,并与存贮在EEPROM中的密码进行比较,假如密码正确,那么点亮led灯模拟开锁;
假如密码不正确,那么同意操作人员重新输入密码,最多可输入三次;
假如三次都不正确,那么会发出报警声,同时关闭显示〔锁死〕,假如要是不记得了密码后,锁将不能够再打开,就只能通过往24C02中重新写入程序,从而达到恢复初始的值,也不至于因为密码的不记得而是电子锁报废。
1.1显示模块选择方案与论证
方案一:
用led数码管显示,价格相对来说较廉价一些,能够降低成本,且驱动程序简单。
但硬件连接会相对复杂,同时数码管只能进行数字和简单的字母显示,不能很到位的显示出要显示的内容。
方案二:
用1602液晶显示,价格比方案一要略微的高一些,驱动程序也相关于更加的复杂些。
但能够很好的显示字符。
因此为了达到一个更好的显示效果,因此选择了第一种显示方法。
1.2输入模块选择方案与论证
方案一:
用独立按键进行输入,编写程序是程序比较简单但较啰嗦,会浪费许多IO口。
用矩阵键盘进行输入,矩阵键盘的扫描程序理解起来要困难一点,但能够节省IO口。
因此选择第二方案,更加的合适一些。
2.3电路设计最终方案确定
综以上所述:
选择以矩阵键盘作为输入,1602作为显示的方案。
第二章:
主操纵器与外围器件
2.1STC89C52单片机
ST89C52是一种低功耗、高性能CMOS8位微操纵器,与工业80C51产品指令和引脚完全兼容。
并具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,ST89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,同意RAM、定时器/计数器、串口、中断接着工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
2.2AT24C02
2.2.1AT24C02是采纳I^2C总线标准的常用串行EEPROM存储芯片,AT24C02它具有2Kbits的存储容量,有一个8字节的页写缓冲器,有专门的写保护功能。
图1.直插封装引脚图
表1.引脚功能表
3.2.1AT24C02的读写操作
图2.读时序
字节写时序
入AT24C02的那一个字节。
主机在收到从机另一个应答信号后,再发送数据到其内部字节地址说明的存储单元。
AT24C02再次应答,并在主机产生停止信号后开始内部数据的擦写。
在内部擦写的过程中,AT24C02不对主机有任何的请求。
图3.页写时序
图4.马上地址读时序
图5.选择性读时序
选择性读。
选择性读操作同意主机对24C02寄存器的任意字节进行读操作。
主机首先通过发送起始信号、从机地址和它想读取的字节数据的地址、执行一个伪写操作。
在24C02应答之后,主机重新发送起始信号和从机地址,如今R/W位置1,24C02响应并发送应答信号,然后输出所要求的一个8字节数据,主器件不发送应答信号但产生一个停止信号。
图6.连续读时序
图7.AT24C02的连接电路
2.31602液显
2.3.1引脚功能说明
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时能够通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,
RS=1:
选择数据寄存器,RS=0:
选择指令寄存器。
第5脚:
R/W为读写信号线,
当RW=1:
时进行读操作,RW=0:
时进行写操作。
当RS=RW=0能够写入指令或者显示地址,
当RS=0,RW=1时能够读忙信号,
当RS=1,R/W=0:
时能够写入数据。
第6脚:
E端为使能端,
当E端由高电平跳变成低电平时,液晶模块执行命令。
图8.1602显示电路
3.3.2指令说明
表2.1602指令功能表〔1〕
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置
I/D:
光标移动方向,I/D=1:
右移,I/D=0:
左移
S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平那么无效。
指令4:
显示开关操纵。
D:
操纵整体显示的开与关
D=1:
表示开显示,D=0:
表示关显示
C:
操纵光标的开与关
C=1:
表示有光标,C=0:
表示无光标
B:
操纵光标是否闪烁
B=1:
闪烁,B=0:
不闪烁。
指令5:
光标或显示移位
S/C=1:
时移动显示的文字,S/C=0:
时移动光标。
指令6:
功能设置命令DL:
DL=1:
为4位总线,DL=0:
为8位总线
N=0:
单行显示,N=1:
双行显示
F=0:
显示5x7的点阵字符,F=1:
显示5x10的点阵字符。
表3.1602功能指令表〔2〕
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址
BF:
为忙标志位,BF=1:
表示忙,如今模块不能接收命令或者数据,BF=0:
表
示不忙。
指令10:
写数据。
指令11:
读数据。
2.3.3读写操作时序图
图9.读操作时序图
图10.写操作时序图
2.3.4初始化常用指令
写指令38H:
显示模式设置〔设置16X2显示5X7点阵,8位数据接口〕。
写指令08H:
显示关闭
写指令01H:
显示清屏
写指令06H:
显示光标移动设置〔写一个字符后地址指针加1〕
写指令0CH:
显示开及光标设置
2.4矩阵键盘
矩阵键盘和独立按键的接法有很大的区别,但它们扫描的方法在本质上是一样的。
独立按键是通过一端接地,通过单片机去扫描判断是否有按键按下。
如检测到有IO端口为低时,那么说明有按键按下。
而矩阵键盘上面的按键两端〔分为行和列〕都接在单片机上,是通过人为的让其一端〔行或列〕为高或为低来进行扫描,再反操作〔列或行〕。
在通过列和行的总体情况判断是否有按键按下。
矩阵键盘的电路连接图如下:
图11.矩阵键盘电路连接图
2.5其他外围电路
2.5.1单片机复位电路
图12.复位电路
在系统运行的过程中,有时可能对系统需要进行复位,为了幸免对硬件系统经常加电和断电造成的损害,设计了手动的复位电路。
如下图。
这种电路的设计,在系统的运行过程中需要复位时,只需使开关闭合,在RST端就会出现一定时间的高电平信号,从而使单片机实现复位。
3.5.2单片机晶振电路
图13.晶振电路
单片机必须在时钟的驱动下才能进行工作。
MCS-51系列单片机内部都有一个时钟振荡电路,只需外接晶振源,就能产生一定频率的时钟信号送到单片机的内部的各个单元,决定单片机的工作速度。
如图确实是内部时钟工作方式的电路图,这是一种常用的方式。
这种方式是外界振荡源,本设计就采纳这种外接晶振的方法。
电路中的两个电容的作用有两个:
一是关心振荡器起振〔C1C2的值大,起振的速度慢;
反之,速度快。
〕;
二是对振荡器的频率起到微调的作用〔C1C2的值大,频率略有减少,反之,频率略有提高〕。
C1C2的值采纳20pF。
2.5.3提示电路
图14.提示电路
提示电路要紧由蜂鸣器报警电路和led灯指示电路组成。
当密码输入正确时,蜂鸣器发出‘滴’的一声,当密码输入错误的时候蜂鸣器发出短暂〔2~3秒的延时〕的报警声,当密码输入错误超过三次以上时蜂鸣器发出较长的报警声。
Led灯是用来指示模拟锁的状态的,led亮了代表锁是打开状态,相反的灯不亮的话确实是代表锁是关闭状态。
第三章功能与程序流程图
3.1软件功能简述
1、密码更改功能:
首先,系统应该有一个默认的初始密码(123456),这是在开机的时候就差不多自己拥有的。
更改功能要紧是为了满足需要,自行对初始密码进行修改。
该功能要做的确实是将新输入的密码作为新的密码。
〔必须实在锁关闭的状态下〕
2、密码输入功能:
用户输入密码。
该功能要做的确实是将输入的密码与原始的密码进行一个对比,假如一致的话就开锁。
3、取消功能:
要紧用于在误输后能够即使的取消并更改。
4、断电密码保护:
将输入的密码存储在24C02中,当断电后再次上电时将密码读出来。
就能保证原来的密码的不丢失。
5、LCD显示功能:
当进行某一项操作后,LCD上有提示字符,同时LED闪烁提示(要紧是为了模拟锁的开与关),蜂鸣器开始产生相应的声音。
3.2恢复原始密码程序
在使用的过程中难免会有不记得密码,或者是因为操作方法不对导致密码错乱的时候,因此我们制作了一个能够恢复初始值〔123456〕的函数〔类似于常常说的刷机〕。
如此就能够就更更句人性化一点,不至于使整个东西不能再用。
#include“AT24C02.h”
ucharpassword[16]={'
1'
'
2'
3'
4'
5'
6'
\0'
\
0'
};
voidmain()
{
for(i=0;
i<
16;
i++)
writeadd(23,password[i])
}
3.3功能操作说明
板子上的纸片是作为提示作用的,用于显示按键的功能。
一上电之后能够直截了当输密码,也能够更改密码〔需要在闭锁的状态下进行〕。
改密码需要之前的密码,只有在原始密码输入正确的前提下才能输入新的密码,假如三次不正确那么会关闭系统同时蜂鸣器会进行报警。
具体的操作能够按照显示提示进行。
按键的操作能够参照附录1中的按键功能分配图示。
3.4主函数流程图
图15.主函数流程图
致谢
首先我们要感谢刘清华老师的大力关心和支持。
在整个电子设计和论文设计过程当中,为我的课程设计带来了很大关心,从论文设计的选题,构思到最后定稿以及后续的修改校正的各个环节给予细心的指导,使我得以最终完成论文设计。
同时在我们完成课程设计的过程中提供了许多指导性的意见,使我们受益匪浅。
在此,我衷心感谢刘老师给予我的关心和教育。
此外,衷心感谢我们小组的其他成员以及所有对本课题的研究设计和论文撰写有过关心的同学,因为有大伙的共同努力才使得本次课程设计能够实顺利的完成,大伙都辛苦了。
参考文献
[1]郭天祥.《51单片机C语言教程》.电子工业出版社
[2]谭浩强.《C程序设计》.清华大学出版社
[3]陆旭明.《单片机设计应用和仿真》.北京大学出版社
[4]王振红、张常年.《综合电子设计和实践》.清华大学出版社
[5]朱春平.《单片机应用技术》.中国劳动社会保障出版社
[6]刘守义.《单片机应用技术》.西安电子科技大学出版社
[7]李全利.《单片机原理和应用技术》.高等教育出版社
[8]华成英、童诗白.《模拟电子技术基础》.高等教育出版社
[9]谢嘉奎.《电子线路》.高等教育出版社
[10]求是科技.《单片机典型模块设计实例导航》.人民邮电出版社
附录1物料清单与按键分布图示
元件名称
数量
1602
1块
STC89C52
1片
按钮按键
17个
瓷片电容
2个
AT24C02
极性电容
1个〔10uf〕
电阻
假设干
三极管
1个〔pnp〕
蜂鸣器
1个
Led灯
1个〔红〕
万能板
USB线
1根
单行排座
表4.物料清单
4
8
退格
1
5
9
确认
2
6
关锁
输入
3
7
未用
改密
表5.按键分布
附录2AT24C02驱动程序
#ifndef__24C02_h__
#define__24C02_h__
#defineucharunsignedchar
#defineuintunsignedint
sbitSDA=P2^6;
sbitSCL=P2^7;
/***************微秒级延时,用于I2C总线操作****************/
voiddelays()
;
/*******延时函数**********/
voiddelayms(uintxms)
uinti,j;
xms;
for(j=0;
j<
121;
j++);
/********总线初始*********/
voidinits()
SCL=1;
delays();
SDA=1;
//将数据线和时钟线都拉高来释放总线
/*******起始信号*********/
voidstart()
SDA=0;
/**********停止信号***********/
voidstop()
/************应答信号**************/
voidrespons()
uchari;
//等待SDA拉低,拉低后那么不成立,
while((SDA==1)&
&
(i<
250))i++;
//否那么一直等到一定时间后默认应答
SCL=0;
/***********写一个字*************/
voidwritebyte(uchardat)
uchari,temp;
temp=dat;
8;
SCL=0;
//低电平,使数据能过发生改变
temp=temp<
<
1;
SDA=CY;
//将数据传给数据线
delays();
SCL=1;
//高电平时,数据稳定,写数据
delays();
//数据线在不用的情况下将其释放
/**************读一个字****************/
ucharreadbyte()
uchari,k;
SDA=1;
for(i=0;
{
SCL=1;
k=(k<
1|SDA);
SCL=0;
delays();
}
returnk;
/***********往AT24C02里面写数据********/
voidwriteadd(ucharaddress,uchardate)
start();
writebyte(0xa0);
//写地址并说明接下来的确实是写操作
respons();
writebyte(address);
writebyte(date);
stop();
/*********************
ucharreadadd(ucharaddress)//读数据
uchardate;
writebyte(0xa1);
//改变方向,需要重新进行开始,写地址并说明接下来是读操作
date=readbyte();
returndate;
#endif
附录3主函数代码
#include<
reg51.h>
//头文件
string.h>
//包含字符串复制的头文件
#include“24C02.h”
#defineucharunsignedchar//用uchar代替unsignedchar
#defineuintunsignedint//用uint代替unsignedint
sbitRS=P2^0;
//P2^0为数据命令选择选择
sbitRW=P2^1;
//读写标志
sbitEN=P2^2;
//使能
sbitLED=P1^0;
//灯亮灭表示门开关
sbitBUZ=P2^4;
//定义蜂鸣器
voidcompare();
//比较函数声明
voidclr();
//清除函数声明
uchary=0,key,equal=17,m=0;
temp,f=0;
//定义变量
static
Ucharpassword[16]={'
ucharbuf[16]={'
ucharclear[16]={'
//定义字符数组
ucharcodeenter[]={“Inputapassword”};
ucharcodekeys[]={“Enter”};
ucharcodewrong[]={“Tryagain.”};
ucharcoderight[]={“Thelockisopen”};
ucharcodebye[]={“Byebye!
”};
ucharcodenew[]={“newpassword”};
ucharcodeinit[]={“initialpassword”};
ucharcodesuc[]={“setsuccess”};
//定义字符串数组
voiddelay(uintx)//延时
ucharj;
uinti;
for(i=0;
x;
for(j=0;
110;
j++)//延时约一毫秒
;
ucharkeyscan()//键盘扫描函数,将相应的键值返回
uchari,j,temp,scan[]={0xef,0xdf,0xbf,0x7f};
4;
i++)//列扫描
P3=scan[i];
emp=0x01;
j++)//行扫描
{
if(!
(P3&
temp))//判断是那一列
return(i+j*4);
temp<
=1;
}
return16;
//写命令
voidWcom(ucharinst)
RS=0;
//写入命令
RW=0;
P0=inst;
EN=1;
delay(5);
EN=0;
//写数据
voidWdata(uchardates)
RS=1;
P0=dates;
//写入数据
voidinitial()//1602初始化函数
EN=0;
Wcom(0x38);
//两行显示,数据总线为八位。
Wcom(0x0c);
//开显示器