文章目录

  • 前瞻知识
  • 列矩阵按键写法
  • 行矩阵按键写法
  • 矩阵键盘写法
  • 独立按键写法1
  • 独立按键写法2

前瞻知识

1.如何生成stc的头文件

直接点保存文件到你建的目录下方就行了,就可以直接使用这个头文件了

2.按键知识


这个是按键的原理图
可以简单的理解成,按下按键的时候,按的那个按键为**“0”**
没按下的“1”就行了
所以我们写程序的时候根据这个逻辑写就行了
写矩阵的时候先行后列或者先列后行的判断是哪一个按键就行了

keyscan是什么

我们只用判断keyscan的值就可以判断是那个按键按下了,这个只是一个变量
你想叫啥就直接命名就行了,不一定要一模一样

列矩阵按键写法

sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;char anjian()
{int keyscan;P3=0x0f;P42=P44=0;                 //注意这种写法,头文件是用stc生成的if(s4==0||s5==0||s6==0||s7==0)      {delay(10);                       //消抖P34=P35=P42=P44=1;             P44=0;                        //如果是P44这行按下了if(s4==0) keyscan=4;        //如果是s4这个按键按下了else if(s5==0) keyscan=5;      //如果是s5这个按键按下了else if(s6==0) keyscan=6;      //如果是s6这个按键按下了else if(s7==0) keyscan=7;      //如果是s7这个按键按下了P42=0;if(s4==0) keyscan=8;else if(s5==0) keyscan=9;else if(s6==0) keyscan=10;else if(s7==0) keyscan=11;P35=0;if(s4==0) keyscan=12;else if(s5==0) keyscan=13;else if(s6==0) keyscan=14;else if(s7==0) keyscan=15;P34=0;if(s4==0) keyscan=16;else if(s5==0) keyscan=17;else if(s6==0) keyscan=18;else if(s7==0) keyscan=19;}P3=0x0f;P42=P44=0;                   while(s4==0||s5==0||s6==0||s7==0);   //消抖return keyscan;
}}


行矩阵按键写法

//这个和列矩阵差不多
sbit R1=P3^0;
sbit R2=P3^1;
sbit R3=P3^2;
sbit R4=P3^3;sbit C4=P3^4;
sbit C3=P3^5;
sbit C2=P4^2;
sbit C1=P4^4;char key_scan()
{int i;{R1=0;R2=R3=R4=1;C1=C2=C3=C4=1;if(C1==0)i=0;else if(C2==0)i=1;else if(C3==0)i=2;else if(C4==0)i=4;R2=0;R1=R3=R4=1;C1=C2=C3=C4=1;if(C1==0)i=5;else if(C2==0)i=6;else if(C3==0)i=7;else if(C4==0)i=8;R3=0;R2=R1=R4=1;C1=C2=C3=C4=1;if(C1==0) i=8;else if(C2==0)i=9;else if(C3==0)i=10;else if(C4==0)i=11;R4=0;R2=R3=R1=1;C1=C2=C3=C4=1;if(C1==0)i=12;else if(C2==0)i=13;else if(C3==0)i=14;else if(C4==0)i=15;
}
return i;
}


矩阵键盘写法

