Microcontroller PIC MikroC-制作2x2键盘扫描仪

Microcontroller PIC MikroC-制作2x2键盘扫描仪,microcontroller,pic,mikroc,Microcontroller,Pic,Mikroc,我正在创建一个2x2键盘扫描仪,其中RC0和RC1是输入线,RC2和RC3是输出线。我将TRISC设置如下 TRISC = 0b00000011; 然后我创建了键盘扫描方法 char keyPadScanner(){ PORTC.RC2 = HIGH; PORTC.RC3 = LOW; if (PORTC.RC0 != 0) return '1'; if (PORTC.RC1 != 0) return '2'; PORTC.RC2 = L

我正在创建一个2x2键盘扫描仪,其中RC0和RC1是输入线,RC2和RC3是输出线。我将TRISC设置如下

TRISC = 0b00000011;    
然后我创建了键盘扫描方法

char keyPadScanner(){
    PORTC.RC2 = HIGH; PORTC.RC3 = LOW;
        if (PORTC.RC0 != 0) return '1';
        if (PORTC.RC1 != 0) return '2';
    PORTC.RC2 = LOW; PORTC.RC3 = HIGH;
        if (PORTC.RC0 != 0) return '4';
        if (PORTC.RC1 != 0) return '5';}
在while(1)循环中,我将它显示在GLCD显示器上

test = keyPadScanner();
Delay_Ms(50);
Sm_Glcd_char2(30, 90, test);    
我只想知道我错在哪里,我花了太长时间试图弄明白这一点,如果你能把我推向正确的方向,而不是给我一个答案,那就太好了:)

编辑:高定义为1,低定义为0,测试只是一个“字符”

这是我正在跟踪的伪代码

设置RC2高,RC3低
读RC0。如果高,则按下1
阅读RC1。如果高,则按下2
将RC2设置为低,RC3设置为高
读RC0。如果高,则按下4

阅读RC1。如果您的设计与您的设计类似,按下high,5,我看到下拉电阻器被忽略,因此在未按下按钮时,PORTC.RC1和PORTC.RC0处于未知状态

谢谢你的回答,但你能详细说明一下吗?我现在已经编辑了char keyPadScanner()的代码{char var;char out;if((PORTC&0x3)=0)out='0';//如果没有按任何键,则非常快速地退出PORTC.RC2=HIGH;PORTC.RC3=LOW;var=PORTC&TRISC;if((var)==0x1)out='1';if((var)==0x2)out='2';PORTC.RC2=LOW;PORTC.RC3=HIGH;var=PORTC&TRISC;if((var)==0x1)out='4';if((var)==0x2)out='5';return out;(我不知道如何在注释中格式化抱歉:(我的答案与您的软件无关。您需要确保打开的输入不浮动。为此,您需要上拉或下拉电阻器。在您的原始软件中,您似乎需要下拉电阻器。[如果您觉得这有帮助,请您投票支持我的答案。我一直缺乏可信度,因此很难在stackoverflow回答问题。]