矩阵式键盘实现的电子密码锁
简易电子密码锁(基于51单片机)报告

简易电子密码锁设计&我的设计思想联想到日前在安全技术防范领域,具有防盗报警功能的电子密码控制系统逐渐代替传统的机械式密码控制系统,并结合近期的学习过程和一些参考书籍,完成了简易的电子密码锁设计学习。
电子密码控制是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。
电子密码控制不论性能还是安全性都已大大超过了机械类结,具有良好的应用前景。
一、设计目的与内容设计了一个简易电子密码锁,可按要求从矩阵键盘输入6位数密码如“080874”,输入过程中有按键音提示。
当密码输入正确并按下确认键(“OK”键)后,发光二极管被点亮。
二、工作原理与基本操作过程介绍采用80C51为核心的单片机控制。
利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,进行电子密码锁的设计。
(1)键盘的人工编码给每个按键指定一个按键值,报告设定按键S1~S9对应的按键值分别为“1~9”,S10为数字“0”,S11为“OK”,S12~S16对应的按键值分别为12~16。
(2)根据按键值,指定每个按键对应的输入数字和信息。
如下表为每个按键代表的数字和输入信息。
当键盘扫描程序扫描到S10键被按下时,将其代表的按键值“0”通知CPU,CPU根据事先的规定,就会知道输入的数字是“0”。
矩阵键盘中每个按键所代表的数字和输入信息(3)输入数字和密码对比。
先将设定的密码用一个数组保存,报告中用的密码“080874”和“OK”确认信息可以用如下数组保存:Unsigned char D[ ]={0,8,0,8,7,4,11};在主程序接收到数字和信息后,通过逐位对比的方法进行判断。
输入的数字经对比正确时,程序才会继续顺序执行,否则,程序拒绝继续执行。
(4)执行预期功能。
如果输入密码正确,执行预期功能,报告设计为点亮P3.0口引脚LED。
三、电路图设计(Proteus绘制)四、程序设计(C语言)矩阵式键盘实现的电子密码锁程序#include<reg51.h> //包含51单片机寄存器定义的头文件sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //将P17位定义为P1.7引脚sbit sound=P3^7; //将sound位定义为P3.7unsigned char keyval; //储存按键值/************************************************************** 函数功能:延时输出音频**************************************************************/ void delay(void){unsigned char i;for(i=0;i<200;i++);}/************************************************************** 函数功能:软件延时子程序**************************************************************/ void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/************************************************************** 函数功能:主函数**************************************************************/ void main(void){unsigned char D[ ]={0,8,0,8,7,4,11}; //设定密码EA=1; //开总中断ET0=1; //定时器T0中断允许TMOD=0x01; //使用定时器T0的模式1TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%256; //定时器T0的高8位赋初值TR0=1; //启动定时器T0keyval=0xff; //按键值初始化while(keyval!=D[0]) //第一位密码输入不正确,等待;while(keyval!=D[1]) //第二位密码输入不正确,等待;while(keyval!=D[2]) //第三位密码输入不正确,等待;while(keyval!=D[3]) //第四位密码输入不正确,等待;while(keyval!=D[4]) //第五位密码输入不正确,等待;while(keyval!=D[5]) //第六位密码输入不正确,等待;while(keyval!=D[6]) //没有输入“OK”,等待;P3=0xfe; //P3.0引脚输出低电平,点亮LED}/**************************************************************函数功能:定时器0的中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time0_interserve(void) interrupt 1 using 1 //定时器T0的中断编号为1,使用第一组寄存器{unsigned char i;TR0=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下delay20ms(); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=1; //可判断是S1键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=2; //可判断是S2键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=3; //可判断是S3键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=5; //可判断是S5键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=6; //可判断是S6键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=7; //可判断是S7键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=9; //可判断是S9键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=0; //可判断是S10键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=11; //可判断是S11键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=12; //可判断是S12键被按下P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”keyval=13; //可判断是S13键被按下if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”keyval=14; //可判断是S14键被按下if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”keyval=15; //可判断是S15键被按下if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”keyval=16; //可判断是S16键被按下for(i=0;i<200;i++) //让P3.7引脚电平不断取反输出音频{sound=0;delay();sound=1;delay();}}TR0=1; //开启定时器T0TH0=(65536-500)/256; //定时器T0的高8位赋初值TL0=(65536-500)%256; //定时器T0的高8位赋初值}五、用Proteus软件进行仿真利用Keil软件进行编译通过后,生成hex文件。
基于51单片机的电子密码锁

