6基于单片机的密码防盗键盘.docx

上传人:b****7 文档编号:11222347 上传时间:2023-02-25 格式:DOCX 页数:20 大小:1.27MB
下载 相关 举报
6基于单片机的密码防盗键盘.docx_第1页
第1页 / 共20页
6基于单片机的密码防盗键盘.docx_第2页
第2页 / 共20页
6基于单片机的密码防盗键盘.docx_第3页
第3页 / 共20页
6基于单片机的密码防盗键盘.docx_第4页
第4页 / 共20页
6基于单片机的密码防盗键盘.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

6基于单片机的密码防盗键盘.docx

《6基于单片机的密码防盗键盘.docx》由会员分享,可在线阅读,更多相关《6基于单片机的密码防盗键盘.docx(20页珍藏版)》请在冰豆网上搜索。

6基于单片机的密码防盗键盘.docx

6基于单片机的密码防盗键盘

单片机课程设计报告——

密码防盗键盘

物理学院2007级徐思遥宋飞滕渊

摘要:

本实验是基于AVRmega16单片机所设计的,可以实现键位与数字动态显示的一种新型密码防盗键盘。

通过单片机内部产生随机数,使用LED数码七段数码管予以显示,每一个数码管对应一个键位。

单片机对各个键位进行扫描,确定键位的输入。

关键词:

mega16七段数码管ULN2003密码防盗

一、目的、用途、功能

1.1目的:

设计一种投资少,简单易行,仅仅只是在现在的设备的基础之上稍加改造, 又能从根本上解决摄像头拍摄盗取密码的设备。

1.2用途与功能:

我们就设想让键上的10个数字位置分布可变。

10个键上的数字是由七段数码管显示。

每次取款时,键盘上数字的分布都会随机变化。

因而知道了键的位置并不能绝对判断出键上的数字是多少。

因此会给犯罪分子获得提款人的密码造成麻烦,从而解决摄像头盗取密码的难题。

二、硬件设计

2.1硬件设计思想

键盘的数字和键位关系不固定,而且通过单片机内部产生随机数,通过LED数码管显示出来,每一个数码管对应一个键位。

基本设备是基于AVR单片机,外围设备采用的是12个七段数码管,2个ULN2003芯片,11个七段数码管,1个74LS248芯片,若干电阻,电源电池。

2.2部分硬件方案论述

2.2.1七段数码管扫描显示方式的方案比较

方案一:

静态显示方式:

静态显示方式是指当显示器显示某一字符时,七段数码管的每段发光二极管的位选始终被选中。

在这种显示方式下,每一个LED数码管显示器都需要一个8位的输出口进行控制。

静态显示主要的优点是显示稳定,在发光二极管导通电流一定的情况下显示器的亮度大,系统运行过程中,在需要更新显示内容时,CPU才去执行显示更新子程序,这样既节约了CPU的时间,又提高了CPU的工作效率。

其不足之处是占用硬件资源较多,每个LED数码管需要独占8条输出线。

随着显示器位数的增加,需要的I/O口线也将增加。

方案二:

动态显示方式:

动态显示方式是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。

对于每一位显示器来说,每隔一段时间点亮一次。

显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。

通过调整电流和时间参数,可以既保证亮度,又保证显示。

若显示器的位数不大于8位,则显示器的公共端只需一个8位I/O口进行动态扫描(称为扫描口),控制每位显示器所显示的字形也需一个8位口(称为段码输出)。

动态显示器的优点是节省硬件资源,成本较低。

但在控制系统运行过程中,要保证显示器正常显示,CPU必需每隔一段时间执行一次显示子程序,占用CPU大量时间,降低了CPU的工作效率,同时显示亮度较静态显示器低。

由于AVRATmega16单片机本身提供的I/O口有限,因此我们选择方案二——动态扫描方式。

扫描方式中在轮流点亮扫描过程中,每位显示器的点亮时间是极为短暂的约1ms,但由于人的视觉暂留现象及发光二极管的余辉效应,尽管实际上各位显示器并非同时点亮,但只要扫描的速度足够快,给人的印象就是一组稳定的显示数据,不会有闪烁感。

