基于89C52单片机的独立按键原理图

前面提到了独立按键,可见,独立按键是由矩阵键盘分离而来的。接下来看的是 4*4 的矩阵键盘,这里使用的还是上节所使用的,延时消抖检测。
先附上矩阵键盘的原理图:
在使用据矩阵键盘时,j5 排针处的跳帽连接 1 脚和 2 脚,使所有按键的有效端口全部连接至 i/o 口。
具体的扫描方式为:
先把p3^0~p3^7高四位和第四位赋不一样的电平值,当确定有键按下时,检测按下的是哪一行或哪一列(原本高电平的四位中有一位会变低电平),再将高四位和第四位赋与上一次相反的电平。再检测,即可找到所按下的按键。
实例为:把s4~s19 这16个按键,从上到下、从左至右,分别设置为1~16不同的键值,当s4按下时,数码管显示为 1;当s19按下时,数码管显示为16。
其核心代码如下(数码管段码,显示函数等变量的定义,请参照前面给出的数码管的博文):
uchar temp; //用于存储 p3 口的状态
uchar key_value = 0; //键值的定义
void matrixkeyscan()
{
p3 = 0x0f; //设置p3高四位为0,第四位为1
temp = p3; //用一个变量存储p3口的状态,以免外界影响p3口,从而造成扫描有误
if(temp != 0x0f)
{
delay10ms();
if(temp!= 0x0f) //确定有键按下
{
switch(temp) //查看p3(temp)的状态
{
case 0x0e :key_value = 1; break; //按下的为第一行
case 0x0d :key_value = 5; break;
case 0x0b :key_value = 9; break;
case 0x07 :key_value = 13;break; //按下的为第四行
}
}
p3 = 0xf0; //再将 p3 口重新赋值,高四位为1,第四位为0
temp = p3;
if(temp != 0xf0)
{
switch(temp)
{
case 0xe0 : key_value +=3 ; break; //按下的是第四列,键值key_value加3
case 0xd0 : key_value +=2 ; break;
case 0xb0 : key_value +=1 ; break;
case 0x70 : key_value +=0 ; break; //按下的是第一列,键值key_value加0
}
}
while(p3 != 0xf0); //松手检测,因为最近的一次赋值是p3 = 0xf0
}
}
void main()
{
while(1)
{
matrixkeyscan(); //在主函数中调用矩阵键盘扫描函数
if(key_value > 9) //判断键值,并显示
{
dspbuf[1] = key_value%10;
dspbuf[0] = key_value/10;
}
else
{
dspbuf[0] = key_value;
dspbuf[1] = 10; //若键值小于10,则十位不显示,只显示个位,段码数组第10个为消影
}
display(); //数码管显示函数
}
}
注:在此我们基于的是89c52单片机的按键扫描,但是对于蓝桥杯指定开发板平台(ct107d)所用的单片机为stc15f2k61s2,它与stc89c52在矩阵键盘的区别的是:前者没有p3^6和p3^7这两个 i/o 口,他们分别用p4^2,p4^4代替,具体的可以就参照stc15f2k61s2芯片手册(其他的区别大致有:它的运行速度比51单片机快,工作时可以选择是否分频;它的中断模式比51多,一些 i/o 口有其他功能等等……)。
这里有几点需要注意:
1、在编程时,主函数尽可能少的进行一些数据处理等操作,主函数主要用来调用其他的函数。
2、若使用的是stc15f2k61s2单片机,则在给 p3 口的两次赋值和高四位的电平检测阶段,需要将p4^2,p4^4单独列出来,与其余6个p3引脚的 i/o 口一起检测,并且在使用p4^2,p4^4之前,需要进行sbit位定义,以及 p4 引脚的寻址(srf p4 = 0xc0)。
3、p3口的第二次赋值,应该也囊括在第一个 if 语句之中,因为只有当确定按下之后,才会开始行与列的扫描,行、列扫描是对于一次按键的扫描,所以不可分开。

Celestial AI获得5600万美元A轮融资
区块链数字艺术品竞拍平台PuzzleBid介绍
再谈 HPM6700/6400/6300 产品系列串口接收不定长数据的方式
AI+SaaS可以为新零售带来什么吗
苹果M1芯片Mac成功运行Windows应用
基于89C52单片机的独立按键原理图
三菱PLCGXworks2如何和电脑联线
三层安全模式的区别
在Linux Kernel 5.10中,华为提交的补丁数量为1434个
广东省工信厅调研组实地考察河套国际性产业与标准组织聚集区
便携式天燃气检测仪的工作原理
无纺布表面瑕疵检测系统的原理、性能及应用
无人机巡检管理系统上线仁新高速,开启巡检病害“智慧眼”
韩国 LG 关闭 PCB 业务,国内多家中小 PCB 厂商破产,为何?
Petalinux BSP安装与构建过程
土壤水分传感器选择依据浅谈分享
如何实现__import__()动态导入
惠州数据中心预计每年创造32亿产值 SA网络最快5月17日启动
苹果面临重重困难,依然拥有强大竞争力
小米米粉节:小米MIX、小米Note2现货开卖不用抢了!