电子密码锁一、工作原理本设计就采用行列式键盘,同时也能减少键盘与单片机接口时所占用的I/O 线的数目,在按键比较多的时候,通常采用这样方法。
每一条水平(行线)与垂直线(列线)的交叉处不相通,而是通过一个按键来连通,利用这种行列式矩阵结构只需要N条行线和M条列线,即可组成具有N ×M个按键的键盘。
在这种行列式矩阵键盘非键盘编码的单片机系统中,键盘处理程序首先执行等待按键并确认有无按键按下的程序段。
4×4矩阵键盘的工作原理在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图5所示。
在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接。
这样,一个端口(如P1口)就可以构成4*4=16个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20键的键盘,而直接用端口线则只能多出一键(9键)。
由此可见,在需要的键数比较多时,采用矩阵法来做键盘是合理的。
扫描原理把每个键都分成水平和垂直的两端接入,比如说扫描码是从垂直的入,那就代表那一行所接收到的扫描码是同一个bit,而读入扫描码的则是水平,扫描的动作是先输入扫描码,再去读取输入的值,经过比对之后就可知道是哪个键被按下。
由于这种按键是机械式的开关,当按键被按下时,键会震动一小段时间才稳定,为了避免让8051误判为多次输入同一按键,我们必须在侦测到有按键被按下,就Delay一小段时间,使键盘以达稳定状态,再去判读所按下的键,就可以让键盘的输入稳定。
利用51单片机设计一个用16个按键输入,6位数字输出显示的电子时钟。
如图1-1所示。
图1-1按键分布图具体要求和按键功能介绍如下:1. 上电后,6 位数码管显示“—”;2. 设置6 位密码,密码通过键盘输入,按“确定”键确认,如密码正确,将锁打开;3. 密码由用户自己设定,若密码正确即锁被打开,则指示灯被点亮;4. 若密码1 次输入错误,则报警;5. 按Set 键,修改密码;6. 按Cle 键可清除已输入的密码,重新进行输二、系统硬件组成本次设计的主要有键盘,数码管,STC89C52芯片,以及LED灯。
基于AT89C51的数字密码锁设计与实现

基于AT89C51的数字密码锁设计与实现摘要:为了满足多种场合的安防需要,设计了一款数字密码锁。
密码锁以AT89C51为核心,实现对其几个输入输出模块的状态控制,进而实现密码锁相应功能。
用户可通过硬件电路中的矩阵键盘进行密码输入,密码重置,密码存储等操作。
操作过程可以在数码管上直观显示。
通过proteus仿真,能够实现预期功能,该密码锁具有较广泛的应用价值。
关键词:AT89C51、矩阵键盘、数码管显示、状态机0 引言随着科学技术的发展和人们生活水平的提高,安保工作变得尤为重要[[1]]。
数字密码锁具有安全性高、价格便宜、耗电少、使用灵活等优点[[2]]。
使用过程中,通过输入密码来控制驱动电路,从而控制外围电路,实现开锁,关锁。
本文采用AT89C5I单片机作为密码锁核心控制元件,其结构简单,使用方便,价格便宜[[3]],可以持续稳定工作。
数字密码锁成品电路可用于单元门禁等多个公众场合。
1 数字密码锁系统架构本系统以AT89C51单片机(包含复位电路和晶振电路)为核心,外围配有矩阵键盘,七段数码管等接口和显示电路,实现开锁过程中的数字显示,以及错误报警等功能。
本系统可以实现多位密码的设置、存贮。
系统架构图如图1所示:图1:数字密码锁系统架构图具体功能如下:通过矩阵键盘输入密码,如果输入正确密码,驱动电路将锁打开,指示灯点亮,整个过程数码管会显示相应数字。
如果输入错误密码,蜂鸣器将发出错误警报。
2 硬件设计2.1 单片机最小系统采用AT89C51单片机(含有晶振、上电复位电路)作为核心控制元件,实现对输入信号的采集,以及对外围电路的控制。
2.2 矩阵键盘采用4*4矩阵键盘。
其中十个按键实现0~9十个数字输入,可连续输入多位密码。
左下角按键按下,可进行密码重新设定。
新密码录入完成,按下右下角按键,将密码保存。
键盘采用程序控制扫描方式[[4]],这样对CPU工作影响小,只使用8条行列信号线(P1口)就可以实现对按键信号的动态扫描输入。
单片机应用技术(5)(电子密码锁).