void key_scan()
{R1=0;R2=R3=R4=1;C1=C2=C3=C4=1;if(C1==0){while(C1==0);//自己添加的按键按下后的代码}else if(C2==0){while(C2==0);//自己添加的按键按下后的代码}else if(C3==0){while(C3==0);//自己添加的按键按下后的代码}else if(C4==0){while(C4==0);//自己添加的按键按下后的代码}R2=0;R1=R3=R4=1;C1=C2=C3=C4=1;if(C1==0){while(C1==0);//自己添加的按键按下后的代码}else if(C2==0){while(C2==0);//自己添加的按键按下后的代码}else if(C3==0){while(C3==0);//自己添加的按键按下后的代码}else if(C4==0){while(C4==0);//自己添加的按键按下后的代码}R3=0;R2=R1=R4=1;C1=C2=C3=C4=1;if(C1==0){while(C1==0);//自己添加的按键按下后的代码}else if(C2==0){while(C2==0);//自己添加的按键按下后的代码}else if(C3==0){while(C3==0);//自己添加的按键按下后的代码}else if(C4==0){while(C4==0);//自己添加的按键按下后的代码}R4=0;R2=R3=R1=1;C1=C2=C3=C4=1;if(C1==0){while(C1==0);//自己添加的按键按下后的代码}else if(C2==0){while(C2==0);//自己添加的按键按下后的代码}else if(C3==0){while(C3==0);//自己添加的按键按下后的代码}else if(C4==0){while(C4==0);//自己添加的按键按下后的代码}
}


独立按键写法1

比较推荐这个写法

sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;char anjian()
{char keyanjian;if(s4==0||s5==0||s6==0||s7==0){delay(10);if(s4==0)keyanjian=4;else if (s5==0)keyanjian=5;else if (s6==0)keyanjian=6;else if (s7==0)keyanjian=7;}while(s4==0||s5==0||s6==0||s7==0);return keyanjian;
}


独立按键写法2

sbit s6=P3^1;void anjian()
{if(s6 == 0){delay(100);if(s6==0){EA=~EA;while(s6 == 0);{//自己添加的按键按下后的代码}}
}//后面以此类推

蓝桥杯按键处理解决办法相关推荐

  1. 蓝桥杯嵌入式板-解决LCD使LED亮灭混乱的办法

    比赛板用的是stm32f103RB芯片,64管脚,LED与LCD同用了管脚PC8~PC15(对应LED1~LED8),所以板子上增用了一个锁存器--M74HC573.在控制LED的时候,只需在输出对应 ...

  2. linux虚拟机按键不好用,虚拟机(vmware)linux中ctrl按键失灵 解决办法

    问题来源: 其实今天不是第一次出现这个问题,只是今天真的是忍无可忍了--gpedit中按下w则关闭了文档.按下alt+f4则进入tty4,终端中鼠标一选择中断,很显然是ctrl键一直被莫名其妙地按着. ...

  3. 机械键盘按键失灵解决办法(亲测有效,不用换不用拆,5分钟搞定)

    机械键盘不灵的小伙伴们,有福音了,不用换不用拆,只需要一根牙签,一把美工刀(或者剪刀),一瓶酒精(或者免洗消毒液)就可以修好上百块钱的东西!5分钟搞定! 这两天不知道为啥机械键盘的ctrl键居然失灵了 ...

  4. 蓝桥杯按键识别(长按短按,按下与松开)

    先附上代码 主要根据按键是否按下的标志位实现 unsigned char BTNkey_readonce_lors(void) {static unsigned char BTNkey_press_l ...

  5. 蓝桥杯单片机 独立按键与矩阵按键

    文章目录 前言 一.蓝桥杯按键原理图 二.独立按键与矩阵按键处理思路 1.独立按键 2.矩阵按键 代码实现 总结 前言 按键设计一般分为两种:独立按键和矩阵键盘.按键数量较少的用前者,按键数量较多的用 ...

  6. 蓝桥杯嵌入式组第九届省赛练习(算是解决了长短按键,解决了高亮显示)

    第九届代码实现代码 https://gitee.com/litte_enigner/lqb_emb_9th.git 蓝桥杯开发板的基本模块已经玩的差不多了,接下来就拿第九届题练一下手. 算是解决了长短 ...

  7. 蓝桥杯STM32G431RBT6学习——按键

    蓝桥杯STM32G431RBT6学习--按键 前言 按键同样为每年的必考考点,国信长天开发板中的按键电路如下: 芯片的PA0.PB0.PB1.PB2作为按键输入引脚,并采用外部上拉连接,当对应引脚检测 ...

  8. c语言 执行free函数程序被卡住,FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

    FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法 时间:2019-08-10 14:39:47  来源:  作者:  所属栏目:其他服务端 这里将告诉您FreeRT ...

  9. FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

    出现问题场景: 作为刚接触FreeRTOS实时操作系统的菜鸟,我在练习一个程序功能:按键3按下,将LED闪烁的任务挂起:按键4按下,将LED闪烁的任务恢复到就绪.按键使用外部中断.恢复就绪的语句是 x ...

最新文章

  1. 【免费获取】80+页PPT全方位解读半导体行业
  2. 基于AppDomain的插件式开发
  3. Appirater -- app中提示用户为app评价的提示框
  4. win7电脑0x000007b蓝屏怎么办
  5. 基于AWT、Swing的GUI编程 - 多个命令共享同一个监听器类
  6. Linux 之 利用Google Authenticator实现用户双因素认证
  7. Linux Performance Observability Tools
  8. learn go return fuction
  9. 高数-极限-求极限值--两个重要极限(以及拓展公式)
  10. redis 系列——5、跳跃表
  11. win10卸载预装软件
  12. 什么是ddos攻击,怎么防御ddos攻击?
  13. 《计算机视觉中的数学方法》
  14. C语言 从键盘输入圆的半径,计算并输出圆的正内接六边形的面积,以及这个正六边形面积占圆面积之百分比
  15. UPS的红单和蓝单的区别
  16. upload-labs文件上传漏洞(Pass-01~Pass-21)
  17. Git的安装教程(完成clone一个项目到本地)
  18. 在计算机网络中wm表示什么网,网络基础知识
  19. javaweb mysql购物车_javaweb购物车实现的几种方式
  20. 03.规格及模板管理

热门文章

  1. uniapp 微信小程序 上传图片到服务器
  2. (ssl1232)雷达覆盖(normal)
  3. 识骨寻踪第十二季/全集Bones迅雷下载
  4. Visio安装 (无需卸载OFFICE)(解决安装冲突问题)
  5. Java去掉文件中的逗号
  6. 定积分以及变积分上限函数(附代码)
  7. Java JNA (二)—— dll回调函数实现
  8. Python实现冰雹猜想(折线图)
  9. 阿里 2020暑期实习生 笔试回忆
  10. 使用TextToSpeech语音读取