找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5331|回复: 1
收起左侧

求助 protues中矩阵键盘接上后没反应。

[复制链接]
ID:79015 发表于 2015-5-6 00:10 | 显示全部楼层 |阅读模式
QQ截图20150506000857.jpg
矩阵接上去不能实现功能 是不是程序出现问题了,求大神帮忙看下 本人菜鸟。。。//键盘扫描子程序流程:
void vShowOneChar(unsigned char ucChar)
{
        switch(ucChar)
                {
                case '0': vWriteData(0x30);break;
                case '1': vWriteData(0x31);break;
                case '2': vWriteData(0x32);break;
                case '3': vWriteData(0x33);break;
                case '4': vWriteData(0x34);break;
                case '5': vWriteData(0x35);break;
                case '6': vWriteData(0x36);break;
                case '7': vWriteData(0x37);break;
                case '8': vWriteData(0x38);break;
                case '9': vWriteData(0x39);break;
                case 'a': vWriteData(0x61);break;
                case 'b': vWriteData(0x62);break;
                case 'c': vWriteData(0x63);break;
                case 'd': vWriteData(0x64);break;
                case 'e': vWriteData(0x65);break;
                case 'f': vWriteData(0x66);break;
                default: break;
                }
}
unsigned char ucKeyScan()
{
        unsigned char ucTemp=0;                                               //扫描状态暂存。
        unsigned char ucRow=0,ucLine=0;                         //行号,列号。
        for(ucLine=0;ucLine<4;ucLine++)                                 //列扫描
                {
                        SCANPORT=uca_LineScan[ucLine];                     //输出扫描电位。
                        ucTemp=SCANPORT&0x0F;                                 //输入扫描电位,并屏蔽高4位。
                        if(ucTemp!=0x0F)                 
                                {                                                                         //判断该列是否有按键按下。
                                switch(ucTemp)
                                        {
                                        case 0x0E: ucRow=10;break;                     //如果有,则判断行号。
                                        case 0x0D: ucRow=20;break;
                                        case 0x0B: ucRow=30;break;
                                        case 0x07: ucRow=40;break;
                                        default:   ucRow=50;break;
                                        }
                                break;
                                }
                }
        SCANPORT=0x0F;                                                          //恢复P1口
        return ucRow+ucLine+1;                                        //返回按键编码。格式为2位数,高位为行号,低位为列号。
}
void vKeyProcess(unsigned char ucKeyCode)
{
SendCommand(0xC4+uc_ClickCount);
if(a_key==1)
{  
switch(ucKeyCode)
{
                case 41:vShowOneChar('7');temp=7;break;                                                       
                case 42:vShowOneChar('8');temp=8;break;                                                         
                case 43:vShowOneChar('9');temp=9;break;                                                         
                case 31:vShowOneChar('4');temp=4;break;                                                       
                case 32:vShowOneChar('5');temp=5;break;                                                       
                    case 33:vShowOneChar('6');temp=6;break;               
                case 21:vShowOneChar('1');temp=1;break;                                                                  
                case 22:vShowOneChar('2');temp=2;break;       
                case 23:vShowOneChar('3');temp=3;break;                                                                  
                case 12:vShowOneChar('0');temp=0;break;                                                 
SendCommand(0xc4+uc_ClickCount);
SendCommand(0x0f);
}
        switch(ucKeyCode)
                {
                case 44:/*vShowOneChar('c');*/temp=12;break;                                                         //'/'
                case 34:/*vShowOneChar('d')*/temp=13;break;                                                         //'清除'
                case 24:/*vShowOneChar('e')*/temp=14;break;                                                         //'下调'
                case 14:/*vShowOneChar('f')*/temp=15;break;                                                         //'上调'
                case 13:/*vShowOneChar('b');*/temp=11;break;                                                         //'返回'
                case 11:/*vShowOneChar('a');*/temp=10;break;                                                        //'ON/C'
                default:break;
                }
        if(temp==11)                                                   //判断按键与上一次所按的键是否相同。
                {
                delay_50ms(100);
                if(uc_ClickCount<255)                                    //同一个连续按下的次数小于255  
                 {        uc_ClickCount++;
                SendCommand(0xc3+uc_ClickCount);
                SendCommand(0x0f);}
                if(uc_ClickCount==3)
                uc_ClickCount=0;
                SendCommand(0xc4+uc_ClickCount);
                SendCommand(0x0f);
                }
if(temp<=9)
{switch(uc_ClickCount)
{
case 0:key_ctt[0]=temp;break;
case 1:key_ctt[1]=temp;break;
case 2:key_ctt[2]=temp;break;
default:break;
}
}
}
}
万分感谢!!
回复

使用道具 举报

ID:79162 发表于 2015-5-7 10:37 | 显示全部楼层
整个程序链接不起来,好像子函数都是分开的,都不知道在哪里用到。问题无法解决。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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