内容发布更新时间 : 2025/1/4 13:44:22星期一 下面是文章的全部内容请认真阅读。
实验九 电子密码锁设计实验
一、实验目的 v4通过
1.学习了解74LS165芯片的原理,会使用74LS165进行简单的编程 2.学习编写keil c程序,实现密码锁的算法 3.学习掌握单片机51的简单编程 二、实验器材
1. PC机一台
2.MINI51实验开发板一块 3. 跳线若干个 三、实验原理
在安全技术防范领域,具有防盗报警功能的电子密码锁代替传统的机械式密码锁,克服了机械式密码锁密码量少、安全性能差的缺点,使密码锁无论在技术上还是在性能上都大大提高一步。随着大规模集成电路技术的发展,特别是单片机的问世,出现了带微处理器的智能密码锁,它具有很高的安全性、可靠性,应用日益广泛。
本实验是以51系列单片机(AT89C51)为核心,配以相应硬件电路,实现密码的设置、存贮、识别和显示,完成密码锁的模拟。单片机接收键入的代码,并与存贮在数组code_ram[6]中的密码进行比较,如果密码正确将会显示OPEN,如果密码不正确,将显示NO,并且允许操作人员重新输入密码,最多可输入三次;如果三次都不正确,则单片将上锁,并显示LOCK。每次按键完成后,6个数码管将会闪烁显示“—”,表示单片机已经接收到了输入的数据。
本实验硬件电路图如图所示:
图9.1 电子密码锁电路图
四、实验步骤
1. 用USB线连接MINI51实验板与PC机;
2. 打开Keil uVision3编程软件,输入源程序(第五部分); 3. 调试源程序,经调试正确无误后,点击下载按钮
到MINI51实验板上的仿真芯片上;
4. 按照原理图把JP2上的3与4、5与6、11与12、13与14、15与16以及JP3的2与3接上。 5. 点击Keil uVision3上的运行按钮五、程序设计
1. 流程图如图9.2所示:
开始,观察实验结果,并做相应记录。
LED清屏i<3Y输出显示NO键盘扫描N输出显示LOCKi++读取键值N判断键值是否与密码一致Y输出显示OPEN 图9.2 密码锁程序流程图
9.2 源程序
/**************************************************************************************** 东北大学104实验室 密码锁实验程序 目标器件:AT89C51 晶振:11.0592MHz 编译环境:Keil 7.60 A
****************************************************************************************/ /*******************************包含头文件**********************************************/ #include
/*******************************宏定义**************************************************/ #define uchar unsigned char #define uint unsigned int
/*******************************端口定义************************************************/ sbit view_clk=P1^7;//显示 CLK sbit view_num=P1^5;//显示 串入 sbit key_clk=P1^6;
sbit key_pl=P1^2; //键盘 移置 sbit key_out=P1^1; //键盘 输出
/*******************************7段共阳LED码表***************************************/ uchar code tab[9][8]={ {0,1,0,0,1,0,0,0}, //K {0,0,0,0,0,0,1,0}, //O {0,1,1,0,0,0,0,0}, //P {0,0,1,1,0,0,0,0}, //E {0,1,0,0,0,0,1,0}, //N {1,1,1,1,1,1,0,0}, //- {1,1,1,1,1,1,1,0}, //清0 {0,0,1,1,1,0,1,0}, //L {0,0,1,1,0,0,1,0}, //C };
/*******************************全局变量******************************************/ uint key_ram[6];
uint code_ram[6]={ 1,8,3,4,5,6 };//密码 uint k=0;
/**************************************************************************************** 函数功能:延时子程序 入口参数: t 出口参数:
****************************************************************************************/ void delay(uint i) {
do{i--;}while(i); }
/**************************************************************************************** 函数功能:LED显示子程序 入口参数: 出口参数:
****************************************************************************************/ void fun(uint n) { uint i; for(i=0;i<8;i++) { view_clk=!view_clk; view_clk=!view_clk; view_num=tab[n][i];