节约了电能,节省了I/O口。

2.2.2键盘连接方式方案比较

方案一:

独立式键盘

一个具有4个按键的独立式键盘,每一个按键的一端都接地,另一端接mega16的I/O口。

独立式键盘每一按键都需要一根I/O线,占用mega16的硬件资源较多。

因此独立式键盘只适合按键较少的场合。

键盘是一组按键或开关的集合,键盘接口向计算机提供被按键的代码。

特点:

使用方便、结构复杂、成本高。

方案二:

矩阵式键盘

我们采用4×3矩阵式键盘,键盘的行线X0~X3通过电阻接+5V,当键盘没有键闭合时,所有的行线和列线断开,行线X0~X3均呈高电平。

当键盘上某一键闭合时,该键所对应的行线与列线短路,此时该行线的电平将由被短路的列线电平所决定。

如果将行线接至单片机的输入端口,列线接至单片机的输出端口,则在单片机的控制下使列线Y0为低电平,其余三根列线Y1、Y2、Y3均为高电平,然后单片机读输入口状态(即键盘行线状态),若X0、X1、X2、X3均为高电平,则Y0这一列上没有键闭合,如果读出的行线状态不全为高电平,则为低电平的行线和Y0相交的键处于闭合状态。

如果Y0这一列没有键闭合,紧接着使列线Y1为低电平,其余列线为高电平,用同样的方法检查Y1这一列有无键闭合,如此类推。

这种逐行逐列地检查键盘状态的过程称为对键盘的扫描。

CPU对键盘的扫描可以采取程序控制的随机方式,CPU空闲时才扫描键盘;也可以采取定时控制方式,每隔一段时间,CPU对键盘扫描一次;还可以采用中断方式,当键盘上有键闭合时,向CPU请求中断,CPU响应键盘发出的中断请求,对键盘进行扫描,以识别哪一个键处于闭合状态,并对键输入信息作相应处理。

因为如果采用独立式键盘AVRmega16的I/O口对于方案一来说将是远远不够用的,为了节省I/O口,使我们的设计能够顺利进行,我们选用方案二——矩阵连接式键盘。

为了能够较为简单的编程,和节省CPU的资源,我们采用定时扫描,每隔一段时间,CPU对键盘扫描一次,并将键值读入。

2.3硬件电路图

 

2.4硬件单元

2.4.1键盘输入单元:

这是用户使用时将密码输入到银行或单片机内的输入设备,具体结构构成见图:

采用12个按键开关,分别代表0~9十个数字输入键位,一个确认键和一个取消键。

采取矩阵式键位设计,此举为减少对单片机的I/O口的使用,同时也是的我们键盘的的外形更好看,使用更人性化。

键盘的航线和列现分别接AVR单片机的PORTA0~6七个端口。

对键盘的识别方式我们采取行扫描法。

具体使用由编程由单片机完成。

2.4.2显示单元:

此设备是用户使用密码防盗键盘的的显示装置,用户通过它来观看键位数字的信息,找到每个键位所对应的密码数字,然后将自己的密码按照显示输入到单片机。

我们采用10个七段数码管,用来显示0~9十个数字,它们分别放在每个按键的上部,它所显示的数字即为下部按键的所输入的数字。

为节约单片机的I/O口,对数码管的显示我们采用单片机动态显示方式。

我们采用共阴接法,每个共阴极分别接一个200Ω的电阻,用来限流保护七段数码管。

在实际焊接中,我们

先对每一个数码管进行测定,找出其对应的a,b,c,d,e,f,g数码管的显示段,然后将10个数码管的a显示段全部连接到一起,并接单片机的PORTB0,其他的所有b显示段,c显示段…一直到g显示段分别连接到一起,然后再分别依次连接到单片机的PORTB1~6。

由于所有的a,b,c,d,e,f,g数码管的显示段都连在一起,由于单片机的I/O口输出电流最高可输出40mA的电流,而七段数码管的共阴极端口需要100mA多的电流驱动,为提高电流驱动能力,我们采用ULN2003数码芯片,其作用是放大共阴极电流,相当于一个集成了多个三极管的芯片。

