基于单片机的电子密码锁设计报告单片机原理及应用课程设计报告本科论文Word文档下载推荐.docx
- 文档编号:20743860
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:23
- 大小:167.82KB
基于单片机的电子密码锁设计报告单片机原理及应用课程设计报告本科论文Word文档下载推荐.docx
《基于单片机的电子密码锁设计报告单片机原理及应用课程设计报告本科论文Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子密码锁设计报告单片机原理及应用课程设计报告本科论文Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
用C语言编写的主控芯片控制程序与EEPROMAT24C02读写程序相结合,并用Keil软件进行编译,设计了一款可以多次更改密码,具有报警功能的电子密码控制系统。
本密码锁具有设计方法合理,简单易行,成本低,安全实用,保密性强,灵活性高等特点,具有一定的推广价值。
2.单元电路设计(或仿真)与分析
原理图中所使用的元器件功能:
2.1单片机STC89C52功能介绍
STC89C52是51系列单片机的一个型号,STC89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),片内置通用8位中央处理器和Flash存储单元。
STC89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,其引脚图如图2-1示。
图2-1STC89C52引脚分布图
2.2LCD1602显示器介绍
液晶显示模块已作为很多电子产品中都可以看到,显示的主要是数字、专用符号和图形。
1602型LCD显示模块具有体积小,功耗低,显示内容丰富等特点。
1602型LCD可以显示2行16个字符,有8位数产品的通过器件,工作电压为5V,引脚功能如表2-2所示:
表2-2LCD1602引脚接口说明表
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
3
VL
液晶显示偏压
11
D4
4
RS
数据/命令选择
12
D5
5
R/W
读/写选择
13
D6
6
E
使能信号
14
D7
7
D0
15
BLA
背光源正极
8
D1
16
BLK
背光源负极
2.3存储芯片AT24C02介绍
AT24C02内含256×
8位存储空间,具有工作电压宽(2.5~5.5V),AT24C02中带有的片内地址寄存器。
每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个存储单元的读写。
AT24C02的控制字由8位二进制数构成,在开始信号发出以后,主机便会发出控制字,以选择从机并控制总线传送的方向,管脚图如图2-3所示。
图2-3AT24C02引脚图
2.4复位电路
单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作,如图2-4所示的复位电路,该电路在最简单的复位电路下增加了手动复位按键,在接通电源瞬间,电容C1上的电压很小,复位下拉电阻上的电压接近电源电压,即RST为高电平,CPU能够可靠复位,增加手动复位按键是为了避免死机时无法可靠复位。
图2-4复位电路原理图
2.5晶振电路
ST89C52引脚XTAL1和XTAL2与晶体振荡器及电容C2、C1按图2-5所示方式连接。
图2-5晶振电路原理图
2.6存储电路
AT24C02是一个2K位串行CMOSE2PROM,内部含有256个8位字节,AT24C02有一个16字节页写缓冲器,其存储电路如图2-6所示。
图2-6掉电存储电路原理图
图中1、2、3脚是三条地址线,用于确定芯片的硬件地址,在AT89S51上它们都能接地,第5脚和第8脚分别为正、负电源。
AT24C02中带有片内地址寄存器,每写入或读出一个数据字节后,该地址寄存器自动加1,以实现对下一个储存单元的读写,所有字节均以单一操作方式读取。
2.7键盘输入电路
由于本设计所用到的按键数量较多而不适合用独立按键式键盘,采用的是矩阵式按键键盘,它由行线和列线组成,按键位于行列的交叉点上,密码锁的密码由键盘输入完成,与独立式按键键盘相比,要节省很多I/O口,单片机引脚接法如图2-7所示:
图2-7键盘输入原理图
2.8显示电路
本设计的显示部分由液晶显示器LCD1602取代普通的数码管来完成,当需要对密码锁进行开锁时,按下键盘上的开锁按键后利用键盘上的数字键0-9输入密码,每按下一个数字键后在显示器上显示一个*,输入多少位就显示多少个*。
当密码输入完成时,按下确认键,如果输入的密码正确的话,LCD显示“OPPEN”,电子密码锁被打开,如果密码不正确,LCD显示屏会显示“ERROR”,电子密码锁不能被打开,通过LCD显示屏,可以清楚的判断出密码锁所处的状态。
1602型LCD基本操作程序如下表所示:
LCD1602基本操作程序
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
无
读数据
RS=H,R/W=H,E=H
D0—D7=数据
写数据
RS=H,R/W=L,D0—D7=数据,E=高脉冲
图2-8显示电路原理图
2.9报警电路
报警部分由陶瓷压电发声装置及外围电路组成,加电后不发声,当有键按下时,“叮”声,每按一下,发声一次,密码正确时,不发声直接开锁,当密码输入错误时,单片机的P2.1引脚为低电平,三极管T3导喇叭发出噪鸣声报警。
如图3-10所示:
图2-9报警电路原理图
3.电路的安装与调试
软件调试:
软件调试主要是利用proteus仿真软件完成电路的搭建,运行以发现设计中的错误及时改正。
硬件调试:
硬件调试主要是检测硬件电路是否有短路、断路、虚焊等。
具体步骤及测试结果如下:
(1)、检查电源与地线是否全部连接上,用万用表对照电路原理图测试各导线是否完全连接,对未连接的进行修复。
(2)、参照原理图,检查各个器件之间的连接是否连接正确,是否存在虚焊,经测试,各连接不存在问题。
(3)、以上两项检查并修复完后,给该硬件电路上电,电源指示灯点亮。
系统功能调试:
通过软件仿真显示,系统基本能完成要求,由于选用电阻阻值太大,导致显示部分没有正确的做出来,后来采用了阻值较小的电阻,解决了此问题。
4.心得体会、存在问题和进一步的改进意见等
心得体会:
这次单片机课程设计历时两个星期的时间,在这次设计过程里我体验了从设计、画板、编程、焊板到调试的整个过程。
对于电子密码锁这个题目,由于以前学单片机这个课程时,做过类似相关的实验,觉得这个比较简单而且做出的东西也比较直观,在确定题目之后,查阅了大量的资料,初步完成了电路设计方案。
通过课程设计让我对单片机系统有了较详细的了解,而且触及到与其相关的很多新知识,而且随着电子技术的发展简易数字电压表也会越来越完善,作为大学生的我们应该跟上时代的步伐,时刻关注形势变化,不断充实更新自己的知识。
在设计中既应用到了基础知识,也用到了专业知识,它是对三年来所学知识的综合考察。
最重要的是我通过亲自设计,亲自绘制原理图,印制电路板以及系统调试培养了我的耐心和细心,这对我以后的工作和学习有很大的帮助。
存在问题:
在proteus仿真软件中仿真现象很理想,到了实际焊接就出了不少问题,24C02芯片不会用,布局不理想,焊接出来的电路没有现象,经过仔细检查,查出问题所在,改正错误,调试电路,符合预期的现象
程序的设计,也许是起初想的太简单,设计时到了细节处,也出了不少问题,而且很难被检查出来,但是最后经过不断努力,还是写出来正确的代码。
进一步改正:
不能根据声音来判断密码锁的状态,尝试通过修改程序来改变蜂鸣器的声音;
LCD屏显示不是很稳定;
蜂鸣器发声时高时低。
五.参考文献
[1]叶启明.单片机制作的新型安全密码锁[J].家庭电子.2000,第六期:
24-27
[2]胡乔木.中国大百科全书.中国大百科全书出版社.1993
[3]李明喜.新型电子密码锁的设计[J].机电产品开发与创新.2004,第八期:
77-79
[4]董继成.一种新型安全的单片机密码锁[J].电子技术.2004,第三期:
55-60
[5]王宽仁.可靠安全的智能密码锁[J].电子技术应用.2001年第2期
[6]胡汉才.单片机原理及其接口技术(第2版)[M].北京:
清华大学出版社,2004
6.附录
1、整体电路原理图
2、元器件明细表(主要用于列出本次课程设计中所用的全部元器件)
STC80C52单片机
1个
三极管(8550)
LCD0602
排阻(102)
按键
17个
滑变(103)
24C02
电容
若干
蜂鸣器
电阻
12M晶振
万用板
2块
LED
杜邦线
8根
3、源程序
#include<
reg52.h>
stdio.h>
intrins.h>
#defineCHECK_BUSY
#defineDataPortP0
#defineKeyPortP1
sbitRS=P2^4;
//液晶显示的定义端口
sbitRW=P2^5;
sbitEN=P2^6;
sbitscl=P3^0;
//24c02端口定义
sbitsda=P3^1;
sbitbaojing=P2^1;
//报警器
sbitjdq=P2^0;
//继电器
sbitjb=P2^3;
//警报灯
sbitclose=P2^2;
unsignedcharold1,old2,old3,old4,old5,old6;
//原始密码000000
unsignedcharnew1,new2,new3,new4,new5,new6;
//代表新密码
voiddelay1(unsignedintm)
{
unsignedintn;
for(n=0;
n<
m;
n++);
}
voiddelay(unsignedintm)
unsignedinta;
unsignedcharb;
for(a=0;
a<
a++)
{for(b=0;
b<
125;
b++);
voidDelayUs2x(unsignedchart)
{
while(--t);
voidDelayMs(unsignedchart)
while(t--)
{
DelayUs2x(256);
}
voidbaojingqi()
baojing=0;
if(baojing==0)
{
bitLCD_Check_Busy(void)//判忙函数
#ifdefCHECK_BUSY
DataPort=0xFF;
RS=0;
RW=1;
EN=0;
_nop_();
EN=1;
return(bit)(DataPort&
0x80);
#else
return0;
#endif
voidLCD_Write_Com(unsignedcharcom)//写入命令函数
//while(LCD_Check_Busy());
//忙则等待
DelayMs(5);
RS=0;
RW=0;
EN=1;
DataPort=com;
_nop_();
EN=0;
voidLCD_Write_Data(unsignedcharData)//写入数据函数
//while(LCD_Check_Busy());
RS=1;
DataPort=Data;
voidLCD_Clear(void)//清屏函数
LCD_Write_Com(0x01);
voidLCD_Write_Char(unsignedcharx,unsignedchary,unsignedcharData)//写入字符函数
if(y==0)
{LCD_Write_Com(0x80+x);
}
else
{LCD_Write_Com(0xC0+x);
LCD_Write_Data(Data);
voidLCD_Write_String(unsignedcharx,unsignedchary,unsignedchar*s)//写入字符串函数
while(*s)
LCD_Write_Char(x,y,*s);
s++;
x++;
voidLCD_Init(void)//液晶显示的初始化函数
LCD_Write_Com(0x38);
//显示模式设置
LCD_Write_Com(0x08);
//显示关闭
//显示清屏
LCD_Write_Com(0x06);
//显示光标移动设置
LCD_Write_Com(0x0C);
//显示开及光标设置
unsignedcharKeyScan(void)//键盘扫描函数,使用行列反转扫描法
unsignedcharcord_h,cord_l;
//行列值中间变量
KeyPort=0x0f;
//行线输出全为0
cord_h=KeyPort&
0x0f;
//读入列线值
if(cord_h!
=0x0f)//先检测有无按键按下
DelayMs(10);
//去抖
if((KeyPort&
0x0f)!
=0x0f)
KeyPort=cord_h|0xf0;
//输出当前列线值
cord_l=KeyPort&
0xf0;
//读入行线值
while((KeyPort&
0xf0)!
=0xf0);
//等待松开并输出
return(cord_h+cord_l);
//键盘最后组合码值
}}return(0xff);
//返回该值
unsignedcharKeyPro(void)
switch(KeyScan())
case0x7e:
break;
//0按下相应的键显示相对应的码值
case0x7d:
return1;
//1
case0x7b:
return2;
//2
case0x77:
return3;
//3
case0xbe:
return4;
//4
case0xbd:
return5;
//5
case0xbb:
return6;
//6
case0xb7:
return7;
//7
case0xde:
return8;
//8
case0xdd:
return9;
//9
case0xdb:
return10;
//10
case0xd7:
return11;
//11
case0xee:
return12;
//12
case0xed:
return13;
//13
case0xeb:
return14;
//14
case0xe7:
return15;
//15
default:
return0xff;
voidinit()//24c02初始化子程序
scl=1;
sda=1;
voidrespons()//应答
unsignedchari;
while((sda==1)&
&
(i<
250))
i++;
scl=0;
voidclock()//I2C总线时钟
unsignedchari=0;
255))
voidstart()//启动I2C总线
sda=0;
voidstop()//停止I2C总线
voidwritebyte(unsignedchara)//写一个字节
unsignedcharb,tem;
tem=a;
for(b=0;
8;
b++)
tem=tem<
<
1;
sda=CY;
//temp左移时,移出的值放入了CY中
//待sda线上的数据稳定后,将scl拉高
nop_();
unsignedcharreadbyte()//读一个字节
unsignedchari,j,k=0;
for(i=0;
i<
i++)
if(sda==1)j=1;
elsej=0;
k=(k<
1)|j;
_nop_();
return(k);
unsignedcharread24c02(unsignedcharaddress)//从24c02的地址address中读取一个字节数据
unsignedchardate;
start();
writebyte(0xa0);
clock();
writebyte(address);
writebyte(0xa1);
date=readbyte();
stop();
delay1(100);
return(date);
voidwrite24c02(unsignedcharaddress,unsignedcharinfo)//向24c02的address地址中写入一字节数据info
writebyte(info);
delay1(5000);
//这个延时一定要足够长,否则会出错。
因为24c02在从sda上取得数据后,还需要一定时间的烧录过程。
main()
unsignedcharnum,i,bj,c=0;
unsignedchartemp[6];
bitFlag;
init();
//初始化24C02
LCD_Init();
//初始化液晶屏
//延时用于稳定,可以去掉
LCD_Clear();
//清屏
LCD_Write_String(0,0,"
welcome"
);
//写入第一行信息
old1=read24c02(110);
old2=read24c02(111);
old3=read24c02(112);
old4=re
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子 密码锁 设计 报告 原理 应用 课程设计 本科 论文