微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx

上传人:b****8 文档编号:30451497 上传时间:2023-08-15 格式:DOCX 页数:16 大小:19.24KB
下载 相关 举报
微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx_第1页
第1页 / 共16页
微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx_第2页
第2页 / 共16页
微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx_第3页
第3页 / 共16页
微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx_第4页
第4页 / 共16页
微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx

《微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx》由会员分享,可在线阅读,更多相关《微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx(16页珍藏版)》请在冰豆网上搜索。

微机原理课题设计实验报告之矩阵式键盘数字密码锁x.docx

微机原理课题设计实验报告之矩阵式键盘数字密码锁x

微机原理课题设计实验报告之矩阵式键盘数字密码锁x

微机系统与应用课程设计报告

课程设计题目

矩阵式键盘数字密码锁设计

评语:

教师:

班级:

学号:

姓名:

实验地点:

E楼H区311

实验时间:

20XX年.3.4-3.9

矩阵式键盘数字密码锁设计

实验目的

掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连

接能力。

初步掌握键盘扫描,密码修改和计时报警程序的编写方法。

掌握通过矩阵式键盘扫描实现密码锁功能的设计思路和实现方法。

实验内容

矩阵式键盘数字密码锁设计,根据设定好的密码,采用4x4矩阵键盘实现密码的输入功能。

当密码输入正确之后,锁就打开(绿灯亮),10秒之后,锁

自动关闭(红灯亮);如果连续输入三次密码不正确,就锁定按键5秒钟,同时发出报警(黄灯闪),5秒后,解除按键锁定,恢复密码输入。

数字密码锁操作键盘参考上面设定,也可以自行设计键盘。

用户初始密码为“*****”,系统加电运行后,密码锁初始状态为常闭(红灯亮),用户可以

选择开锁或修改密码:

如果选择开锁就按“OpeS键,系统提示输入密码,输入用户密码+“#”键后,如果密码正确,就打开锁(绿灯亮),系统等待10秒,然后重新关闭密码锁,若密码错,提示重新输入,连续三次错误,提示警告词同时报警(黄灯闪),锁定键盘5秒,然后重新进入初始状态;

如果选择修改密码就按”ModifySecret”键,系统提示输入旧密码,输入旧密码+“#”键后,如果正确,系统提示输入新密码,输入新密码+“#”后,

新密码起效,重新进入初始状态;如果旧密码错,不能修改密码,密码锁直接进入初始状态。

实验基本任务

1)具有开锁、修改用户密码等基本的密码锁功能。

2)对于超过3次密码密码错误,锁定键盘5秒,系统报警。

5秒后解除锁

^定。

4)通过LCD字符液晶和LED指示灯(红,绿,黄)实时显示相关信息。

5)用户密码为6位数字,显示采用“*”号表示。

6)码锁键盘设计合理,功能完善,方便用户使用。

本次实验还做了附加的任务

(1)增加了管理员(Admin)功能,如果用户忘记密码可向管理员求助。

管理员密码为8位数字(系统内预先已设定),管理员按“Admin”键后,系统提示输入管理员密码,输入管理员密码+“#”键后,如果正确,系统自动恢复用户初始密码为“*****”;如果错误,程序停止运行,系统退出。

2)增加了输入清除功能(*),在输入密码过程中,如果中途按下“*”键,则清除前面的输入,开始重新输入密码。

(2)增加组合键(Shift)功能,使系统的密码选择范围除数字外,另外增加

3)a,b,c,d,e,f,g,h,i,j等10个字母。

数字直接输入,字母“Shift”+“字

母”。

实验设计方案

实验用到8255作为并行接口设备,用以ISA总线与外设的连接,本次用的是8255的A口作为输出口,C口的高4位与B口是输入,C口低4位是输出口,所以控制住设置为ox8a,8253作为时钟器,作为控制提示灯的时间闪烁,8255的A口接键盘的rom,B口接col,地址线都连接在总线下面的芯片上接口,其他的读写控制线都接入ISA总线上。

如下图的接线设置

