鱼C论坛

 找回密码
 立即注册
查看: 2031|回复: 0

一个关于矩阵案件中switch的问题

[复制链接]
发表于 2018-12-29 20:31:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
'''
#include<reg52.h>

sbit LSA = P2^2;
sbit LSB = P2^3;
sbit LSC = P2^4;

#define GPIO_KEY P1
#define GPIO_DIG P0

int keyvalue;
int code smgduan[] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d,
                                                0x7d, 0x07, 0x7f, 0x6f};

void delay(int a)
{
        while(a--)
        {
         ;
        }
}
void keydown()
{        int n = 0;

        GPIO_KEY = 0x0f;
        if(GPIO_KEY != 0x0f)
        {
                 delay(1000);
                if(GPIO_KEY != 0x0f)
                {
                         GPIO_KEY = 0x0f;
                        switch(GPIO_KEY)
                        {
                                case 0x07:   //s1列
                                {
                                         keyvalue = 0;
                                        break;
                                }
                                case 0x0b:         //s2列
                                {
                                         keyvalue = 1;
                                        break;
                                }
                                 case 0x0d:  //s3列
                                {
                                         keyvalue = 2;
                                        break;
                                }
                                case 0x0e:         //s4列
                                {
                                         keyvalue = 3;
                                        break;
                                }
                        }
                       
                        GPIO_KEY = 0xf0;
                        switch(GPIO_KEY)
                        {
                                 case 0x70:
                                {
                                         keyvalue = keyvalue;
                                        break;
                                }
                                case 0xb0:
                                {
                                         keyvalue = keyvalue + 4;
                                        break;
                                }
                                case 0xd0:
                                {
                                         keyvalue = keyvalue + 8;
                                        break;
                                }
                                case 0xe0:
                                {
                                         keyvalue = keyvalue + 12;
                                        break;
                                }
                                while((n < 50) && (GPIO_KEY != 0XF0))
                                {
                                         delay(1000);
                                        n++;
                                }
                        }       
                }
        }       
}

void main()
{
        LSA = 0;
        LSB = 0;
        LSC = 0;
        while(1)
        {
                keydown();
                GPIO_DIG = smgduan[keyvalue];
        }
}
'''

这段代码中,先判断了GPIO_KEY的值,然后进行消抖,后来又判断了一次。
确认按键按下后,对GPIO_KEY进行了重新赋值?
赋值后switch获取的值不应该是对GPIO_KEY重新赋值后的值而不是按键传回的值?
怎么还能正确进行判断呢?
上面的代码可以正常运行,跪求大神解答!
感激不尽!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 18:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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