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

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;
}

按键检测部分,始终不行!~
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
10条回答
zhuyi25762
1楼-- · 2020-01-27 19:34
 精彩回答 2  元偷偷看……
jakehusonic
2楼-- · 2020-01-27 22:04
用天微的芯片,专为LED驱动及按键扫描用
zhuyi25762
3楼-- · 2020-01-28 03:46
天微芯片,确实很好用,用了三年了,各个型号都用过,程序库也非常好用的,,,换工作后,在杭州买不到,杭州没有代理。和公司提过几次去买都没去买,也不好意思再说了
earl
4楼-- · 2020-01-28 08:26
在吗,你能不能把你的数码管和按键复用的程序发给我看看,我都搞了三天了,头都大了,也没搞好,我邮箱:[email]hwt.yg@163.com谢谢了,顺颂商安!

一周热门 更多>