电子密码锁课程设计Word格式文档下载.docx
《电子密码锁课程设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《电子密码锁课程设计Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
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”,输入三位数字,按确定键;
4.1程序流程:
如下图
是
4.2密码锁程序
#include<
reg52.h>
#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>
j--);
}
///////////////////////////////////
voiddisplaym()
{
P0=0xfe;
wela=1;
wela=0;
P0=table[csw1];
dula=1;
dula=0;
delayms
(2);
P0=0xfd;
P0=table[csw2];
P0=0xfb;
P0=table[csw3];
P0=0xf7;
P0=table[csw4];
P0=0xef;
P0=table[csw5];
P0=0xdf;
P0=table[csw6];
}
///////////////////////////////////////////////////////
voidmatrixkeyscan()
uchartemp,temph,templ,k;
P3=0xf0;
temp=P3;
temph=temp&
0xf0;
if(temp!
=0xf0)
delayms(10);
temph=P3;
temph=temph&
if(temph!
{
P3=0x0f;
templ=P3;
templ=templ&
0x0f;
k=temph|templ;
switch(k)
{
case0xee:
key=0;
break;
case0xde:
key=1;
case0xbe:
key=2;
case0x7e:
key=3;
case0xed:
key=4;
case0xdd:
key=5;
case0xbd:
key=6;
case0x7d:
key=7;
case0xeb:
key=8;
case0xdb:
key=9;
case0xbb:
key=10;
}
while(temph!
{
P3=0xf0;
temph=P3;
temph=temph&
}
jpax=1;
}
///////////////判断////////////////////
voidpd()
if(cs1==cs2)
led1=1;
else
num=0;
cs1=0;
cs2=0;
////////////////警告///////////////////
led1=0;
delayms(500);
////////////////确认///////////////////
voidqr()
switch(num)
case1:
cs1=cs;
case2:
cs2=cs;
pd();
if(cs==cs2)
led1=~led1;
cs=0;
///////////////记录////////////////////
voidjl()
if(jpax==1)
jpax=0;
switch(key)
case0:
cs=cs*10+key;
case3:
case4:
case5:
case6:
case7:
case8:
case9:
case10:
num++;
qr();
}
////////////////按键分解///////////////////
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板图