矩阵键盘扫描程序

矩阵键盘扫描程序,第1张

你要放到“死循袭备环”中不断扫描。他的原理图一般是这样的

以第一个按键为例,当你按下时I/O口读到的数据就不是0x0f了。好吧你最开始的赋值错了。你要用0xee,0xde检测的话你应该给0xfe。拍梁毁每四个按键是一组。我这有一个我做密码锁的程序你参考一下。

void key()

{

    P3=0xfe

    if(P3!=0xfe)

    {

        time(50)

        if(P3!=0xfe)

            {

            switch(P3)

                {

case 0xee:num=1,cs++

break

case 0xde:num=2,cs++

break

case 0xbe:num=3,cs++

break

case 0x7e:num=4,cs++

break

                }

 渣悉       }

        while(P3!=0xfe)

}

P3=0xfd

if(P3!=0xfd)

{

time(50)

if(P3!=0xfd)

{

switch(P3)

{

case 0xed:num=5,cs++

break

case 0xdd:num=6,cs++

break

case 0xbd:num=7,cs++

break

case 0x7d:num=8,cs++

break

}

}

while(P3!=0xfd)

}

P3=0xfb

if(P3!=0xfb)

{

time(50)

if(P3!=0xfb)

{

         switch(P3)

{

case 0xeb:num=9,cs++

break

case 0xdb:num=0,cs++

break

case 0xbb:cs++

break

case 0x7b:num=10,cs=0,a=b=c=d=e=f=10,ply=1

break

}

  }

while(P3!=0xfb)

}

}

unsigned

char

KeyScan(void)

//键盘扫描函数,使用行列逐级扫描法{

unsigned

char

Val

KeyPort=0xf0//这句其实就是整体看看是否有键按下,四行全送0,有键按下,高四位肯定含简则不为全1

if(KeyPort!=0xf0)//表示有按键按下

{

DelayMs(10)

//去抖

if(KeyPort!=0xf0)

{

//表谈棚示有按键按下

KeyPort=0xfe

//检测第一行

if(KeyPort!=0xfe)

{

Val=KeyPort&0xf0

Val+=0x0e

//相当于检测到第一行有键按下,键值=列(高四位)咐姿+行(低四位)

while(KeyPort!=0xfe)

DelayMs(10)

//去抖

while(KeyPort!=0xfe)

return

Val

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12310059.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存