A0A1CSISA控制信接口地址TRL交通灯五.实验器材I8086CPU可编程并行接口灯,4x4矩阵键盘。

5电路连接关系:

首先将I嚣55模块的控制总线与

A0A

1CS

ISA控制信

接口

地址TRL交通灯

五.实验器材I

8086CPU可编程并行接口

灯,4x4矩阵键盘。

5电路连接关系:

首先将I嚣55模块的控制总线与总线连接,并将片选-

2、将8A53模块的控制总线与总线连接,并将片选

将DRV模块JS

将L四D模块的控制总线与总线连接,并将片选

位+

8255和键

JS8

总线(

JS4)

向PC

机送

信号可编程定时

A0A

1=1

1CS

及接

■号和地址

^0A

CD

1CS

及接

1、

3、

4、

5、

6、

8255

_8253

CS连接至000H-007H地址空间;

CS连接

显示屏,LED

008H-00FH地址空间;

口口

8(C低)连接至0010H-0017H地址空间;

CS接至

018H-01FH地址空间;

畫的连线

,连线,

8255模块

键盘PABJPA3

PC0-PC3

输入输岀方式

键盘

输岀

时钟源

JS35

输入

JS36

他们之间的连接关系如下:

8255和TRL的连线,他们之间的连接关系如下:

8255模块

LED

PB0—PB3

JS18(1-3)

7、时钟源的/64同8253的CLK0连接。

8、8253的OUT0

7、

时钟源的/64同8253的CLK0连接。

9、8253的GATE0同JS3的K7连接。

(高电平选通)

六.程序流程图

其中软硬件初始化流程如图1所示

密码锁程序运行流程如图2所示

图1.初始化流程图

r开始'

L-

1

!

软硬件初始

*LCD提示锁未开

8253定时10秒

输入用户密码

4—

核对用户密码

正确?

程序结束退出

图2密码锁程序流程图

其中密码输入模块详细流程如图3

七?

主要代码

unsignedcharkbscan()〃键盘扫描

{

introw_va={0x0e,0x0d,0x0b,0x07};//选中每一行时的A口值

unsignedchardata;

unsignedchardata_tmp;

Sleep(200);//第一次消除抖动--每次键盘扫描的时间间隔

至少为200毫秒

for(inti=0;ii++,i%=4)

{

inttmp=row_va[i];

//OutByte(0xde00,tmp);InByte(0xde01,data);if(data==NULL)//

//

OutByte(0xde00,tmp);

InByte(0xde01,data);if(data==NULL)//{}elseif((data0x0f)!

=0x0f)//按下

循环扫描第一到四行

扫描不到的情况排除掉

检测这一行是否有按键被

{

Sleep(IO);//第二次消除抖动--如果10ms之后还是相同的按键就执行下面的。

InByte(0xde01,data_tmp);

data_tmp=data_tmp0x0f;

if(data_tmp!

=data)continue;//否则不执行下面的

while(data_tmp==data)//第三次消除抖动--判断按键是否弹起。

弹起则结束循环

{

InByte(0xde01,data);data=data0x0f;

Sleep(10);

if(data==0x0f)

{

Sleep(100);

InByte(0xde01,data);data=data0x0f;

}

}

switch(data_tmp)

{

case0x0e:

returnvalue[i];

case0x0d:

returnvalue[i];

case0x0b:

returnvalue[i];

case0x07:

returnvalue[i];}

}

}

returnNULL;

}

voiddisplayOnLcd()〃在LCD上显示*号.

{

unsignedcharstmp=“*“;

for(inti=0;ii++)OutByte(0xde09,stmp[i]);

}

//主函数

//主函数