(之所以没有选择三级管,是因为三极管引脚多,占用过多的空间,焊接也不方便),共阴极单个接对应的ULN2003数码芯片,然后再由ULN2003数码芯片接到单片机的I/O口PORTD0~7和PORTC0~2。

2.4.3验证显示装置:

此装置是用来将用户输出的密码在线显示,相当于银行系统的液晶显示屏。

因考虑到我们的主要设计是键盘的功能设计,也为节省资金,我们使用一个大英寸的LED七段数码管。

同数字显示装置中的的七段数码管一样,我们采用共阴极接法,它的显示较为简单,仅仅只需要编程的简单操作,因此为节省单片机I/O端口,我们采用74LS248数码管编译芯片。

由它连接七段数码管和单片机。

三、软件

3.1软件基本思想:

●键盘的不间断扫描。

●10个七段数码管的动态显示。

●键盘键位输入信号的处理。

●外部验证显示数码管的即时显示。

3.2程序框图

3.3程序简述

初始化后单片机产生随机数,将随机数以动态扫描的方式显示于七段数码管,同时还对键盘进行实时扫描,在确认有按键按下后,单片机读取键值,并将键值通过验证模块显示出来。

当按下确认键后,单片机将会做出反应,所有的七段数码管将终止显示,此后如果再有按键按下也不会有任何反应。

当此时取消键按下,单片机将重新初始化,新一轮的键盘扫描将开始。

3.4程序代码

//ICC-AVRapplicationbuilder:

2009-5-3012:

57:

01

//Target:

M16

//Crystal:

4.0000Mhz

#include

#include

charword[10]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

charnum[10]={0x00,0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80,0x90};

charled[10],shu[10],code;

voidport_init(void)

{

PORTA=0x70;

DDRA=0x8F;

PORTB=0x00;

DDRB=0xFF;

PORTC=0x00;//m103outputonly

DDRC=0xC3;

PORTD=0x00;

DDRD=0xFF;

}

//callthisroutinetoinitializeallperipherals

voidinit_devices(void)

{

chari;

for(i=0;i<10;i++)

led[i]=shu[i]=0x00;

CLI();//disableallinterrupts

port_init();

MCUCR=0x00;

GICR=0x00;

TIMSK=0x00;//timerinterruptsources

SEI();//re-enableinterrupts

//allperipheralsarenowinitialized

}

//延时子程序

voiddelay_ms(charn)

