1、电子密码锁课程设计单片机密码锁课程设计系别:自动控制系班级:自动化121班学号:121415130姓名:韩新华2013年12月27日1设计说明 1.1总体说明用4*4的矩阵键盘组成0至9及确认键;提示信息的显示电路用8位数码管组成显示,初始化时显示器显示“000000”,输入三位数字,按确定键;当输入密码时,显示输入数字,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码输入正确,则LED发光二极管灯灭;若密码输入不正确, 则LED发光二极管一直亮。1.总体结构图:显示屏幕晶振电路复位电路键盘2硬件设计2.1电路元件说明:2.1LED数码显示器LED显示块是由发光显示二极
2、管显示字段的显示器件。七段显示块与单片机接口非常容易。只要将一个8位并行输出与显示块的发光二极管引脚相连即可。8位并行输出口输出不同的字节数据即可获得不同的数字或字符,通常将控制发光二极管的8位字节数据称为段选码。LED数码显示器内部有两种不同的形式:共阳极显示和共阴极显示,此设计采用共阴极显示。其内部结构及共阴极显示其内部电路如下:2.1.2 复位电路:复位电路有上电自动复位和手动复位,此设计用的是上电复位,电路图如上。pin9:RESET/VPD复位信号复位脚,当8951通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统及初始复位。2.1. 3时钟电路:89C5
3、1芯片内部有一个高增益反相放大器,用于构成振荡器。反相放大器的输入端为XTAL1,输出端为XTAL,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。电容器C1和C2通常取30PF,可稳定频率并对振荡频率有微调作用。此振荡脉冲频率为12MHZ。单片机时钟电路振荡脉冲可以由内部方式和外部方式产生,XTAL1(19引脚)XTAL2(18引脚)即为单片机的两个时钟引脚。2.1.矩阵键盘:矩阵式键盘又称行列式键盘,往往用于按键个数多的场合,矩阵式键盘的按键于行、列的交叉点上,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接,列线通过上拉电阻接电源,将行线所得单片机的I/O口作为输出端
4、,列线所接的I/0口为输入端,编程所有行线输出低电平,列线输出高电平,当没有键被按下时,所有输出端为高电平,表示无键按下,一旦有键按下,则出现输入端被拉低变为低电平。这样,通过读入列线的状态即可知道是否有键按下。2.1.5单片机引脚说明Pin20:接地脚。pin40:正电源脚,工作时,接+5v电源。pin19:时钟XTAL1引脚,片内振荡电路的输入端。pin18:时钟XTAL2脚,片内振荡电路的输出端。3程序存储器和数据存储器的单元分配3.程序存储器和数据存储器的单元分配存储器是单片机的一个重要组成部分,每个存储单元对应一个地址,每个个单元共有1个地址,用两位16进制数表示,即存储器的地址(0
5、0HFFH)。存储器中每个存储单元可存放一个八位二进制信息,通常用两位16进制数来表示,这就是存储器的内容。3.1程序存储器 在单片机处理问题之前必须事先将编好的程序、表格、常数汇编成机器代码后存入单片机的存储器中,该存储器称为程序存储器。程序存储器可以放在片内或片外,亦可片内片外同时设置。由于PC程序计数器为16位,使得程序存储器可用16位二进制地址,因此,内外存储器的地址最大可从0000H到FFFFH。3.1.数据存储器 单片机的数据存储器由读写存储器RAM组成。其最大容量可扩展到64k,用于存储实时输入的数据。8051内部有256个单元的内部数据存储器,其中00H7FH为内部随机存储器R
6、AM,80HFFH为专用寄存器区。 3.1.特殊功能寄存器特殊功能寄存器(SFR)的地址范围为80HFFH。在MCS51中,除程序计数器PC和四个工作寄存器区外,其余21个特殊功能寄存器都在这SFR块中。MCS51共有P0P3四个这样的并行口,可提供32根I/O线,每根线都是双向的,并且大都有第二功能。其余用于芯片控制的寄存器中,累加器A、标志寄存器PSW、数据指针DPTR等的功能。4程序设计 8位数码显示,初始化时显示器显示“000000”,输入三位数字,按确定键;当输入密码时,显示输入数字,当密码位数输入完毕按下确认键时,对输入的密码与设定的密码进行比较,若密码输入正确,则LED发光二极管
7、灯灭;若密码输入不正确, 则LED发光二极管一直亮。4.程序流程:如下图 是 4.密码锁程序#include#define uchar unsigned char#define uint unsigned intsbit dula=P26;sbit wela=P27;sbit led1=P10;uchar code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71;uchar csw1,csw2,csw3,csw4,csw5,csw6;uchar jpax,key,num,
8、cs,cs1,cs2;/延时/ void delayms(uint xms) uint i,j; for (i=xms;i0;i-) for(j=110;j0;j-); /void displaym() P0=0xfe; wela=1; wela=0; P0=tablecsw1; dula=1; dula=0; delayms(2); P0=0xfd; wela=1; wela=0; P0=tablecsw2; dula=1; dula=0; delayms(2); P0=0xfb; wela=1; wela=0; P0=tablecsw3; dula=1; dula=0; delayms(2
9、); P0=0xf7; wela=1; wela=0; P0=tablecsw4; dula=1; dula=0; delayms(2); P0=0xef; wela=1; wela=0; P0=tablecsw5; dula=1; dula=0; delayms(2); P0=0xdf; wela=1; wela=0; P0=tablecsw6; dula=1; dula=0; delayms(2);/ void matrixkeyscan() uchar temp,temph,templ,k; P3=0xf0; temp=P3; temph=temp&0xf0; if(temp!=0xf0
10、) delayms(10); temph=P3; temph=temph&0xf0; if(temph!=0xf0) P3=0x0f; templ=P3; templ=templ&0x0f ; k=temph|templ; switch(k) case 0xee:key=0;break; case 0xde:key=1;break; case 0xbe:key=2;break; case 0x7e:key=3;break; case 0xed:key=4;break; case 0xdd:key=5;break; case 0xbd:key=6;break; case 0x7d:key=7;b
11、reak; case 0xeb:key=8;break; case 0xdb:key=9;break; case 0xbb:key=10;break; while(temph!=0xf0) P3=0xf0; temph=P3; temph=temph&0xf0; jpax=1; /判断/void pd() 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;
12、 delayms(500); led1=1; delayms(500); /确认/void qr() switch(num) case 1:cs1=cs;break; case 2:cs2=cs;pd();break; if(cs=cs2) led1=led1; cs=0;/记录/void jl() if(jpax=1) jpax=0; switch(key) case 0:cs=cs*10+key;break; case 1:cs=cs*10+key;break; case 2:cs=cs*10+key;break; case 3:cs=cs*10+key;break; case 4:cs=
13、cs*10+key;break; case 5:cs=cs*10+key;break; case 6:cs=cs*10+key;break; case 7:cs=cs*10+key;break; case 8:cs=cs*10+key;break; case 9:cs=cs*10+key;break; case 10:num+;qr();break; /按键分解/void anjianfenjie() csw1=cs/100000; csw2=cs%100000/10000; csw3=cs%10000/1000; csw4=cs%1000/100; csw5=cs%100/10; csw6=
14、cs%10;/主函数/void main() jpax=0; num=0; cs1=0; cs2=0; cs=0; while(1) matrixkeyscan(); jl(); anjianfenjie(); displaym(); 5总结 通过此次课程设计,我重新把单片机及相关知识联系在了一起,虽然掌握的知识不是很多,但通过查找资料我还是对单片机有了很好的了解和掌握。在设计中我才发现单片机虽然体积小但是功能很强大,在生活中很多地方都可以用到它。单片机这门学科博大精深,在以后的学习中只有多看书,理论与实践结合才能把这门课掌握好。同时我也体会到合作的好处。让我懂得了如何合作,对不同看法发表自己的意见。此次设计中最要的一点是,让我知道了,理论联系实践的好处。不管理论学的再怎么好都必须联系实践,只有在实践中我们才会更加懂得如何运用自己的所学,在实践中将自己的知识实物化。理论联系实践是我们获取知识的最佳途径。6.附录原理图PCB板图