Y
记录对应按键情况 如:keyval=0
,,,,,,
第四列被按下 P1.7==0
Y
记录对应按键情况 如:keyval=4
接着用同样 地方法扫描 第二、三、
四行
在单片机组成的各种系统中,用的最多的是非编码键盘。
• 非编码键盘有分为:独立键盘和行列式(又 称为矩阵式)键盘。
2.按键消抖
按键在闭合和断开时,触点会存在抖动现象
理想波形 实际波形
+5V
无抖动
A B
按下抖动 稳定闭合 释放抖动
+5V
有抖动
3.独立式键盘的应用
• 用独立式键盘对数码秒表清0 • 案例:设计一个秒表,P1.0引脚上的按
键可以对秒表清0。 • (1)如何实现消除键盘抖动; • (2)如何实现秒表; • (3)如何得知键盘什么时候有按键按
下…
3.1 键盘消抖(软件实现)
• 直接将抖动这 段时间的状态 忽视。
简单的延时。
3.2 实现定时一秒
3.3 定时器中断实现键盘扫描
• 基本思想:
• 每隔一定时间, 去查看是否有 按键按下。
• 电路设计
(1)元器件选取 (2)元器件连接
• 程序设计(流程图)
(1)主程序设计 (2)矩阵按键识别流程图 (3)验证密码的控制流程图
• 1、键盘的分类
– 键盘分编码键盘和非编码键盘。 – (1)键盘上闭合键的识别由专用的硬件编码器
实现,并产生键编码号或键值的称为编码键盘, 如计算机键盘. – (2)而靠软件编程来识别的称为非编码键盘;
是否有按键按下
N
Y
延时
N
是否有按键按下
Y
PIC单片机电子密码锁

一、系统主要功能1)基本要求1.硬件设计要求:(1)CPU使用PIC16F877A。
(2)用4x4矩阵键盘作为操作信息输入。
(3)用LCD1602或六位数码管作为信息输出。
(建议使用LCD1602)(4)用蜂鸣器及发光二极管作为错误报警及状态显示。
2.系统功能要求:(1)输入密码功能。
输入密码时用“*”号或“-”显示。
在输入密码时,具有清除前一位密码功能(用CLR键)。
密码输入完毕,按(ENTER键)确认并生效。
(2)上锁功能。
在锁开状态下,通过(LOCK键)上锁。
(3)在锁合的状态下,通过密码开锁功能。
开锁时,直接在键盘上输入六位密码,按(ENTER键)确认,如果密码正确,转入锁开状态。
(4)在锁开状态下,修改密码功能。
在键盘上输入六位新的密码,按(ENTER键)确认,代替旧密码,并保存在RAM中。
(4)在开锁时,如果输入密码三次错误,产生声、光报警功能。
(5)0~9为密码键数字键,E为ENTER键,C为清除键CLR键,D作为上锁键LOCK键,如果用到其他键时,可自行定义。
2)进阶要求密码保存在PIC16F877A内部的EEPROM中,以防断电密码丢失。
(不使用外挂的EEPROM,如:AT24C02等)二、系统设计要求1)根据系统的功能和目标,画出系统功能框图。
2)根据系统功能框图用Proteus画出仿真电路图。
3)根据系统的功能要求,画出程序流程图。
4)根据程序流程图,用PIC C语言编写系统源程序。
5)进行编译、调试建立目标代码。
6)在Proteus环境下进行仿真。
三、设计报告报告内容包括系统设计思路、方案选择、器件选择及电路元器件明细表、系统功能框图、程序流程图、源程序清单、系统工作原理和设计心得等。
四、评分标准:1、完成《基本要求》者,得分80~89分;2、完成《基本要求》及《进阶要求》者,得分90~100分;五、设计时间安排十九周的星期一至星期五(2011年6月27日至7月1日)1)周一:布置任务,进行方案选择、器件选择。
密码锁矩阵键盘设计文档

1.工程文件
2.程序文件
3.程序编译
4.RTL图
5.Testbench
6.仿真图整体仿真图
上图仿真过程为先输入1234开锁(默认密码1234),开锁后按下修改键进入修改模式,再输入2537,确认,将密码修改为2537,再关锁。
然后再输入1234,无法开锁,在输入2537,开锁。
矩阵键盘模块仿真
显示模块
上图仿真的是数码管显示模块,4个数码管显示输入的4位密码,每输入1位,密码左移一
次。
密码输入模块
上图为密码输入模块,按键0~9输入密码,每输入1位,密码左移一次。
密码锁控制模块
密码锁控制模块为状态机控制,state信号为当前状态指示,密码正确时led_open输出高电平。
Error_cnt信号为输入密码错误计数。
密码修改模块
在密码修改状态下,输入新的密码并按下确认键,修改密码。
上图为将密码1234修改为2537 报警模块
State为密码锁当前状态,当密码输入连续错误3次,报警,上图仿真输入错误只有1次,无报警。
矩阵键盘模拟密码锁