{

chari,j;

for(i=0;i

{

for(j=0;j<1000;j++);

}

}

//是否有键按下子程序

charpressed(void)

{

DDRA=0x8F;

PORTA=0x70;

if(PINA!

=0x70)return1;

elsereturn0;

}

//led显示子程序

voiddisplay(void)

{

chari;

for(i=0;i<8;i++)

{

PORTB=led[i]|(PINB&0x80);

PORTD=0x01<

delay_ms

(1);

}

PORTD=0x00;

PORTB=led[8],PORTC=0x01|PINC;

delay_ms

(1);

PORTB=led[9],PORTC=0x10|PINC;

delay_ms

(1);

PORTC=0x00|PINC;

}

//键盘扫瞄子程序

charkeyscan(void)

{

charj=0x77;

display();

display();//延时消抖

do

{

PORTA=j|0x70;

j>>=1;

}while(PINA&0x70==0x70);

while(pressed())display();//等待按键释放

display();

display();//延时消抖

returnPINA;

}

//简单随机数列子程序

voidsj(void)

{

chara,i;

a=rand(10);

for(i=0;i

led[10-a+i]=word[i],shu[10-a+i]=num[i];

for(i=a;i<10;i++)

led[i-a]=word[i],shu[i-a]=num[i];

}

main()

{

init_devices();

while

(1)

{

if(pressed())

{

code=keyscan();

switch(code)

{

case0x5E:

sj();

display();

break;

case0x5D:

PORTA=(shu[2]<<3)|(0x7F&PINA);

PORTB=(shu[2]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[2]&0xC0)|(0x3F&PINC);

break;

case0x5B:

PORTA=(shu[1]<<3)|(0x7F&PINA);

PORTB=(shu[1]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[1]&0xC0)|(0x3F&PINC);

break;

case0x57:

PORTA=(shu[0]<<3)|(0x7F&PINA);

PORTB=(shu[0]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[0]&0xC0)|(0x3F&PINC);

break;

case0x3E:

PORTA=(shu[7]<<3)|(0x7F&PINA);

PORTB=(shu[7]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[7]&0xC0)|(0x3F&PINC);

break;

case0x3D:

PORTA=(shu[8]<<3)|(0x7F&PINA);

PORTB=(shu[8]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[8]&0xC0)|(0x3F&PINC);

break;

case0x3B:

PORTA=(shu[4]<<3)|(0x7F&PINA);

PORTB=(shu[4]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[4]&0xC0)|(0x3F&PINC);

break;

case0x37:

PORTA=(shu[9]<<3)|(0x7F&PINA);

PORTB=(shu[9]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[9]&0xC0)|(0x3F&PINC);

break;

case0x6E:

init_devices();

break;

case0x6D:

PORTA=(shu[6]<<3)|(0x7F&PINA);

PORTB=(shu[6]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[6]&0xC0)|(0x3F&PINC);

break;

case0x6B:

PORTA=(shu[5]<<3)|(0x7F&PINA);

PORTB=(shu[5]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[5]&0xC0)|(0x3F&PINC);

break;

case0x67:

PORTA=(shu[3]<<3)|(0x7F&PINA);

PORTB=(shu[3]<<3)&0x80|(0x7F&PINB);

PORTC=(shu[3]&0xC0)|(0x3F&PINC);

break;

}

}

display();

}

}

四、总结

4.1基本成果:

本设计采用MEGA16作为微控制核心,经过各方案的比较、选取,各硬件模块的设计、焊接,软件编程和认真的调试与严格的测试,最终达到了预期的效果。

4.2技术特色与创新

4.2.1数字随机显示

为方便用户使用,也考虑到随机函数在单片机中不易实现,数字显示不是完全随机的,而是从相邻范围中抽取数据。

4.2.2节能

键盘在不使用时处于待机状态,数字显示关闭;而在用户需要输入密码时,数字显示开启。

此举可有效省电节能。

4.3应用拓展

此产品设计不仅可以应用于ATM机的键盘输入和密码防盗,还可以广泛应用于其他各种应用键盘输入密码的设备,如保险柜、储物货仓、机关防盗门等。

此产品将以其设计巧妙,灵活多变,成本低廉,操作简单,便捷实用,保密安全等优势,拥有广阔的市场前景和发展空间。

4.4与同类课题研究的比对和优势

目前市场上存在着种类繁多的密码防盗设备,但仔细分析后不难发现,它们在成本投入,方案设计,实际操作等方面存在着各种缺陷:

4.4.1DNA手机确认系统:

“DNA手机确认系统”是防盗系统公司在银行系统处安装有关的业务系统,在持卡人进行ATM机取款、POS消费、网上支付购物、支票转账、自助设备交费等活动时,当账户发生任何变动,都需要由有关业务系统向持卡人手机发出指令。

只有在银行卡(或账号)、交易密码、手机交易密码确认等3项缺一不可的情况下,持卡人才能完成交易。

其缺点是:

1.银行要配合此装置的使用,需要花费大量时间和投入大量资金。

2.持卡人使用这种防盗措施,就意味着必须将手机随时随地带到身边,并且要时刻保持开机,否则,一切交易都会因为无法得到手机确认而泡汤,这就给持卡人带来了不便。

4.4.2指纹识别系统:

现在比较流行的,防盗效果最好的手段是使用指纹识别系统,此方法的确可以从根本上解决问题,但它却存在着一些致命的缺点:

它所需要的是大量的资金投入,对于银行来说是一笔很大的支出,而且他所需要的辅助设施较多。

需要建立一个庞大的容纳几亿人的指纹库。

要摒弃现在的键盘,将所有的银行键盘换为指纹识别器,这需要更新服务器,这样改进的时间周期会非常长。

一个人有时手指会出现脱皮的现象,使用指纹必然不会被指纹识别器识别,而且一个人有时也要帮其亲友代为取钱,指纹不同如何取钱?

指纹的唯一性和不可替代性在此时却成了一个最大的问题。

4.4.3光学防盗措施:

通过某种特殊材质,使数字键只能在某个角度范围内能看到,这样来避免犯罪分子通过摄像头或窥视来盗取密码。

如果材料所设计的视角范围过大,则相当于没有防护措施,犯罪分子仍然可以拍摄到。

视角范围小,提款人自己有可能都不好去掌握视角。

因为对角度的要求非常高,对提款人的身高,体型都会影响角度的寻找,这就限制了它不能满足所有人群。

治标不治本,键位没有实质的改变,通过拍摄按键的大体位置,仍然可以精确的推断出密码。

即使犯罪分子不用摄像头拍摄,他也可以通过在键盘上贴一层薄膜,来记录提款人按键的位置,然后在运用计算机破解持卡人密码。

总之,这种方法不能成根本上解决摄像拍摄及键位的位置推断密码的被盗问题。

4.4.5我们的特点及优势:

相比之下,我们的可变数字防盗键盘则克服了以上防盗措施的缺点,保留了他们的诸多优点,并创新性地发展了自己的独特优势:

1、由于采用了可变的产生随机数的数字键盘,从根本上解决了犯罪分子通过摄像头拍摄和在键盘上贴薄膜盗取密码的难题。

2、投入资金少。

成本低、投资少,简单易行。

采用廉价的AVR单片机和LED数码管,以及几个小芯片,而在密码防盗的效果上并不比DNA手机确认系统差。

3、本装置只是在现在的设备的基础上添加了数码管和小型单片机,银行及商家无需对现有设备进行非常大的改动或完全更新,从而使更新时间缩短。

4、从用户角度来说,与现有的提款方式并有本质上的区别,而且操作简单,便于使用,适合各类人群。

5、该密码防盗键盘独立于提款机,可移植性强,很容易安装到其它需要按键密码防盗的设备,便于推广。

用户不必时刻带着手机,使用方便,有更广泛的应用范围。

五、感悟:

虽然前期进行了完备的设计分析和充分的准备工作,在实际操作中我们还是遇到诸多困难。

队员花费大量时间对方案进行讨论修改,考虑到制作的简单易行,芯片功能、设计成本等的限制,我们对设计方案进行不断改进,在理论和实践上实现协调统一;课下我们从图书馆和网上查找资料,不断丰富自己的相关知识,并与老师保持沟通,获得宝贵意见。

为了尽早完成作品,我们连续加班加点,经过课下大量的实践操作,我们提高了焊接技能和效率,丰富了各种器件常识,收获了难得的实践经验。

六、成员分工及工作情况

经过大约一个月的努力,我们终于完成了项目预期的基本要求和创新设计,由于时间及其他一些客观条件,我们对系统的一些新的改进没能够实现,但在制作过程中我们仍然受益颇多。

通过比赛中与队友的合作,我们不仅培养了发现、解决问题的能力,增长了许多课本上没有的知识,同时也增强了团队精神。

具体分工情况如下:

徐思遥——方案设计、论文、ppt、网页比例3.4

宋飞——硬件设计、焊接比例3.3

滕渊——软件编程、硬件设计比例3.3

七、附录

7.1所需资源列表

名称

数量

价格(元)

AVR开发板、JTAG、下载线等

1

实验室内使用

AVRmega16

1

12

万用表

1

90

电烙铁、吸锡器

1

30

七段数码管

20

20

其他元器件

若干

30

7.2作品照片

7.3参考文献

1、马潮编著《AVR单片机嵌入式系统原理与应用实践》北京航空航天大学出版社2007

2、《Atmega16数据手册》

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 信息与通信

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1