6基于单片机的密码防盗键盘.docx
- 文档编号:11222347
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:20
- 大小:1.27MB
6基于单片机的密码防盗键盘.docx
《6基于单片机的密码防盗键盘.docx》由会员分享,可在线阅读,更多相关《6基于单片机的密码防盗键盘.docx(20页珍藏版)》请在冰豆网上搜索。
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);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 密码 防盗 键盘