电子密码锁课程设计.docx
- 文档编号:6471189
- 上传时间:2023-01-06
- 格式:DOCX
- 页数:15
- 大小:285.85KB
电子密码锁课程设计.docx
《电子密码锁课程设计.docx》由会员分享,可在线阅读,更多相关《电子密码锁课程设计.docx(15页珍藏版)》请在冰豆网上搜索。
电子密码锁课程设计
单片机密码锁课程设计
系别:
自动控制系
班级:
自动化121班
学号:
121415130
姓名:
韩新华
2013年12月27日
1设计说明
1.1总体说明
用4*4的矩阵键盘组成0至9及确认键;提示信息的显示电路用8位数码管组成显示,初始化时显示器显示“000000”,输入三位数字,按确定键;当输入密码时,显示输入数字,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码输入正确,则LED发光二极管灯灭;若密码输入不正确,则LED发光二极管一直亮。
1.2总体结构图:
显示屏幕
AT89C51
晶振电路
复位电路
键盘
2硬件设计
2.1电路元件说明:
2.1.1 LED数码显示器
LED显示块是由发光显示二极管显示字段的显示器件。
七段显示块与单片机接口非常容易。
只要将一个8位并行输出与显示块的发光二极管引脚相连即可。
8位并行输出口输出不同的字节数据即可获得不同的数字或字符,通常将控制发光二极管的8位字节数据称为段选码。
LED数码显示器内部有两种不同的形式:
共阳极显示和共阴极显示,此设计采用共阴极显示。
其内部结构及共阴极显示其内部电路如下:
2.1.2复位电路:
复位电路有上电自动复位和手动复位,此设计用的是上电复位,电路图如上。
pin9:
RESET/VPD复位信号复位脚,当8951通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统及初始复位。
2.1.3时钟电路:
89C51芯片内部有一个高增益反相放大器,用于构成振荡器。
反相放大器的输入端为XTAL1,输出端为XTAL,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。
电容
器C1和C2通常取30PF,可稳定频率并对振荡频率有微调作用。
此振荡脉冲频率为12MHZ。
单片机时钟电路振荡脉冲可以由内部方式和外部方式产生,XTAL1(19引脚)XTAL2(18引脚)即为单片机的两个时钟引脚。
2.1.4矩阵键盘:
矩阵式键盘又称行列式键盘,往往用于按键个数多的场合,矩阵式键盘的按键于行、列的交叉点上,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接,列线通过上拉电阻接电源,将行线所得单片机的I/O口作为输出端,列线所接的I/0口为输入端,编程所有行线输出低电平,列线输出高电平,当没有键被按下时,所有输出端为高电平,表示无键按下,一旦有键按下,则出现输入端被拉低变为低电平。
这样,通过读入列线的状态即可知道是否有键按下。
2.1.5 单片机引脚说明
Pin20:
接地脚。
pin40:
正电源脚,工作时,接+5v电源。
pin19:
时钟XTAL1引脚,片内振荡电路的输入端。
pin18:
时钟XTAL2脚,片内振荡电路的输出端。
3程序存储器和数据存储器的单元分配
3.1程序存储器和数据存储器的单元分配
存储器是单片机的一个重要组成部分,每个存储单元对应一个地址,每个个单元共有1个地址,用两位16进制数表示,即存储器的地址(00H~FFH)。
存储器中每个存储单元可存放一个八位二进制信息,通常用两位16进制数来表示,这就是存储器的内容。
3.1.1程序存储器
在单片机处理问题之前必须事先将编好的程序、表格、常数汇编成机器代码后存入单片机的存储器中,该存储器称为程序存储器。
程序存储器可以放在片内或片外,亦可片内片外同时设置。
由于PC程序计数器为16位,使得程序存储器可用16位二进制地址,因此,内外存储器的地址最大可从0000H到FFFFH。
3.1.2数据存储器
单片机的数据存储器由读写存储器RAM组成。
其最大容量可扩展到64k,用于存储实时输入的数据。
8051内部有256个单元的内部数据存储器,其中00H~7FH为内部随机存储器RAM,80H~FFH为专用寄存器区。
3.1.3特殊功能寄存器
特殊功能寄存器(SFR)的地址范围为80H~FFH。
在MCS-51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。
MCS-51共有P0~P3四个这样的并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能。
其余用于芯片控制的寄存器中,累加器A、标志寄存器PSW、数据指针DPTR等的功能。
4程序设计
8位数码显示,,初始化时显示器显示“000000”,输入三位数字,按确定键;当输入密码时,显示输入数字,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码输入正确,则LED发光二极管灯灭;若密码输入不正确,则LED发光二极管一直亮。
4.1程序流程:
如下图
是
4.2密码锁程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitled1=P1^0;
ucharcodetable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
ucharcsw1,csw2,csw3,csw4,csw5,csw6;
ucharjpax,key,num,cs,cs1,cs2;
/////////////////////延时/////////////////////////////
voiddelayms(uintxms)
{
uinti,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
///////////////////////////////////
voiddisplaym()
{
P0=0xfe;
wela=1;
wela=0;
P0=table[csw1];
dula=1;
dula=0;
delayms
(2);
P0=0xfd;
wela=1;
wela=0;
P0=table[csw2];
dula=1;
dula=0;
delayms
(2);
P0=0xfb;
wela=1;
wela=0;
P0=table[csw3];
dula=1;
dula=0;
delayms
(2);
P0=0xf7;
wela=1;
wela=0;
P0=table[csw4];
dula=1;
dula=0;
delayms
(2);
P0=0xef;
wela=1;
wela=0;
P0=table[csw5];
dula=1;
dula=0;
delayms
(2);
P0=0xdf;
wela=1;
wela=0;
P0=table[csw6];
dula=1;
dula=0;
delayms
(2);
}
///////////////////////////////////////////////////////
voidmatrixkeyscan()
{
uchartemp,temph,templ,k;
P3=0xf0;
temp=P3;
temph=temp&0xf0;
if(temp!
=0xf0)
{
delayms(10);
temph=P3;
temph=temph&0xf0;
if(temph!
=0xf0)
{
P3=0x0f;
templ=P3;
templ=templ&0x0f;
k=temph|templ;
switch(k)
{
case0xee:
key=0;break;
case0xde:
key=1;break;
case0xbe:
key=2;break;
case0x7e:
key=3;break;
case0xed:
key=4;break;
case0xdd:
key=5;break;
case0xbd:
key=6;break;
case0x7d:
key=7;break;
case0xeb:
key=8;break;
case0xdb:
key=9;break;
case0xbb:
key=10;break;
}
while(temph!
=0xf0)
{
P3=0xf0;
temph=P3;
temph=temph&0xf0;
}
jpax=1;
}
}
}
///////////////判断////////////////////
voidpd()
{
if(cs1==cs2)
{
led1=1;
}
else
{
num=0;
cs1=0;
cs2=0;
////////////////警告///////////////////
led1=0;
delayms(500);
led1=1;
delayms(500);
led1=0;
delayms(500);
led1=1;
delayms(500);
led1=0;
delayms(500);
led1=1;
delayms(500);
}
}
////////////////确认///////////////////
voidqr()
{
switch(num)
{
case1:
cs1=cs;break;
case2:
cs2=cs;pd();break;
}
if(cs==cs2)
{
led1=~led1;
}
cs=0;
}
///////////////记录////////////////////
voidjl()
{
if(jpax==1)
{
jpax=0;
switch(key)
{
case0:
cs=cs*10+key;break;
case1:
cs=cs*10+key;break;
case2:
cs=cs*10+key;break;
case3:
cs=cs*10+key;break;
case4:
cs=cs*10+key;break;
case5:
cs=cs*10+key;break;
case6:
cs=cs*10+key;break;
case7:
cs=cs*10+key;break;
case8:
cs=cs*10+key;break;
case9:
cs=cs*10+key;break;
case10:
num++;qr();break;
}
}
}
////////////////按键分解///////////////////
voidanjianfenjie()
{
csw1=cs/100000;
csw2=cs%100000/10000;
csw3=cs%10000/1000;
csw4=cs%1000/100;
csw5=cs%100/10;
csw6=cs%10;
}
////////////////主函数///////////////////
voidmain()
{
jpax=0;
num=0;
cs1=0;
cs2=0;
cs=0;
while
(1)
{
matrixkeyscan();
jl();
anjianfenjie();
displaym();
}
}
5.总结
通过此次课程设计,我重新把单片机及相关知识联系在了一起,虽然掌握的知识不是很多,但通过查找资料我还是对单片机有了很好的了解和掌握。
在设计中我才发现单片机虽然体积小但是功能很强大,在生活中很多地方都可以用到它。
单片机这门学科博大精深,在以后的学习中只有多看书,理论与实践结合才能把这门课掌握好。
同时我也体会到合作的好处。
让我懂得了如何合作,对不同看法发表自己的意见。
此次设计中最要的一点是,让我知道了,理论联系实践的好处。
不管理论学的再怎么好都必须联系实践,只有在实践中我们才会更加懂得如何运用自己的所学,在实践中将自己的知识实物化。
理论联系实践是我们获取知识的最佳途径。
6.附录
原理图
PCB板图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子 密码锁 课程设计