可有人有兴趣帮忙写个程序??显示和按键复用的,我写二天没写出来!

2020-01-26 13:00发布

就二数码管+5个按键,按键复用段位

下面是protues
点击此处下载 ourdev_581898BCZ6IK.rar(文件大小:16K) (原文件名:单.rar)


/***********************************************************************
* 函数名称: GetKeyCode()
* 函数功能: 获得按键物理编码
        1列8行
**********************************************************************
unsigned char GetKeyCode(void)
{
        static unsigned char key_state, key_value, key_line;
    unsigned char key_return = 0;
        unsigned char i;
        unsigned char Key_temp=0;
        switch (key_state)
        {
                case 0:                                                                                //初始状态
                        key_line = 0x01;
                        for (i=0; i<8; i++)                                                // 扫描键盘
                        {       
                                P1=key_line;                                                // 输出行线电平                               
                    key_value = Key;                                        // 读列电平,
                                if (key_value == 0)                                        // 低电平.无键按下
                                {
                                        key_line <<= 1;                                        // 没有按键,继续扫描下一位
                                }       
                                else                                                                // 有按键,停止扫描,转消抖确认状态
                                {
                                        key_state=1;                                                                               
                                        break;                                                        //退出for循环
                                }
                        }
                        break;

                case 1:
                         P1=key_line;                                                        //将上次的值再次赋给P1口,再次检测Key
                         Key_temp=Key;                                                        //再次读列电平
                          if (key_value == Key_temp )                        //与状态0的相同,确认按键
                         {
                                switch (key_line)                                        // 键盘编码,返回编码值
                                {                                                       
                                        case 0x02:        key_return = KEY_1;        break;
                                        case 0x01:        key_return = KEY_2;        break;
                                        case 0X80:        key_return = KEY_3;        break;
                                        case 0X20:        key_return = KEY_4;        break;
                                        case 0X40:        key_return = KEY_5;        break;
                                        default         :        key_return = NO_KEY;break;
                                }
                                key_state++;                                // 转入等待按键释放状态
                        }
                        else        key_state=0;                        // 两次列电平不同返回状态0,(消抖处理)                                               
                        break;       
                                       
                case 2:                                                                // 等待按键释放状态       
                        if ( Key== 0)        key_state=0;
                        break;
        }
        return key_return;
}

按键检测部分,始终不行!~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。