- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
微机系统与应用课程设计报告
课程设计题目 成
绩
矩阵式键盘数字密码锁设计 评 语:
教 师:
年 月 日
班 级: 031013
学 号:
姓 名: 林佳福
实验地点: E楼Ⅱ区312
实验时间: 2013.3.12-3.17
矩阵式键盘数字密码锁设计
一 . 实验目的
掌握与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力根据设定好的密码,采用实现密码的输入功能当密码输入正确之后,锁就打开,如果输入三次密码不正确,就锁定按键秒钟,发报警后,按键锁定”Modify Secret”键,系统提示输入旧密码,输入旧密码+“#”键后,如果正确,系统提示输入新密码,输入新密码+“#”后,新密码起效,重新进入初始状态;如果旧密码错,不能修改密码,密码锁直接进入初始状态。
三. 实验基本任务
1)具有开锁、修改密码基本的密码锁功能。超锁定,显示采用 “*” 号表示。”键后,系统提示输入管理员密码,输入管理员密码+“#”键后,如果正确,系统自动恢复用户初始密码为“123456”;如果错误,程序停止运行,系统退出。
2)增加了输入清除功能(*),在输入密码过程中,如果中途按下“*”键,则清除前面的输入,开始重新输入密码。
四 . 实验设计方案
实验用到8255作为并行接口设备,用以ISA总线与外设的连接,本次用的是8255的A口作为输出口,C口的高4位与B口是输入,C口低4位是输出口,所以控制住设置为ox8a,8253作为时钟器,作为控制提示灯的时间闪烁,8255的A口接键盘的rom,B口接col,地址线都连接在总线下面的芯片上接口,其他的读写控制线都接入ISA总线上。
如下图的接线设置
实验器材
8086CPU,可编程并行接口8255,可编程定时器8253,LCD显示屏,LED灯,4x4矩阵键盘。
实验原理图
程序代码
#include StdAfx.h
#include PCI9052DLL.h
#include stdio.h
#include math.h
#include string.h
#include stdlib.h
#include iostream.h
#include windows.h
unsigned char value[4][4]={{1,2,3,M},{4,5,6,O},{7,8,9,A},{0,#,*,S}};//键盘标示
unsigned char little[4][4]={{a,b,c,\0},{d,e,f,\0},{g,h,i,\0},{j,\0,\0,S}};//shift键的字母表示
char Mimachar[6]={1,2,3,4,5,6};
char Guanlikey[8]={1,2,3,4,5,6,7,8};
int Mimasum=0;
int Guanlisum=0;
char Wodemima[6];
char Guanlichar[8];
bool Modify=false;
bool Newmima=false;
int Errorcount=0;
bool Equal(char a[],char b[])//比较字符串是否相等
{
int i;
for(i=0;i6;i++)
{
if(Mimachar[i]!=Wodemima[i]) return false;
}
return true;
}
bool isnum(char tmp)//判断是否为数字
{
return tmp=9tmp=0;
}
bool isoper(char tmp)//判断是否为操作符
{
return tmp==#||tmp==*||tmp==S||tmp==A||tmp==O||tmp==M ? true : false;
}
bool ischar(char tmp)//判断是否为小写字母
{
return tmp=atmp=j;
}
void init8255()//初始化8255
{
OpenDevice();
OutByte(0xde03, 0x82);
}
void end8255()//结束8255
{
CloseDevice();
}
void InitLCD()//初始化LCD
{
unsigned char data[4]={0x01,0x06,0x0f,0x38};
unsigned char ch[6]=Open!;
int i;
for (i=0;i4;
文档评论(0)