找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4635|回复: 5
收起左侧

关于一个单片机矩阵键盘扫描的代码,为什么要赋0xfe给P1

[复制链接]
ID:253022 发表于 2017-12-8 21:50 | 显示全部楼层 |阅读模式
代码里面标红的那块,有点疑问。不知道这段代码的意思。为什么要赋0xfe给P1,不是要检测P1的电位吗?赋了0xfe给P1,还怎么检测?


#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int

uchar code DSY_CODE[]=
{
     0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0x00
};
uchar code KeyCodeTable[]=
{
      0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88
};

void Delay()
{
     uchar i;
    for(i=0;i<200;i++);
}

uchar Keys_Scan()
{
     uchar sCode,kCode,i,k;
    P1 = 0xf0;
    if((P1&0xf0)!=0xf0)
    {
         Delay();
        if((P1&0xf0)!=0xf0)
        {
             sCode = 0xfe;
            for(k=0;k<4;k++)
            {
                 P1 = sCode;
                if((P1&0xf0)!=0xf0)
                {
                     kCode = ~P1;

                    for(i=0;i<16;i++)
                    {
                         if(kCode == KeyCodeTable[ i])
                            return i;
                    }
                }
                else
                    sCode = _crol_(sCode,1);
            }
        }
    }
    return -1;
}

void main()
{
     uchar KeyNO = -1;
    uchar i,P2_LED,P3_LED;
    while(1)
    {
         KeyNO = Keys_Scan();
        if(KeyNO != -1)
        {
             P2_LED = 0xff;
            P3_LED = 0xff;
            for(i=0;i<=KeyNO;i++)
            {
                 if(i<8)
                    P3_LED>>=1;
                else
                    P2_LED>>=1;
            }
            P3 = P3_LED;
            P2 = P2_LED;
        }
    }
}
回复

使用道具 举报

ID:61840 发表于 2017-12-8 23:29 | 显示全部楼层
4*4键盘,实现扫描
回复

使用道具 举报

ID:259274 发表于 2017-12-8 23:51 | 显示全部楼层
4*4的键盘,循环里面需要不断的检测,实现扫描

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:253022 发表于 2017-12-11 20:20 | 显示全部楼层
准双向I0口
回复

使用道具 举报

ID:111634 发表于 2017-12-11 22:18 | 显示全部楼层
先学理论,打基础,就不会有这么多问题了,本坛至少有50%的问题属于此类情况。
回复

使用道具 举报

ID:223761 发表于 2017-12-12 15:06 | 显示全部楼层
51 单片机检测按键状态前,要先给I/0口写1。P1=0xfe  是把P1最地位清零(相当于按键接地)其他7位写1,用于检测按键是否按下。建议 先看论坛里关于51的C教程,这些问题自然就懂了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表