文章目录

  • 前瞻知识
  • 列矩阵按键写法
  • 行矩阵按键写法
  • 矩阵键盘写法
  • 独立按键写法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. 如何查看进程的运行路径
  2. 关于go语言中的JWT(JSON WEB TONKE)ECHO
  3. 程序员养生:熬夜指南
  4. 中文域名销售平台_中国开关网.商城被搭建为南京某公司官网,这样的域名你喜欢吗?...
  5. 今日头条Java后台Java研发三面题目
  6. oracle中定义表类型数据,oracle 定义表字段域的数据类型
  7. 使用def文件从dll导出和_declspec(dllexport)导出区别以及调用示例
  8. Arcgis执行Raster Project时报Error001143 : Background server threw an exception
  9. 计算机基础(八):linux编程规范总结
  10. 【NLPCC 2021】 First Call For Papers
  11. c语言 银行叫号系统,【分享】C语言 银行取票排队系统
  12. Java项目框架搭建系列(Java学习路线)-博客提纲
  13. appium之定位方式
  14. ue编辑器编辑 html文件夹,ue编辑器使用教学,轻松编辑文本和项目
  15. AH快递单打印软件3.82免费版
  16. 关于SSL认证的小坑 SSLPeerUnverifiedException
  17. mysql 校验 身份证_MySql整理篇之身份证校验
  18. HyperLynx(三十二)高速串行总线仿真(四)
  19. fdisk和parted对磁盘的分区总结
  20. JNLP 文件无法打开的解决办法

热门文章

  1. 2021最新壁纸小程序源码 壁纸小程序已去授权
  2. 【设计模式】模板方法模式(C#)
  3. [LeetCode]情侣牵手
  4. Android 进阶第一篇——善用工具
  5. [ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2018-16509
  6. 【windows配置】windows11家庭版添加本地安全策略(亲测有效)
  7. 通过$route.mete.show实现组件动态展示
  8. android9壁纸存放路径,Android基础入门教程——10.9 WallpaperManager(壁纸管理器)
  9. TIF怎么转成PDF?这几款软件不容错过
  10. 【通信接口】CAN总线协议