矩阵扫描键盘问题

2019-03-24 17:26发布

刚入手一个单片机开发板,遇到不懂得地方,求大神帮忙解答。问题在下面程序的旁边#include<reg52.h>
#include"bstv51.h"

uchar code table[17]={0x3f , 0x06 , 0x5b ,0x4f , 0x66 , 0x6d ,0x7d ,
                   0x07 , 0x7f , 0x6f ,0x77 , 0x7c , 0x39 ,
                   0x5e , 0x79 , 0x71 , 0x00};       

void delay(uint xms)        //Ñó3ùxms
{
    uint i,j;
        for(i=xms;i>0;i--)
          for(j=112;j>0;j--);
}

void display(uchar num)         
{
    P0=table[num];               
        DU=1;
        DU=0;
}

void keyscan4x4()
{
    uchar temp,key;
       P3=0xfe;
        temp=P3;
        temp=temp&0xf0;
        if(temp!=0xf0)----------------------------------------------------这句是什么意思啊,看不懂,是在判断什么呢?
        {
            delay(10);
                temp=P3;
                temp=temp&0xf0;
                if(temp!=0xf0)--------------------------------------上面都判断了,为什么这里还要判断。
                {
                    temp=P3;
                        switch(temp)
                        {
                          case 0xee:          
                               key=0;
                                   break;
                          case 0xde:                  
                                   key=1;
                                   break;
                          case 0xbe:                 
                                   key=2;
                                   break;
                          case 0x7e:               
                                   key=3;
                                   break;
                        }
                        while(temp!=0xf0)-------------------------------还有这句什么意思,
                        {
                            temp=P3;
                                temp=temp&0xf0;
                        }
                        display(key);
                }
        }

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
Li_Lei
1楼-- · 2019-03-24 20:56
那段是为了消抖,隔10毫秒如果不同就退出了

P3口的高四位应该是行或列的输入
qqqi
2楼-- · 2019-03-25 01:34
第一个   if(temp!=0xf0)是检查按键是否按下,第二个   if(temp!=0xf0)是延时消除抖动后的判断,  while(temp!=0xf0)-这个可能是判断清除temp吧,
圈在指尖
3楼-- · 2019-03-25 02:58
 精彩回答 2  元偷偷看……
zl2168
4楼-- · 2019-03-25 06:14
本帖最后由 zl2168 于 2016-11-14 22:30 编辑

实例62  4×4矩阵式键盘


电路设计    程序设计    Keil调试    Proteus仿真   

Proteus仿真一下,确认有效。 实例62 4×4矩阵式键盘.rar (44.79 KB, 下载次数: 16) 2016-11-14 22:29 上传 点击文件名下载附件 4-4.jpg

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行书中电路和程序设计有详细说明,程序语句条条有注解。
zl2168
5楼-- · 2019-03-25 08:29
实例63  8279扩展8×8键盘和8位显示


电路设计    程序设计    Keil调试    Proteus仿真   

Proteus仿真一下,确认有效。 实例63 8279扩展键盘和显示.rar (63.08 KB, 下载次数: 12) 2016-11-14 22:31 上传 点击文件名下载附件 8279.jpg

以上摘自张志良编著《80C51单片机仿真设计实例教程——基于Keil CProteus》清华大学出版社ISBN 978-7-302-41682-1内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行

书中电路和程序设计有详细说明,程序语句条条有注解。

zl2168
6楼-- · 2019-03-25 08:37
 精彩回答 2  元偷偷看……

一周热门 更多>