名称:矩阵键盘模拟密码锁
论坛:
编写:shifang
日期:2009.5
修改:无
内容:模拟密码锁,密码固化到ROM不能通过按键输入更改
------------------------------------------------*/
for(j=0;j<8;j++)//循环比较8个数值,
//如果有一个不等则最终Flag值为0
Flag=Flag&&(temp[j]==dofly_DuanMa[password[j]]);
//比较输入值和已有密码
for(j=0;j<8;j++)//清屏
TempData[j]=0;
if(Flag)//如果比较全部相同,标志位置1
{
unsigned char cord_h,cord_l;//行列值中间变量
KeyPort=0x0f; //行线输出全为0
cord_h=KeyPort&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
DelayMs(10); //去抖
if((KeyPort&0x0f)!=0x0f)
0~255这里使用晶振12M,精确延时请使用汇编,大致延时
长度如下T=tx2+5 uS
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{
while(--t);
}
设计四数字电子密码锁.doc

数字电子密码锁一、设计目的与要求:目的:掌握矩阵式键盘的工作原理、设计方法;掌握译码器的应用;掌握状态机的设计方法,掌握数码管的控制。
要求:设计一个数字电子密码锁,密码为3 位,密码锁由键盘控制,显示采用数码管及LED灯。
功能:1、密码输入:每按下一个数字键,要求在数码管上显示,并依次左移;输入错误时,按退格键,清除前一个输入的数字;输入完毕,按确认键。
2、开锁:按开锁键,检查输入的密码是否正确,正确才开锁,成功。
3、上锁:按上锁键,可以直接上锁或者设定新密码上锁。
4、密码修改:按下修改键,必须先核对原密码,正确后可以输入3位数字,设为新的密码。
5、报警:开锁输入密码,连续错误三次,则禁止输入密码,并发出报警信号,用红灯一直亮表示。
6、解除报警:按复位键,解除报警状态,实际应用中复位键设置在其他部位,不可设置在键盘上。
7、万能密码:电锁维护者使用,在程序中暂时统一设置为999。
8、其他要求:输入键盘为矩阵式,不使用直接式;条件允许时可以使用语音模块代替指示灯的表示。
二、电路组成:为达到以上功能,可将数字电子密码锁分为以下几个模块:1、键盘接口电路:键盘矩阵、键盘扫描、键盘消抖、键盘译码及按键存储。
2、密码锁控制电路:数字按键输入、存储及清除;功能按键的设计:退格键、确认键、开锁键、上锁键、修改键、解除报警键;密码清除、修改与存储。
密码锁的上锁与开锁。
3、输出显示电路BCD译码、动态扫描电路、指示灯电路(或者为语音控制电路)。
三、功能电路的设计:1、键盘接口电路:图1(1)矩阵式键盘工作原理:矩阵式键盘是一种常见的输入装置,在计算机、电话、手机、微波炉等各工电子产品中被广泛应用。
如图2所示为一4×4 矩阵式键盘。
矩阵式键盘以行、列形式排列,图中为4 行4 列,键盘上的每一个按键盘其实是一个开关电路,当某键被按下时,该按键所对应的位置就呈现逻辑0的状态,键盘的扫描可以以行扫或列扫方式进行,图中为行扫方式,KEYR3—KEYR0 为扫描信号,其中的某一位为0即扫描其中的一行,具体见表1。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
/**************************************************************
函数功能:定时器 0 的中断服务子程序,进行键盘扫描,判断键位
**************************************************************/
TL0=(65536-500)%256; //定时器 T0 的高 8 位赋初值
TR0=1;
//启动定时器 T0
keyval=0xff;
//按键值初始化
while(keyval!=D[0]) //第一位密码输入不正确,等待 ;
while(keyval!=D[1]) ;
while(keyval!=D[2]) ;
//第三行置为低电平“0”(P1.2 输出低电平“0”)
//如果检测到接 P1.4 引脚的列线为低电平“0”
//可判断是 S9 键被按下
//如果检测到接 P1.5 引脚的列线为低电平“0”
//可判断是 S10 键被按下
//如果检测到接 P1.6 引脚的列线为低电平“0”
//可判断是 S11 键被按下
//矩阵式键盘实现的电子密码锁 #include<reg51.h> //包含 51 单片机寄存器定义的头文件
sbit P14=P1^4; sbit P15=P1^5; sbit P16=P1^6; sbit P17=P1^7; sbit sound=P3^7;
//将 P14 位定义为 P1.4 引脚 //将 P15 位定义为 P1.5 引脚 //将 P16 位定义为 P1.6 引脚 //将 P17 位定义为 P1.7 引脚 //将 sound 位定义为 P3.7
//可判断是 S16 键被按下
for(i=0;i<200;i++) //让 P3.7 引脚电平不断取反输出音频
{
sound=0;
delay();
sound=1;
delay();
}
}
TR0=1;
//开启定时器 T0
TH0=(65536-500)/256; //定时器 T0 的高 8 位赋初值
TL0=(65536-500)%256; //定时器 T0 的高 8 位赋初值
keyval=4;
//可判断是 S4 键被按下
P1=0xfd; if(P14==0)
keyval=5; if(P15==0)
keyval=6; if(P16==0)
//第二行置为低电平“0”(P1.1 输出低电平“0”) //如果检测到接 P1.4 引脚的列线为低电平“0”
//可判断是 S5 键被按下 //如果检测到接 P1.5 引脚的列线为低电平“0” //可判断是 S6 键被按下 //如果检测到接 P1.6 引脚的列线为低电平“0”
unsigned char keyval; //储存按键值
/**************************************************************
函数功能:延时输出音频
**************************************************************/
void time0_interserve(void) interrupt 1 using 1 //定时器 T0 的中断编号为 1,使用第一
组寄存器
{
unsigned char i;
TR0=0;
//关闭定时器 T0
P1=0xf0;
//所有行线置为低电平“0”,所有列线置为高电平“1”
if((P1&0xf0)!=0xf0)
void delay(void)
{
unsigned char i;
for(i=0;i<200;i++)
;
}
/**************************************************************
函数功能:软件延时子程序
**************************************************************/
void main(void)
{
unsigned char D[ ]={0,8,0,8,7,4,11};
//设定密码
EA=1;
//开总中断
ET0=1;
//定时器 T0 中断允许
TMOD=0x01;
//使用定时器 T0 的模式 1
TH0=(65536-500)/256; //定时器 T0 的高 8 位赋初值
while(keyval!=D[3]) ;
while(keyval!=D[4]) ;
while(keyval!=D[5]) ;
while(keyval!=D[6]) ;
P3=0xfe;
//第二位密码输入不正确,等待 //第三位密码输入不正确,等待 //第四位密码输入不正确,等待 //第五位密码输入不正确,等待 //第六位密码输入不正确,等待 //没有输入“OK”,等待 //P3.0 引脚输出低电平,点亮 LED
//如果检测到接 P1.7 引脚的列线为低电平“0”
keyval=12;
//可判断是 S12 键被按下
P1=0xf7;
//第四行置为低电平“0”(P1.3 输出低电
平“0”)
if(P14==0)
//如果检测到接 P1.4 引脚的列线为低电平“0”
keyval=13;
//可判断是 S13 键被按下
if(P15==0)
keyval=7; if(P17==0)
keyval=8;
//可判断是 S7 键被按下 //如果检测到接 P1.7 引脚的列线为低电平“0” //可判断是 S8 键被按下
P1=0xfb; if(P14==0)
keyval=9; if(P15==0)
keyval=0; if(P16== Nhomakorabea)keyval=11; if(P17==0)
}
//可判断是 S1 键被按下
if(P15==0)
//如果检测到接 P1.5 引脚的列线为低电平“0”
keyval=2;
//可判断是 S2 键被按下
if(P16==0)
//如果检测到接 P1.6 引脚的列线为低电平“0”
keyval=3;
//可判断是 S3 键被按下
if(P17==0)
//如果检测到接 P1.7 引脚的列线为低电平“0”
//如果检测到接 P1.5 引脚的列线为低电平
“0”
keyval=14;
//可判断是 S14 键被按下
if(P16==0)
//如果检测到接 P1.6 引脚的列线为低电平“0”
keyval=15;
//可判断是 S15 键被按下
if(P17==0)
//如果检测到接 P1.7 引脚的列线为低电平“0”
keyval=16;
void delay20ms(void)
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<60;j++)
;
}
/**************************************************************
函数功能:主函数
**************************************************************/
//列线中有一位为低电平“0”,说明有键按下
delay20ms();
//延时一段时间、软件消抖
if((P1&0xf0)!=0xf0)
//确实有键按下
{
P1=0xfe;
//第一行置为低电平“0”(P1.0 输出低电平“0”)
if(P14==0)
//如果检测到接 P1.4 引脚的列线为低电平“0”
keyval=1;