{

init8255();init8253();

init8255();

init8253();

InitLCD();

Sleep(100);unsignedchartemp;

OutByte(0xde02,0xFE);//temp='\0';//printf("pleaseinputOpen!

");while

(1)

{intj=0;

temp=kbscan();//

printf("thekey:

%c\n",temp);if(temp=='O')

{

Mimasum=0;

Clear();//while

(1){

temp=kbscan();

//初始化8255

//初始化LCD

红灯亮

指令符号

获取在键盘中得到的数字

清空屏幕

j++;

printf(”第%(1次键盘扫描:

%c\n",j,temp);if(isnum(temp))

{

if(Mimasum6)

{

Wodemima[Mimasum]=temp;

Mimasum++;displayOnLcd();//}}

Mimasum++;

displayOnLcd();//

}

}

elseif(isoper(temp))

{

if(temp=='#')//

{

if(Mimasum==6)

{

if(Newmima==true)//

密码正确--修改密码

{

inti;

for(i=0;ii++)

上屏幕LCD一个*号

密码匹配

修改密码标志为true且原

Mimachar[i]=Wodemima[i];

Newmima=false;printf("新密码为:

");

true--修改密码

赋值为true

输入新密码

10S

绿灯灭

次!

!

\n",Errorcount);

输入的显示

for(i=0;ii++)

{printf("%c",Mimachar[i]);

}

printf("\n");

}

elseif(Equal(Mimachar,Wodemima))

{

if(Modify==true)//Modify为

{

Newmima=true;//

把修改密码标志

Modify=false;

Mimasum=0;

Clear();//清空屏幕

printf("输入新密码:

\n");//提示:

}

else

{

printf("密码正确!

\n");

OutByte(0xde02,0x7f);//绿灯亮

Sleep(*****);//绿灯亮

OutByte(0xde02,0xFE);//红灯亮

Mimasum=0;

Errorcount=0;

gotoStart_Position;//回到最前

}

}

else

{

Errorcount++;

printf("密码错误次数%d

if(Errorcount=3)//提示重新

{

OutByte(0xde02,0xFD);//黄灯亮

Sleep(1000);

OutByte(0xde02,0xFF);//黄

灯灭

绿灯灭

Sleep(1000);

OutByte(0xde02,0xFD);//Sleep(1000);

OutByte(0xde02,0xFF);//

黄灯亮

Sleep(1000);

OutByte(0xde02,0xFD);//

黄灯亮

Sleep(1000);

OutByte(0xde02,0xFE);//

红灯亮

Mimasum=0;//

初始

Errorcount=0;

Clear();//

清空屏幕

gotoStart_Position;

}

else

{

printf("请重新输入密码:

\n");

}

}

}

}

elseif(temp=='*')

{

Mimasum=0;//

重新输入密码

Clear();//

清空屏幕

}

elseif(temp=='A')

{

Guanlisum=0;

Clear();//

清空屏幕

printf("请输入管理员密码:

\n");while

(1)//输入管理员密码{

temp=kbscan();printf("one次键盘扫描:

%c\n",temp);if(isnum(temp))

{

if(Guanlisum8)

{

Guanlichar[Guanlisum]=temp;

Guanlisum++;

displayOnLcd();//上屏幕

LCD号

}

elseif(isoper(temp))

{

if(temp=='#'Guanlisum==8)

{

inti;

for(i=0;ii++)

{

if(Guanlikey[i]!

=Guanlichar[i])return0;

}

Mimachar='1';

Mimachar='2';

Mimachar='3';

Mimachar='4';

Mimachar='5';

Mimachar='6';

printf("密码初始化完成.\n");

Guanlisum=0;

Mimasum=0;

Errorcount=0;

Modify=false;

Newmima=false;

gotoStart_Position;//回到开始}

elseif(temp=='*')

{

Guanlisum=0;

Clear();//清空屏

}

}

}

}

elseif(temp=='M')

{

Modify=true;

Mimasum=0;

Clear();

printf("请输入原密码:

\n");

}

coutendl;end8255();

//CloseDevice();

return0;

}

八.实验心得通过这次微机课题设计实验,使我学到了不少实用的知识,更重要的是做实验的过程,思考问题的方法,这与其他的实验师通用的,真正使我受益匪浅。

在做实验之前,我没有完全将课本上的理论知识掌握透彻,但在老师的讲解中,以及实践中对这些知识的理解有了很大一步的掌握。

对汇编语言的编程和微机系统的芯片有了比较深刻的认识。

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

当前位置:首页 > 初中教育 > 中考

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

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