矩阵键盘0——15键值
单片机 矩阵键盘实验 实验报告
实验五矩阵键盘实验一、实验内容1、编写程序,做到在键盘上每按一个数字键(0-F)用发光二极管将该代码显示出来。
按其它键退出。
2、加法设计计算器,实验板上有12个按键,编写程序,实现一位整数加法运算功能。
可定义“A”键为“+”键,“B”键为“=”键。
二、实验目的1、学习独立式按键的查询识别方法。
2、非编码矩阵键盘的行反转法识别方法。
三、实验说明1、MCS51系列单片机的P0~P3口作为输入端口使用时必须先向端口写入“1”。
2、用查询方式检测按键时,要加入延时(通常采用软件延时10~20mS)以消除抖动。
3、识别键的闭合,通常采用行扫描法和行反转法。
行扫描法是使键盘上某一行线为低电平,而其余行接高电平,然后读取列值,如读列值中某位为低电平,表明有键按下,否则扫描下一行,直到扫完所有行。
行反转法识别闭合键时,要将行线接一并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作于输入方式,程序使CPU通过输出端口在各行线上全部送低电平,然后读入列线值,如此时有某键被按下,则必定会使某一列线值为0。
然后,程序对两个并行端口进行方式设置,使行线工作于输入方式,列线工作于输出方式,并将刚才读得的列线值从列线所接的并行端口输出,再读取行线上输入值,那么,在闭合键所在行线上的值必定为0。
这样,当一个键被接下时,必定可以读得一对唯一的行线值和列线值。
由于51单片机的并口能够动态地改变输入输出方式,因此,矩阵键盘采用行反转法识别最为简便。
行反转法识别按键的过程是:首先,将4个行线作为输出,将其全部置0,4个列线作为输入,将其全部置1,也就是向P1口写入0xF0;假如此时没有人按键,从P1口读出的值应仍为0xF0;假如此时1、4、7、0四个键中有一个键被按下,则P1.6被拉低,从P1口读出的值为0xB0;为了确定是这四个键中哪一个被按下,可将刚才从P1口读出的数的低四位置1后再写入P1口,即将0xBF写入P1口,使P1.6为低,其余均为高,若此时被按下的键是“4”,则P1.1被拉低,从P1口读出的值为0xBE;这样,当只有一个键被按下时,每一个键只有唯一的反转码,事先为12个键的反转码建一个表,通过查表就可知道是哪个键被按下了。
矩阵主控键盘说明书全解
主控键盘( SYSTEM KEYBOARD ) 使用说明书(中文版第一版)注意事项:1. 安装场所远离高温的热源和环境,避免阳光直接照射。
为确保本机的正常散热,应避开通风不良的场所。
为了防止电击和失火,请勿将本机放置于易燃、易爆的场所。
小心轻放本机避免强烈碰撞、振动等,避免安装在会剧烈震动的场所。
避免在过冷、过热的场所间相互搬动本机,以免机器内部产生结露,影响机器的使用寿命。
2. 避免电击和失火切记勿用湿手触摸电源开关和本机。
勿将液体溅落在本机上,以免造成机器内部短路或失火。
勿将其它设备直接放置于本机上部。
安装过程中进行接线或改线时,都应将电源断开,预防触电。
重要提示:为了避免损坏,请勿自动拆开机壳,必须委托有资格有专业维修人员在指定的维修单位进行维修。
清洁装置时,请勿使用强力清洗剂,当有灰尘时用干布擦拭装置。
不得在电源电压过高和过低的场合下使用该本机。
务请通读本使用说明书,以便您掌握如何正确使用本机。
当您读本说明书后,请把它妥善保存好,以备日后参考。
如果需要维修,请在当地与经本公司授权的维修站联系。
环境防护:本机符合国家电磁辐射标准,对人体无电磁辐射伤害。
申明:产品的发行和销售由原始购买者在许可协议条款下使用;未经允许,任何单位和个人不得将该产品全部或部分复制、再生或翻译成其它机器可读形式的电子媒介;本手册若有任何修改恕不另行通知;因软件版本升级而造成的与本手册不符,以软件为准。
目录设备概述 (3)第一部分控制矩阵切换系统 (4)1.1 键盘通电 (4)1.2键盘操作加锁 (4)1.3 键盘操作解锁 (4)1.4 键盘密码设置 (4)1.5选择监视器 (5)1.6选择摄像机 (5)1.7控制解码器 (5)1.8控制智能高速球 (6)1.9操作辅助功能 (7)1.10 系统自由切换 (8)1.11 系统程序切换 (9)1.12系统同步切换 (10)1.13 系统群组切换 (10)1.14报警联动 (10)1.15防区警点 (11)1.16警点状态 (11)1.17声音开关 (11)第二部分控制数字录像机、画面处理器 (11)2.1进入数字录像机、画面处理器模式 (11)2.2退岀数字录像机、画面处理器模式 (11)2.3选择数字录像机、画面处理器 (11)2.4控制数字录像机、画面处理器 (12)第三部分设置连接 (12)3.1 键盘工作模式 (12)3.2 键盘与矩阵主机连接示意图 (14)3.3键盘解码器连接示意图 (15)3.4键盘与小型系统连接示意图 (16)3.5键盘与智能高速球连接示意图 (16)系统控制键盘SYSTEM KEYBOARD设备概述:系统控制键盘是与矩阵切换系统配套使用的一种操作键盘。
实验一 矩阵键盘检测
实验一矩阵键盘检测一、实验目的:1、学习非编码键盘的工作原理和键盘的扫描方式。
2、学习键盘的去抖方法和键盘应用程序的设计。
二、实验设备:51/AVR实验板、USB连接线、电脑三、实验原理:键盘接口电路是单片机系统设计非常重要的一环,作为人机交互界面里最常用的输入设备。
我们可以通过键盘输入数据或命令来实现简单的人机通信。
1、按键的分类一般来说,按键按照结构原理可分为两类,一类是触点式开关按键,如机械式开关、导电橡胶式开关等;另一类是无触点式开关按键,如电气式按键,磁感应按键等。
前者造价低,后者寿命长。
目前,微机系统中最常见的是触点式开关按键(如本学习板上所采用按键)。
按键按照接口原理又可分为编码键盘与非编码键盘两类,这两类键盘的主要区别是识别键符及给出相应键码的方法。
编码键盘主要是用硬件来实现对键的识别,非编码键盘主要是由软件来实现键盘的识别。
全编码键盘由专门的芯片实现识键及输出相应的编码,一般还具有去抖动和多键、窜键等保护电路,这种键盘使用方便,硬件开销大,一般的小型嵌入式应用系统较少采用。
非编码键盘按连接方式可分为独立式和矩阵式两种,其它工作都主要由软件完成。
由于其经济实用,较多地应用于单片机系统中(本学习板也采用非编码键盘)。
2、按键的输入原理在单片机应用系统中,通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。
也就是说,它能提供标准的TTL 逻辑电平,以便与通用数字系统的逻辑电平相容。
此外,除了复位按键有专门的复位电路及专一的复位功能外,其它按键都是以开关状态来设置控制功能或输入数据。
当所设置的功能键或数字键按下时,计算机应用系统应完成该按键所设定的功能。
因此,键信息输入是与软件结构密切相关的过程。
对于一组键或一个键盘,通过接口电路与单片机相连。
单片机可以采用查询或中断方式了解有无按键输入并检查是哪一个按键按下,若有键按下则跳至相应的键盘处理程序处去执行,若无键按下则继续执行其他程序。
51单片机矩阵键盘C语言编程
/****************************************************************************** 函数名称:main() 函数功能:主函数,键值处理
******************************************************************************/
__ ____
KEY=HSM + LJC|0x0f 例如,“0”键处在第 1 行第 1 列,其 HSM=0xfe,LJC=0xe0,代入上式,可得“0” 键的键值为
__ ____ __ ____ KEY=HSM + LJC|0x0f = 0xfe + 0xe0|0x0f =0x01 + 0x10= 0x11 根据上述计算方法,可计算所有按键地键值,见下表
4
5
6
7
P11
8
9
A
Байду номын сангаас
B
P12
C
D
E
F
P13
原理图12
根据矩阵非编码键盘逐行扫描法处理流程,键盘扫描程序应包括以下内容。 (1)查询是否有键被按下。 首先单片机向行扫描口输出扫描码 F0H,然后从列检测口读取列检测信号,只要一列信 号不为“1”,即 P1 口的值不等于 F0H,则表示有键被按下;否则表示无键被按下。 键值译码公式如下: (2)查询闭合键所在的行列位置。 若有键按下,单片机将等到的列检测信号取反,列检测口中为 1 的位便是闭合键所在 的列。 列号确定后,还需要进行逐行扫描以确定行号。单片机首先向行扫描口输出第 1 行的 扫描码 FEH,按着读列检测口,若列检测信号全为“1”,则表示闭合键不在第 1 行。接着 向行扫描口输出第 2 行的扫描码 FDH,再读列检测品,……。以此类推,直到找到闭合键 所在的行,并将该行的扫描码取反保存。如果扫描完所有的行后仍没有找到闭合键,则结束 行扫描,判断本次按键是误动作。 (3)对得到的行号和列号进行译码,确定键值。 根据原理图 12 所示,1、2、3、4 行的扫描码分别为 0xfe、0xfd、0xeb、0xf7;1、2、3、 4 列的列检测数据分别为 0xe0、0xd0、0xb0、0x70。设行扫描码码子 HSM,列检测数据为 LJC,则键值为 KEY,则有
51单片机键盘数码管显示(带程序)
期中大作业学院:物理与电子信息工程学院课题:【利用8255和51单片机实现数码管显示按键数值的程序】要求:【4*4矩阵键盘,按0到15,数码管上分别显示0~9,A~F】芯片资料:8255:8255是Intel公司生产的可编程并行I/O接口芯片,有3个8位并行I/O口。
具有3个通道3种工作方式的可编程并行接口芯片(40引脚)。
其各口功能可由软件选择,使用灵活,通用性强。
8255可作为单片机与多种外设连接时的中间接口电路。
8255作为主机与外设的连接芯片,必须提供与主机相连的3个总线接口,即数据线、地址线、控制线接口。
同时必须具有与外设连接的接口A、B、C口。
由于8255可编程,所以必须具有逻辑控制部分,因而8255内部结构分为3个部分:与CPU连接部分、与外设连接部分、控制部分。
8255特性:1.一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口。
2.具有24个可编程设置的I/O口,即3组8位的I/O口,分别为PA口、PB口和PC 口。
它们又可分为两组12位的I/O口:A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3)。
A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O三种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.引脚说明RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:芯片选择信号线,当这个输入引脚为低电平时,即CS=0时,表示芯片被选中,允许8255与CPU进行通讯;CS=1时,8255无法与CPU做数据传输。
RD:读信号线,当这个输入引脚为低电平时,即CS=0且RD=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,即CS=0且WR=0时,允许CPU将数据或控制字写入8255。
矩阵键盘的键值计算及编程
2 读取I/O口值的练习
.j
用程序控制单片机P2口工作,让高四位全高电平,低四位全低电平。 即:P2=0xf0; 具体实现见操作,结果如图。
P1口高四位是指:P1.7 P1.6 P1.5 P1.4
一般都是自高到低读出一个端口各脚电平 ,得到8位二进制数,再将8位二进制转换成2位十六进数。
P3口值= P3.7 P3.6 P3.5 P3.4P3.3 P3.2 P3.1 P3.0 =1111 1010=0xfa
2 读取I/O口值的练习
.j
当 程序使P2=0x0f; 外接一个两脚开关到P2口只能让P2产生如下四个新的值: 0x0e, 0x0d,0x0b,0x07 0x0d 0x0b
找出行线值 置行线所处端口位置高电平
找出列线值 置列线所处端口位置高电平
行线值+列线值=键值
计算键值一般方法
3 键盘的键值
.j
先找出行线值,再找出列线值,最后绘出矩阵键盘的键值。
总结
4×4矩阵键盘的键值 共有16个,计算键值时总是:
4 键盘扫描编程__线反转法
.j
/************键盘扫子描函数*******************/ char keyscan(void) //键盘扫描函数,键盘使用P2口 { char value_h,value_l; //value_h行值变量,value_l列值变量 P2=0xf0; //将行线所处位置置高电平 if((P2&0xf0)!=0xf0) //判断是否有键按下 { delay(10); //延时防抖 if((P2&0xf0)!=0xf0) //仍有键按下 { value_h=P2&0xf0; //读出P2口值给变量value_h P2=0x0f; //将列线所处位置置高电平 value_l=P2&0x0f; //读出P2口值给变量value_l return(value_l+value_h); //找到的键值返回给调用函数 } } }
c51常用程序大全
2.独立按键:51开发板独立键和矩阵键盘不能同时用,会有冲突
sbit s2=P3^4;
while(1) { if(s2==0) led=0; else led=1; }
//通过大循环不断扫描按键状态(方法一)
if(s2==0)
//消抖动 (方法二)
{
delay_ms(20);
if(s2==0)
{
while(!s2); //等待按键释放
//0000 0011 设置定时器0为工作方式3
TH0= 256-250 ; //6 以1s装初值,12M溢出4000次,11.0592溢出3686次 TL0= 256-250 ; //6 EA=1; //开总中断 ET0=1; //定时器/计数器0 中断允许位 ET1=1; //开定时器1中断 TR0=1; //启动定时器0 TR1=1; //启动定时器0的高8位计数器 while(1) //程序停止在这里等待中断发生
delay_ms(20);//延时30ms scan1=P3; if((scan1&0xf0)!=0xf0)//二次判键是否按下 {
P3=0x0f;//线翻转法 delay_ms(1);//延时 scan2=P3;//读P3口的状态 keycode=scan1|scan2; //组合成键编码 while(P3!=0x0f); //等待按键释放 for(j=0;j<=15;j++)
作用:对于延时很短的,要求在us级的,采用“_nop_”函数,这个函数相当汇编NOP指令,延时几微
秒。 NOP指令为单周期指令(即为12个时钟周期),1/12 us可由晶振频率算出延时时间,对于12M晶振, 延时1uS;对于11.0592M,则n个NOP指令为单周期为1.08155 us * n 对于延时比较长的,要求在大于10us,采用C51中的循环语句来实现
矩阵键盘操作说明
矩阵键盘操作说明一、系统复位1按数字键0后,按MON键2输入99后,按NEXT键二、键盘视频选择首先是监视器选择然后是摄像机选择1、按键盘上的CLEAR键,清除键盘数字输入ENTER区中的数字显示2、输入所选择的监视器号,该数字在键盘数字输入ENTER区中显示3、按MON键,该监视器号在键盘监视器MONITOR区中显示4、同时系统主机将返回该监视器对应的图像号,在键盘的摄像机CAMERA区中显示。
5、输入选择的摄像机号,该数字在键盘数字输入ENTER区中显示6、按CAM键7、系统主机将返回该图像号,在键盘的摄像机CAMERA区中显示则选择的图像再选择的监视器上显示三、图像区域切换在指定的监视器上运行一个指定区域的图像切换,该功能可以在任何一个监视上浏览切换所有的图像操作步骤如下:1、按键盘上CLERA键,清除数字输入ENTER区中的数字显示2、输入所选择的监视器号,该数字在键盘数字输入ENTER区中显示3、按MON键,该监视器号在键盘监视器MONITOR区中显示4、输入区域切换中的开始图像号5、按ON键,确认开始区域的开始图像6、输入区域切换中的结束图像号7按OFF键确定区域切换的结束图像完成后则该监视器开始区域切换依次按照设定的图像号进行切换如要添加一个图像到切换序列中则:1和设置区域切换的步骤一样重复1-3步,选择一个监视器,该监视必须已存在一个切换队列2、输入所希望添加的摄像机图像好,该摄像机图像号必须在系统的最大允许摄像机图像号的范围内3、按组合键ENTER-ON,ENTER键必须在前面,确定添加的图像。
如要在切换队列中删除一个图像:1、和设置区域切换的步骤一样重复1-3步,选择一个监视器,该监视必须已存在一个切换队列2输入所希望添加的摄像机图像好,该摄像机图像号必须在这个序列切换范围内。
3、按组合键ENTER-OFF,ENTER必须在前面,确认删除图像。
四、报警设置单布防针对需要布防的防区一个一个的布防,防区布防后,根据监视器与防区触点权限表,自动将该防区分配到与之对应的监视器上。
矩阵键盘完整使用说明书
键盘控制器(KEYBOARD CONTROLLER)使用说明书Operation InstructionCopyright 2003-2009. All Rights Reserved.温馨提示:感谢您使用本公司产品。
为了让您能够尽快熟练的操作本机,请您仔细阅读我们为您配备内容详细的使用说明书,从中您可以获取有关产品安全注意事项、产品介绍以及产品使用方法等方面的知识。
当您阅读完说明书后,请将它妥善保存好,以备日后参考。
如果您在产品的使用过程中发现什么问题,请联系产品技术服务人员。
谢谢您的合作!申明:在编写此说明书时我们非常小心谨慎,并认为此说明书中所提供的信息是正确可靠的,然而难免会有错误和疏漏之处,请您多加包涵并热切欢迎您的指正。
但是我们将不对本手册可能出现的问题和疏漏负责。
同时,由于我们无法控制用户对本手册可能造成的误解,因此,将不负责在使用本手册的过程中出现的事故或由此引起的损坏。
对于因使用本产品所造成的任何损坏第三方的索赔不负责任。
对于因软件的误操作、产品维修、或其它意外情况等引起资料的删改或丢失不负任何责任,也不对由此造成的其它间接损失负责。
本产品的发行和销售由原始购买者在许可协议条款下使用。
未经允许,任何单位和个人不得将本说明书全部或部分复制、再生或翻译成其它机器可读形式的电子媒介。
本说明书若有任何修改恕不另行通知。
因软件版本升级而造成的与本说明书不符,以软件为准。
注:本设备在出厂前已经过严格的质量测试,符合国家电磁辐射标准。
目录第一部分键盘操作 (4)1.1 设备概述 (4)1.2 开机运行 (6)1.3 键盘登录 (6)1.4 键盘注销 (6)第二部分控制监控主机 (6)2.1 选择监视器 (6)2.2 选择图像 (7)2.3 向前、向后切换图像 (7)2.4 图像保持 (7)2.5 主机自由切换 (7)2.6 主机程序切换 (8)2.7 主机同步切换 (9)2.8 主机群组切换 (10)2.9 屏幕分割控制 (10)2.10 屏幕拼接控制 (10)2.11 保存主机当前设置 (11)2.12 网络主机控制 (11)2.13 监控主机菜单设置 (11)第三部分控制摄像机 (12)3.1 选择摄像机 (12)3.2 控制摄像机方向 (12)3.3 控制摄像机镜头 (13)3.4 预置位操作 (13)3.5 图像返回 (14)3.6 自动巡视 (14)3.7 轨迹扫描 (14)3.8 区域扫描 (15)3.9 云台自动扫描 (15)3.10 操作辅助功能 (16)3.11 智能摄像机菜单设置 (16)第四部分控制报警主机 (16)4.1 选择警点 (16)4.2 防区警点设防、撤防 (16)4.3 报警应答 (17)4.4 警点状态查询 (17)4.5 报警联动开、关 (17)4.6 报警联动时间 (17)第五部分控制数字录像机 (17)5.1 选择数字录像机 (17)5.2 图像监控 (18)5.3 多画面监控 (18)5.4 图像浏览 (18)5.5 图像抓拍 (18)5.6 图像播放、暂停 (18)5.7 图像快退、快进 (18)5.8 图像段首、段末 (18)5.9 图像帧退、帧进 (18)5.10 图像录制 (19)5.11 图像停止 (19)5.12 信息显示 (19)5.13 录像机菜单设置 (19)5.14 退出控制数字录像机 (19)第六部分宏指令功能 (19)6.1 宏指令在单级系统的应用 (19)6.2 宏指令在多级系统的应用 (19)6.3 宏指令操作 (20)第七部分键盘设置 (21)7.1 通讯速率设置 (21)7.2 控制协议设置 (21)7.3 操作员设置 (22)7.4 常规设置 (22)7.5 语言选择 (24)7.6 版本信息 (24)7.7 退出 (24)第八部分键盘连接 (25)8.1 键盘与智能摄像机、解码器连接示意图 (25)8.2 键盘与监控主机连接示意图 (26)8.3 键盘与报警主机连接示意图 (27)8.4 键盘与数字录像机连接示意图 (28)安全事项 (29)主键盘控制器KEYBOARD CONTROLLER第一部分键盘操作1.1 设备概述:主键盘控制器是以操作控制安防监控主机、智能摄像机、数字录像机、报警主机为特色的操作设备。
矩阵键盘——精选推荐
矩阵键盘1.⾏扫描法⼯作原理(查询法)判别键盘中有⽆键按下。
向⾏线输出全0,读⼊列线状态。
如果有键按下,总有⼀列线被拉⾄低电平,从⽽使列输⼊不全为1。
查找按下键所在位置。
依次给⾏线送低电平,查列线状态。
全为1,则所按下的键不在此⾏;否则所按下的键必在此⾏且是在与零电平列线相交的交点上的那个键。
对按键位置进⾏编码。
找到所按下按键的⾏列位置后,对按键进⾏编码,即求得按键键值。
#includechar key(){char row,col, k =-1; //定义⾏、列、返回值P1=0xf0;if((P1&0xf0)==0xf0)return k; //⽆键按下,返回delay20ms(); //延时去抖if((P1&0xf0)==0xf0)return k; //抖动引起,返回for(row=0;row<4;row++) //⾏扫描{ P1=~(1<k=P1&0xf0;if(k!=0xf0) //列线不全为1,{ while(k&(1<<(col+4))) //所按键在该列col++; //查找为0列号k=row*4+col; //计算键值P1=0xf0;while((P1&0xf0)!=0xf0); //等待键释放break;} }return k; //返回键值}3.⾏列反转法⼯作原理判别键盘中有⽆键按下。
(⽅法同⾏扫描法)输⼊变输出,再读。
将上⼀步读取到的列线输⼊值从列线输出,读取⾏线值。
定位求键值。
根据上⼀步输出的列线值和读取到的⾏线值就可以确定所按下键所在的位置,从⽽查表确定键值。
#includechar key(){char code keycode[]= {0xee,0xde,0xbe,0x7e,0xed,0xdd,0xbd,0x7d, 0xeb,0xdb,0xbb,0x7b,0xe7,0xd7,0xb7,0x77}char row,col,k=-1,i;P1=0xf0;if((P1&0xf0)==0xf0)return k; //⽆键按下,返回-1 delay20ms(); //延时去抖if((P1&0xf0)==0xf0)return k; //抖动引起,返回-1 P1=0xf0;col=P1&0xf0; //⾏输出全0,读取列值P1=col|0x0f;row=P1&0x0f; //列值输出,读取⾏值//查找⾏列组合值在键盘表中位置for(i=0;i<16;i++)if((row|col)==keycode[i]) //找到,i即为键值,{ //否则,返回-1key=i; //对重复键,该⽅法break; //处理为⽆键按下}P1=0xf0;while((P1&0xf0)!=0xf0); //等待键释放return k; //返回键值}。
矩阵键盘按键的数码管显示矩阵键盘按键的数码管显示
一、矩阵键盘按键的数码管显示1.实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2.实验所用仪器及元器件计算机一台实验板一块电源线一根扁平线一根下载线一根3.实验任务要求设计出4*4矩阵键盘对某一按键按下就在数码管显示一个数字。
按键从左上角到右下角依次为1,2, (16)4.实验原理按键模块原理键盘扫描的实现过程如下:对于4×4键盘,通常连接为4行、4列,因此要识别按键,只需要知道是哪一行和哪一列即可,为了完成这一识别过程,我们的思想是,首先固定输出4行为高电平,然后输出4列为低电平,在读入输出的4行的值,通常高电平会被低电平拉低,如果读入的4行均为高电平,那么肯定没有按键按下,否则,如果读入的4行有一位为低电平,那么对应的该行肯定有一个按键按下,这样便可以获取到按键的行值。
同理,获取列值也是如此,先输出4列为高电平,然后在输出4行为低电平,再读入列值,如果其中有哪一位为低电平,那么肯定对应的那一列有按键按下。
键盘键值的获取:键盘上的每一个按键其实就是一个开关电路,当某键被按下时,该按键的接点会呈现0的状态,反之,未被按下时则呈现逻辑1的状态。
扫描信号由r o w进入键盘,变化的顺序依次为1110-1101-1011-0111-1110。
每一次扫描一排,依次地周而复始。
例如现在的扫描信号为1011,代表目前正在扫描9,10,11,12这一排的按键,如果这排当中没有按键被按下的话,则由column读出的值为1111;反之当9这个按键被按下的话,则由colu mn读出的值为1110。
根据上面所述原理,我们可得到各按键的位置与数码关系如表所示:1110 1110 1110 1110 1101 1101 1101 1101row1110 1101 1011 0111 1110 1101 1011 0111 column1 2 3 4 5 6 7 8键值row 1011 1011 1011 1011 0111 0111 0111 0111column1110 1101 1011 0111 1110 1101 1011 0111键值9 10 11 12 13 14 15 16动态显示原理为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。
矩阵键盘键值的计算方法
矩阵键盘键值的计算方法矩阵键盘是一种常见的输入设备,广泛应用于计算机、手机、电子器件等。
它通过将按下的键映射为一个特定的键值,实现对应用程序的输入控制。
本文将介绍矩阵键盘键值的计算方法,帮助读者了解矩阵键盘的工作原理和键值计算的方法。
一、矩阵键盘的基本原理矩阵键盘由多个行和列的按键构成,这些按键被排列成一个矩阵,行与列之间形成交叉点。
按下某个按键时,会使得对应行和列之间形成闭合电路。
矩阵键盘通过扫描行和列,检测到闭合电路,从而确定所按下的按键。
二、矩阵键盘键值计算的方法1. 扫描行和列矩阵键盘首先需要扫描行和列,以检测闭合电路。
这个过程可以通过控制行和列的输入输出来实现。
首先将所有行设置为高电平输出状态,然后逐行将其设置为低电平状态,同时检测列的输入状态。
如果某一列为低电平,则说明该行和列之间的按键闭合,即键盘检测到按键按下的动作。
2. 确定键值在检测到按键闭合后,需要进一步确定对应的键值。
这个过程需要根据键盘的布局和键盘的编码规则来实现。
一般情况下,我们可以以行列号的方式对键盘按键进行编码。
假设有N 行M 列的键盘,按下的按键位于第i 行第j 列,则键值可表示为(i-1)*M + j。
通过这种方式,我们可以根据按下的行和列号计算出对应按键的键值。
假设有一个4 行4 列的矩阵键盘,按下的按键位于第3 行第2 列。
按照上述计算方法,我们可以得到键值为(3-1)*4 + 2 = 10。
因此,按下的按键对应的键值为10。
3. 键值的应用计算出按键的键值后,我们可以将其应用于对应的应用程序中。
键值可以作为输入信号传递给应用程序,根据键值的不同,应用程序可以执行相应的操作。
例如,将键值与预先定义的按键映射表进行匹配,可以实现不同按键对应的功能,如快捷键、功能键等。
矩阵键盘键值的计算方法涉及到扫描行和列,确定键值等关键步骤。
通过扫描行和列,可以检测到按键的闭合电路;通过确定键值,可以识别所按下的按键。
这种计算方法可以广泛应用于矩阵键盘的设计和开发中,帮助我们理解矩阵键盘的工作原理和键值计算的方法,并将其应用到实际的应用程序中。
键盘矩阵说明书
用户操作手册矩阵控制键盘说明书一、概述:控制键盘是一种功能强大的多功能操作键盘,与矩阵切换/控制系统兼容。
控制键盘可调用所有的摄像机、编程监视器切换序列和控制解码器,高速球。
控制键盘能改变系统的时间、日期、摄像机条目并能对系统进行编程;能设置预置点和选择监视器,可控制包括巡视和报警的所有系统功能;控制功能液晶显示区显示当前受控的监视器、显示摄像机号以及从键盘输入的数字。
键盘具有操作保护功能。
多协议,多波特率可选。
二、设备介绍:数字区——用于输入摄像机号、监视器号.CAM——选定一个摄像机MON——调用监视器F1——特殊功能F2——特殊功能AUX——辅助功能ACK——确认A——特殊功能B——特殊功能RUN——运行自动切换HOLD——画面保持TIME——自动切换时间PROG——编辑功能USER——用户998 AUX——加锁OFF——关附属开关0N——开附属开关SALVO——启动一个同步分组切换SHOT——调用预置点OPEN——打开镜头光圈CLOSE——关闭镜头光圈NEAR——调整聚焦(十) FAR——调整聚焦WIDE——获得全景图像T ELE——获得特写图像LAST——调一个自动切换的上一摄象机NEXT——调一个自动切换的下一摄象机CLAER——清除“ENTER”显示窗口的算字(主控)摇杆区——控制云台上、下、左、右三、控制矩阵切换/控制系统3.1键盘通电:用一个9 V电源通过通讯接口盒及6芯扁线供电,并将通讯接口盒与解码器,高速球的通讯接口正确连接,接通电源,此时通讯指示灯(CODE)闪烁(如不闪烁,接口盒通讯线接错)。
液晶显示区显示“D—Password:”,要求输入4位键盘密码(原始密码为“0000”),输入方法为:“****”+ACK。
键盘密码输入正确后,数码区“D—Password”消失,输入某个监视器号并加确认键(MON),表明键盘已处于工作状态。
控制键盘要选协议和波特率。
(按左边的F2+A键,屏幕显示控制协议,往右摇动摇杆,上下到需要的协议,往右确认,再选波特率,摇动摇杆上下到需要的波特率,往右确认)如果作为分控来用就不要密码..3.2 B70支持各种PTZ控制系统,能控制各种型号球机、解码器,支持SITO,PELCO-D,PELCO-P等多种控制协议。
矩阵按键控制数码管显示
定时消抖 Case 0xee; P0口送0 段码 Case 0xed; P0口送1 段码 Case 0x77; …… P0口送F 段码
有键按下?
是
否
存储当前P2的状态1 Break P2=0X0F 结束 存储当前P2的状态2
返回(状态1|状态2)
返回0XFF
程序编写
//========================================== //函数名称: keyscan() //函数功能: 检测按键 //入口参数:无 //出口参数:cord_h|cord_1 //备注: //========================================== UINT8 keyscan(void) { INT8 cord_h=0; INT8 cord_1=0; P2=0xf0; if(P2!=0xf0) { delay_ms(10); if(P2!=0xf0) { cord_h=P2; P2=0x0f; cord_1=P2; return(cord_h|cord_1); } } return(0xff); }
在没有按键按下时,即DS2450 的输入量时0,当有丌 同的按键按下时,DS2450 的输入量丌同,微处理器就会 得到丌同的数字量,微处理器根据采集到的数字量可判断 按键情况。
单片机控制的“机电一体化产品”中按键的接口设计 科技咨询,李迚波
键盘扫描子程序一般包括以下内容:
1.判别有无键按下;
2.消除键盘机械抖动;
出线输出为全低电平,则列线中电平由高变低所在列为按
键所在列。
两步即可确定按键所在的行和列,从而识别出所按的键。
采用线反转法的矩阵式键盘
假设键3被按下。
第一步,P1.0~P1.3输出全为“0”,然后,读入 P1.4~P1.7线的状态,结果P1.4=0,而P1.5~P1.7均为 1,因此,第1行出现电平的变化,说明第1行有键按下; 第二步,让P1.4~P1.7输出全为“0”,然后,读入 P1.0~P1.3位,结果P1.0=0,而P1.1~P1.3均为1,因 此第4列出现电平的变化,说明第4列有键按下。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
delay(1);//延时消抖
key=7;
while((!PINA&0X08));//等待按键松开
}
}
PORTB=0xbf;
delay(1);//延时消抖
// 按键8
if((PINB&0x01)==0)//判断PA0是否是0,是则是s1按下了
}
void main()
{
uchar i,ge,shi,num=0;
init();
while(1)
{ anjian();
shi=key/10;
ge=key%10;
write_com(0x85);
write_data(0x30+shi);
{
delay(1);//延时消抖
if((PINB&0x01)==0)//确实有按键按下
{
delay(1);//延时消抖
key=8;
while((!PINA&0X01));//等待按键松开
}
}
// 按键9
{
delay(1);//延时消抖
key=11;
while((!PINA&0X08));//等待按键松开
}
}
PORTB=0x7f;
delay(1);//延时消抖
// 按键12
if((PINB&0x01)==0)//判断PA0是否是0,是则是s1按下了
EN_1;
delay(3);
EN_0;
}
void write_data(uchar date)
{
RS_1;
WR_0;
PORTC=date;
delay(2);
EN_1;
delay(3);
EN_0;
}
void init()
{
write_data(0x30+ge);
delay(500);
num++;
if(num>99)
num=0;
}
}
{
uint i,j;
for(i=z;i>0;i--)
for(j=1140;j>0;j--);
}
void anjian()
{
PORTB=0xef;//高出低入,先扫描行
DDRB=0xf0;
// 按键00000000000
if((PINB&0x01)==0)//判断PA0是否是0,是则是s1按下了
while((!PINA&0X04));//等待按键松开
}
}
// 按键15
if((PINB&0x08)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x08)==0)//确实有按键按下
if((PINB&0x02)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x02)==0)//确实有按键按下
{
delay(1);//延时消抖
key=13;
while((!PINA&0X02));//等待按键松开
}
}
// 按键14
if((PINB&0x04)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x04)==0)//确实有按键按下
{
delay(1);//延时消抖
key=14;
{
delay(1);//延时消抖
key=3;
while((!PINA&0X08));//等待按键松开
}
}
PORTB=0xdf;
delay(1);//延时消抖
// 按键4
if((PINB&0x01)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x01)==0)//确实有按键按下
{
delay(1);//延时消抖
key=0;
while((!PINA&0X01));//等待按键松开
}
}
// 按键1
while((!PINA&0X04));//等待按键松开
}
}
// 按键3
if((PINB&0x08)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x08)==0)//确实有按键按下
{
delay(1);//延时消抖
if((PINB&0x01)==0)//确实有按键按下
{
delay(1);//延时消抖
key=12;
while((!PINA&0X01));//等待按键松开
}
}
// 按键13
if((PINB&0x02)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x02)==0)//确实有按键按下
{
delay(1);//延时消抖
key=9;
while((!PINA&0X02));//等待按键松开
if((PINB&0x02)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x02)==0)//确实有按键按下
{
delay(1);//延时消抖
key=5;
while((!PINA&0X02));//等待按键松开
}
}
// 按键10
if((PINB&0x04)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x04)==0)//确实有按键按下
{
delay(1);//延时消抖
key=10;
#include<iom16v.h>
#include<macros.h>
#define uint unsigned int
#define uchar unsigned char
#define RS_0 (PORTA&=~BIT(7))
#define RS_1 (PORTA|=BIT(7))
if((PINB&0x02)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x02)==0)//确实有按键按下
{
delay(1);//延时消抖
key=1;
while((!PINA&0X02));//等待按键松开
}
}
// 按键6
if((PINB&0x04)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x04)==0)//确实有按键按下
{
delay(1);//延时消抖
key=6;
while((!PINA&0X04));//等待按键松开
}
}
// 按键11
if((PINB&0x08)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x08)==0)//确实有按键按下
DDRA|=BIT(7)|BIT(6)|BIT(5);
DDRC=0xff;
PORTC=0xff;
EN_0;
write_com(0x38);
write_com(0x01);
write_com(0x06);
write_com(0x80);
write_com(0x0c);
#define WR_0 (PORTA&=~BIT(6))
#define WR_1 (PORTA|=BIT(6))
#define EN_0 (PORTA&=~BIT(5))
#define EN_1 (PORTA|=BIT(5))
uchar temp,key,num,i;
void delay(uint z)
}
}
// 按键2
if((PINB&0x04)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x04)lay(1);//延时消抖
key=2;
while((!PINA&0X04));//等待按键松开
}
}
// 按键7
if((PINB&0x08)==0)//判断PA0是否是0,是则是s1按下了
{
delay(1);//延时消抖
if((PINB&0x08)==0)//确实有按键按下
{
delay(1);//延时消抖
if((PINB&0x01)==0)//确实有按键按下