矩阵按键电路图

函数名:key_scan
功能:读行线列线电平,根据按键键值定位
返回值:按键代表的十六进制数字

uchar是定义了unsigned char类型

key_scan函数

    uchar key_scan(){//定义几个变量uchar key;uchar  i=0x7f;uchar  j;delay(10);//消抖if(key_press()){

重点这个do…while

    do{i=(i<<1|i>>7);//左移1位|右移7位 每一次只输出一个低电平1111 1110

1.一开始定义i等于0x7f,为了先让P0输出为低电平。
2.当按键按下M1,M5,M9,M13,高四位(P7P6P5P4)其中有一位会因为按键导通拉低电平,输出低电平。
3.j不等于0xf0,退出do…while循环,数码管输出0,1,2,3
4.若按下不是P0对应的按键,.j等于0xf0,继续do…while循环
5.i的值会依次输出1111 1101(对应M2,M6,M10,M14),1111 1011(对应M3,M7,M11,M15),1111 0111(对应M4,M8,M12,M16),循环到按键对应i值,则退出循环,数码管输出数值

  PORTD=i;//给D口1111 1110  0XFE,DDRD=0X0F;//高4位输入,低4位输出 key=PIND;//D 口给keyj=key&0xF0;//读取状态 找到是哪个KEY按下了}while(j==0xf0);while(key_press());//等待哪个按键松开

按键代表的十六进制数字

 switch(key)//有16种情况{case 0xEE://1110 1110 说明第一个按下key=0x00;//显示 一个0break;case 0xDE:key=0x01;break;case 0xBE:key=0x02;break;case 0x7E:key=0x03;break;case 0xED:key=0x04;break;case 0xDD:key=0x05;break;case 0xBD:key=0x06;break;case 0x7D:key=0x07;break;case 0xEB:key=0x08;break;case 0xDB:key=0x09;break;case 0xBB:key=0x0A;break;case 0x7B:key=0x0B;break;case 0xE7:key=0x0C;break;case 0xD7:key=0x0D;break;case 0xB7:key=0x0E;break;case 0x77:key=0x0F;break;default:key=16;}
}
else
{key=16;
}
return key;
}

AVR32单片机 矩阵按键 按键键值函数解析相关推荐

  1. 20150218【改进信号量】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

    [改进信号量]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 前面我们使用POLL查询方式来实现GPIO-IRQ按键中断程序 这里我们来使用信号量,让我们的驱动 ...

  2. 20150218【改进Poll定时查询】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

    [改进Poll定时查询]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 按键驱动程序中,如果不使用read函数中使程序休眠的,而是还是使用查询方式的话,可以使用 ...

  3. 如何获取自己键盘上按键的键值(KeyCode)

    文章目录 通过C语言获取部分按键键值 获取字母按键键值 获取方向键键值 键码值汇总 字母和数字的键值 数字键盘上按键的键值 功能键的键值 控制键键值 多媒体按键键值 通过C语言获取部分按键键值 这里提 ...

  4. HarmonyOS/OpenHarmony按键设备键值

    按键设备键值. 作者:坚果整理,欢迎大家加入坚果组织一起学习HarmonyOS/OpenHarmony应用开发 导入模块 import {KeyCode} from '@ohos.multimodal ...

  5. boost::spirit模块实现将由某个分隔符分隔的任意键/值对解析为 std::map的测试程序

    boost::spirit模块实现将由某个分隔符分隔的任意键/值对解析为 std::map的测试程序 实现功能 C++实现代码 实现功能 boost::spirit模块实现将由某个分隔符分隔的任意键/ ...

  6. boost::spirit模块实现将由某个分隔符分隔的任意键/值对解析为 std::vector的测试程序

    boost::spirit模块实现将由某个分隔符分隔的任意键/值对解析为 std::vector的测试程序 实现功能 C++实现代码 实现功能 boost::spirit模块实现将由某个分隔符分隔的任 ...

  7. python中字典按键或键值排序

    字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排 ...

  8. python中字典按键或键值排序_[宜配屋]听图阁

    字典排序 在程序中使用字典进行数据信息统计时,由于字典是无序的所以打印字典时内容也是无序的.因此,为了使统计得到的结果更方便查看需要进行排序.Python中字典的排序分为按"键"排 ...

  9. 键盘按键VK键值列表及宏定义

    VK键值列表及宏定义 /* * Virtual Keys, Standard Set  */ #define VK_LBUTTON        0x01 #define VK_RBUTTON     ...

最新文章

  1. java-方法。(新手)
  2. CCpp.CallGraph
  3. linux查找文件find
  4. 关于MyEclipse项目的名字的修改对项目导入导出的影响
  5. 面象对象设计6大原则之五:依赖倒置原则
  6. 简单调试 Python 程序
  7. win10如何远程连接BCC云服务器?
  8. 使用DocFx生成文档网站并将其发布到GitHub Pages
  9. UNIX网络编程——常用服务器模型总结
  10. MongoDB简单CRUD场景
  11. 参观移动公司机房感想
  12. PS2021最新下载Photoshop2021最新中文下载安装PS下载安装
  13. 2021微信大数据挑战赛总结(微信视频号推荐)
  14. win10浏览器账户退出
  15. 网站pc端和手机端视频的处理
  16. IoT DDoS警报系统是如何帮助我们预测网络攻击的?
  17. windows系统服务器巡检仪哪个工具,机械振动巡检仪功能概述
  18. 如何访问局域网内宿主机上的虚机服务
  19. 机器学习:李航-统计学习方法-代码实现
  20. Linux中防火墙firewalld

热门文章

  1. 自动化运维之k8s——Helm、普罗米修斯、EFK日志管理、k8s高可用集群(未完待续)
  2. Java-满天繁星案例(1)
  3. 实时训练Real-Time Training 教程
  4. SpringBoot微信小程序授权登录
  5. 微信小程序注册完整教程
  6. 深圳市威视爱普手术示教系统
  7. Splinter学习--模拟攥写博客园随笔
  8. Python 画图工具生成数据点图
  9. list中抽出某一个字段的值_java8从list集合中取出某一属性的值的集合案例
  10. RPG Maker mv框架代码解析之窗口图片显示