基于51单片机的电子密码锁设计Word文件下载.docx
- 文档编号:22353146
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:27
- 大小:225.11KB
基于51单片机的电子密码锁设计Word文件下载.docx
《基于51单片机的电子密码锁设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的电子密码锁设计Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。
准双向口/弱上拉(普通8051传统I/O口);
可设置成4种模式:
准双向口/弱上拉,强推挽/强上拉,仅为输入/高阻,开漏,每个I/O口驱动能力均能达到20mA,但整个芯片最大不要超过120mA;
ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无需专用仿真器,可通过串口(P3.0/P3.1)直接下载应用程序,数秒即可完成一片;
有EEPROM功能;
看门狗;
内部集成MAX810专用复位电路(外部晶振12M以下时,复位脚可直接1K电阻到地);
A/D转换,10位精度ADC,共8路,转换速度可达250K/S;
具备双串口;
工作温度范围:
-40-+85oC(工业级),0–75oC(商业级);
40管脚封装
由图2可知,单片机的18和19管脚接时钟电路,19管脚接外部晶振和微调电容的一端,在片内它是振荡器倒相放大器的输入,18管脚接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出,9引脚是复位输入端,接上电容、电阻及开关后构成上电复位电路。
图2主控制器STC12C5A60S2
3.21602液晶介绍
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
下面以长沙太阳人电子有限公司的1602字符型液晶显示器为例,介绍其用法。
一般1602字符型液晶显示器实物如图-4:
图-41602字符型液晶显示器实物图
2.1602LCD的基本参数及引脚功能
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图-5所示:
图-51602LCD尺寸图
1602LCD主要技术参数:
显示容量:
16×
2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×
4.35(W×
H)mm
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表-3所示:
编号
符号
引脚说明
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
背光源负极
表-3:
引脚接口说明表
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电
平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15脚:
背光源正极。
第16脚:
背光源负极。
3.1602LCD的指令说明及时序
1602液晶模块内部的控制器共有11条控制指令,如表-4所示:
序号
指令
清显示
光标返回
*
置输入模式
I/D
S
显示开/关控制
D
C
B
光标或字符移位
S/C
R/L
置功能
DL
N
F
置字符发生存贮器地址
字符发生存贮器地址
置数据存贮器地址
显示数据存贮器地址
读忙标志或地址
BF
计数器地址
写数到CGRAM或DDRAM)
要写的数据内容
从CGRAM或DDRAM读数
读出的数据内容
表-4:
控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说
明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电
平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接
收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
与HD44780相兼容的芯片时序表如下:
读状态
输入
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=高脉冲
表-5:
基本操作时序表
读写操作时序如图-6和图-7所示:
图-6读操作时序
图-7写操作时序
4.1602LCD的RAM地址映射及标准字库表
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图-8是1602的内部显示地址。
图-81602LCD内部显示地址
例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?
这样不行,因为写入显示地址时要求最高位D7
恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。
每次输入指令前都要判断液晶模块是否处于忙的状态。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显
示出来,我们就能看到字母“A”
图-9字符代码与图形对应图
5.1602LCD的一般初始化(复位)过程
延时15mS
写指令38H(不检测忙信号)
延时5mS
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:
显示模式设置
写指令08H:
显示关闭
写指令01H:
显示清屏
写指令06H:
显示光标移动设置
写指令0CH:
显示开及光标设置
3.5蜂鸣器
图12蜂鸣器模块
本设计采用的是无源蜂鸣器如下图:
图13无源蜂鸣器
该蜂鸣器接入电路时,靠近+极标志的管脚接+5V电源,负极接8550集电极,8550发射极接地,基极接2K电阻。
3.6键盘接口
键盘接口电路如图13,本次设计中,按键有4个,每个按键各占用一根I/O线,各按键相互独立,彼此的工作状态互不影响,STC单片机自带上拉电阻因此无需外接上拉电阻,用查询法完成按键功能。
图14键盘接口电路
4.1硬件测试
电子万年历的电路系统较大,对于焊接方面更是不可轻视,庞大的电路系统中只要出于一处的错误,则会对检测造成很大的不便,而且电路的交线较多,对于各种锋利的引脚要注意处理,否则会刺被带有包皮的导线,则会对电路造成短路现象。
在本成电子万年历的设计调试中遇到了很多的问题。
回想这些问题只要认真多思考都是可以避免的,以下为主要的问题:
(1)串口下载芯片232发烫,单片机晶振不起振
(2)1602在显示时间时出现黑格子,遮挡了时间
(3)对万年历修改时间或日期时,有时时间改变2次。
解决:
根据仪器的测试,发现电路引脚有接错的现象,重新焊接后晶振,复位正常,程序能够下载。
1602出现黑格子是由于在其第三引脚没加电阻分压导致,加上5K电阻后正常。
按键延时较短致使按键次数多加。
4.2软件测试
电子成年历是多功能的数字型,可以看当前日期,时间。
电子成年历功能很多,所以对于它的程序也较为复杂,所以在编写程序和调试时出现了相对较多的问题。
最后经过多次的模块子程序的修改,一步一步的完成,最终解决了软件。
在软件的调试过程中主要遇到的问题如下:
1:
1602显示的时间不完整,最后在液晶初始化程序中给加上该显示的数字即可。
2:
在调整时间时光标闪烁不规律,原因的由于错用DS1302停振指令所致,最后加上一个变量进行控制即可。
4.3测试结果分析与结论
4.3.1测试结果分析
(1).在测试中遇到单片机晶振不起振、232芯片发烫,首先使用试测仪对电路进行测试,观察是否存在漏焊,虚焊,或者元件损坏.
(2).1602液晶有黑色背景出现,首先使用试测仪对电路进行测试,观察电路是否存在短路现象。
查看烧写的程序是否正确无误,对程序进行认真修改
4.3.2测试结论
经过多次的反复测试与分析,可以对电路的原理及功能更加熟悉,同时提高了设计能力与及对电路的分析能力.同时在软件的编程方面得到更到的提高,对编程能力得到加强.同时对所学的知识得到很大的提高与巩固.
作品总结
在整个设计过程中,发挥团队精神,分工合作,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。
较好的完成了作品。
达到了预期的目的。
完了最初的设想。
在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成。
反而达到事半功倍的效果。
对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。
程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,理清了思路,反而得心应手。
在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一脚印。
也练就了我们的耐心,做什么事都在有耐心。
此次电子制作中学到了很多很多东西,这是最重要的。
总之,参加这次电子制作我的能力得到了全方位的提高。
致谢词
感谢学院给我提供了一个展现自己的舞台,给我一次难得煅炼的机会,使得我的动手能力和专业技能都有了很大的提高。
在做作品的日子里得到了指导教师的悉心指导,在此向我的指导教师致以诚挚的谢意。
感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我对这次的作品完成有了信心和动力,也给了我很多无私的帮助和支持,我在此深表谢意。
参考文献:
单片机实验设计100例
附录1系统电路原理图
附录2实物图
附录3系统程序清单
/*********************************************************************************************
#include<
reg52.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitrs=P2^0;
//定义液晶显示器控制端口
sbitrw=P2^1;
sbiten=P2^2;
sbitK1=P1^0;
//定义按键控制
sbitK2=P1^1;
sbitK3=P1^2;
sbitK4=P1^3;
ucharshi,fen,miao,ri,yue,nin;
ucharcodetable[]={"
Jinxin&
GYY"
};
ucharcodetable1[]={"
00:
00:
57"
ucharnum,num1,count;
uinti,sh,ge,s,g;
voiddelay(uchartime)//延时
{
uintj;
for(;
time>
0;
time--)
for(j=0;
j<
125;
j++);
}
voidwrite_com(ucharcom)//写指令函数
{
en=0;
rs=0;
delay(5);
P0=com;
en=1;
}
voidwrite_data(uchardat)//写数据函数
rs=1;
P0=dat;
voidinit()//初始化
rw=0;
write_com(0x38);
//设置16X2显示,5X7点阵,8位数据接口
write_com(0x0c);
//设置开显示,不显示光标
write_com(0x06);
//写一个字符后地址指针加1
write_com(0x01);
//显示清零,数据指针清零
for(i=0;
i<
(sizeof(table)-1);
i++)//第一行写
write_com(0x80+i);
write_data(table[i]);
(sizeof(table1)-1);
i++)//第二行写
write_com(0x80+0x40+i);
write_data(table1[i]);
miao=56;
fen=59;
shi=23;
TMOD=0x01;
//time0作为定时器工作在模式1下
TH0=(65536-50000)/256;
TL0=(65536-50000)%6;
EA=1;
//开启总中断
ET0=1;
//开启time0中断
TR0=1;
//启动time0
voidwrite_sfm(ucharadd,ucharnum)//时分秒函数
sh=num/10;
//分离出十位
ge=num;
//分离出个位
write_com(0x80+0x40+add);
//第二行数据指针位置调整
write_data(0x30+sh);
//更改显示数据的十位
write_data(0x30+ge);
//更改显示数据的个位
voidtimer0()interrupt1//time0中断
TH0=(65536-50000)/256;
//重装初始值
TL0=(65536-50000)%6;
count++;
if(count==20)//20次到则满一秒
count=0;
miao++;
if(miao==60)
miao=0;
fen++;
if(fen==60)
fen=0;
shi++;
if(shi==24)
shi=0;
write_sfm(4,shi);
write_sfm(7,fen);
}
write_sfm(10,miao);
voidkeyscan()//键盘扫描
{if(K1==0)//按下K1
if(K1==0)
num1++;
while(!
K1);
//等待释放
if(num1==1)
TR0=0;
write_com(0x0e);
//显示光标,不闪烁
write_com(0x80+0x40+0x0b);
//数据指针移动到秒的个位处
write_com(0x0f);
//显示光标,闪烁
if(num1==2)
write_com(0x80+0x40+0x08);
//数据指针移到到分钟的个位处
if(num1==3)
{
write_com(0x80+0x40+0x05);
//数据指针移到到小时的个位处
if(num1==4)
num1=0;
//清零
//重新显示
TR0=1;
//重新启动计时
if(num1!
=0)//按下K2则选择时/分/秒加1
if(K2==0)
K2);
if(num1==1)
delay(20);
if(miao==60)
write_com(0x80+0x40+0x0a);
write_com(0x80+0x40+0x07);
write_com(0x80+0x40+0x04);
=0)
if(K3==0)//按下K3则选择时/分/秒减1
if(K3==0)
K3);
miao--;
if(miao==-1)
miao=59;
fen--;
if(fen==-1)
fen=59;
shi--;
if(shi==-1)
shi=23;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 电子 密码锁 设计