b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

51 矩阵键盘 89C521515FF22KK616161SS2S2芯片手册

电脑杂谈  发布时间:2021-02-15 12:02:38  来源:网络整理

前面提到了独立键。可以看出,独立键与矩阵键盘是分开的。接下来,我将看4 * 4矩阵键盘。这里使用的是上一节中使用的一种,它是延迟的反跳检测。

首先附上矩阵键盘的:

这里写图片描述

使用数据矩阵键盘时,J5接头连接器上的跳线连接引脚1和2,以便将所有键的有效端口连接到I / O端口。

青岛南京路79号快易达图文_牵手公寓网是真是假_51 矩阵键盘

具体的扫描方法是:

首先,将不同的级别分配给P3 ^ 0〜P3 ^ 7的高四位和第四位。当确定按下了一个键时,检查按下了哪一行或哪一列(原始的高电平的四位之一将变为低电平),然后将高四位和第四位分配给相反的水平从以前的时间开始。再次检查以找到您按下的按钮。

示例是:将16个键S4〜S19从上到下,从左到右分别设置为1到16的不同键值。按下S4时,数码管显示1;否则,显示1。当S19按下时,数码管显示16。

牵手公寓网是真是假_51 矩阵键盘_青岛南京路79号快易达图文

核心代码如下(有关数字显像管的段代码,显示功能和其他变量的定义,请参阅上面给出的有关数字显像管的博客文章):

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之间的区别是:前者没有这两个I / O端口P3 ^ 6和P3 ^ 7,它们分别被P4 ^ 2和P4 ^ 4取代。有关详细信息,请参阅STC15F2K61S2芯片手册(其他区别大致是:它比51单片机运行更快,并且可以选择是否分频;它的中断方式比51多,有些/ O端口还有其他功能,等等。)

青岛南京路79号快易达图文_51 矩阵键盘_牵手公寓网是真是假

这里有几件事要注意:

1、编程时,main函数执行的数据处理和其他操作尽可能少,并且main函数主要用于调用其他函数。

2、如果使用的是STC15F2K61S2单片机,则需要在对P3端口的两个分配以及高四位的电平检测阶段中分别列出P4 ^ 2和P4 ^ 4,其他6 P3引脚的I / O端口一起测试,在使用P4 ^ 2和P4 ^ 4之前,有必要定义sbit位并寻址P4引脚(srf P4 = 0xC 0)。

3、 P3端口的第二个分配也应包括在第一个if语句中,因为仅在确认按下后才开始行和列扫描。行和列扫描是针对一个的。密钥被扫描,因此无法分开。

待续...


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-357429-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...