您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 软件工程 > 矩阵键盘的键值计算及编程
线反转法4×4矩阵键盘的键值计算及编程51单片机C语言编程及Proteus仿真景德镇学院机电系.j本讲主要内容键值计算基本原理1读取I/O口值的练习2键盘的键值计算3键盘扫描编程__线反转法4一个数码管显示矩阵键盘值的实验5景德镇学院机电系.j1键值计算基本原理__“好人被带坏”默认状态:单片机通电复位后P1P2P3口每个脚都输出高电平,P0口要接上拉电阻才能输出高电平。a各脚状态标记都是红色方块。b用电压测量都是5V。景德镇学院机电系.j1键值计算基本原理__“好人被带坏”要使一个引脚变为低电平有如下方法:a接地。b用逻辑状态信号人为改变。c编写程序使其输出低电平。景德镇学院机电系.j1键值计算基本原理__“好人被带坏”一个低电平引脚与高电平引脚相接,结果如何?实验结果:“好人被带坏”,即高电平引脚电压被变低。景德镇学院机电系.j2读取I/O口值的练习一般都是自高到低读出一个端口各脚电平,得到8位二进制数,再将8位二进制转换成2位十六进数。P1口值=P1.7P1.6P1.5P1.4P1.3P1.2P1.1P1.0=11011111=0xdfP3口值=P3.7P3.6P3.5P3.4P3.3P3.2P3.1P3.0=11111010=0xfaP1口高四位是指:P1.7P1.6P1.5P1.4P1口低四位是指:P1.3P1.2P1.1P1.0景德镇学院机电系.j2读取I/O口值的练习用程序控制单片机P2口工作,让高四位全高电平,低四位全低电平。即:P2=0xf0;具体实现见操作,结果如图。景德镇学院机电系.j2读取I/O口值的练习当P2=0xf0;外接一个两脚开关到P2口只能让P2产生如下四个新的值:0xe0,0xd0,0xb0,0x700xe00x70景德镇学院机电系.j2读取I/O口值的练习当程序使P2=0x0f;外接一个两脚开关到P2口只能让P2产生如下四个新的值:0x0e,0x0d,0x0b,0x070x0d0x0b景德镇学院机电系.j2读取I/O口值的练习总结开关接通后,如果两引脚上电平不同时,会将高电平引脚电压变低。景德镇学院机电系.j3键盘的键值P2口接有4×4键盘,低四位做行线,高四位做列线。景德镇学院机电系.j3键盘的键值找行线值时,程序使P2=0x0f;P2.0行线上开关按下会使P2口值变为0x0e,其余同理。景德镇学院机电系.j3键盘的键值找列线值时,程序使P2=0xf0;P2.7列线上开关按下会使P2口值变为0x70,其余同理。景德镇学院机电系.j3键盘的键值键盘的键值位置键值(1行,1列)e0+0e=ee(1行,2列)d0+0e=de(1行,3列)b0+0e=be(1行,4列)70+0e=7e(2行,1列)e0+0d=ed(2行,2列)d0+0d=dd(2行,3列)b0+0d=bd(2行,4列)70+0d=7d(3行,1列)e0+0b=eb(3行,2列)d0+0b=db(3行,3列)b0+0b=bb(3行,4列)70+0b=7b(4行,1列)e0+07=e7(4行,2列)d0+07=d7(4行,3列)b0+07=b7(4行,4列)70+07=77注:行列线的排列不同,键值分布也不同景德镇学院机电系.j3键盘的键值键盘的键值位置键值(1行,1列)e7(1行,2列)eb(1行,3列)ed(1行,4列)ee(2行,1列)d7(2行,2列)db(2行,3列)dd(2行,4列)de(3行,1列)b7(3行,2列)bb(3行,3列)bd(3行,4列)be(4行,1列)77(4行,2列)7b(4行,3列)7d(4行,4列)7e找出行线值置行线所处端口位置高电平找出列线值置列线所处端口位置高电平行线值+列线值=键值计算键值一般方法景德镇学院机电系.j3键盘的键值总结4×4矩阵键盘的键值共有16个,计算键值时总是:先找出行线值,再找出列线值,最后绘出矩阵键盘的键值。景德镇学院机电系.j4键盘扫描编程__线反转法/************键盘扫子描函数*******************/charkeyscan(void)//键盘扫描函数,键盘使用P2口{charvalue_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_hP2=0x0f;//将列线所处位置置高电平value_l=P2&0x0f;//读出P2口值给变量value_lreturn(value_l+value_h);//找到的键值返回给调用函数}}}景德镇学院机电系.j4键盘扫描编程__线反转法流程分析/************键盘扫子描函数*******************/charkeyscan(void)//键盘扫描函数,键盘使用P2口{charvalue_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_hP2=0x0f;//将列线所处位置置高电平value_l=P2&0x0f;//读出P2口值给变量value_lreturn(value_l+value_h);//找到的键值返回给调用函数}}}开始定义Value_h行值变量Value_l列值变量特意置:行线高电平,列线低电平,去找行值行线高电平有变化吗?延时,防抖行线高电平有变化吗?读出行线值给Value_h变量特意置:列线高电平,行线低电平,去找列值读出列线值给Value_l变量算出Value_h+Value_l键值返回给调用者结束YESNOYESNO景德镇学院机电系.j5一个数码管显示矩阵键盘值的实验实验电路如图,显示数码管接在P1口,键盘接在P2口,第一行第一列的开关按下数码管显示“0”,“1~F”的显示分布见图。注:键盘上标注的“0~F”叫做执行值,前面分析的16个值(ee~77)叫键盘的键值。线反转法
本文标题:矩阵键盘的键值计算及编程
链接地址:https://www.777doc.com/doc-7037447 .html