Como un largo tiempo incrustado ingeniero de software, tengo que decir que su suposición de que la eliminación de rebotes va a tomar algo de la potencia de procesamiento de mi solicitud es simplemente incorrecto. Esto nunca va a ser cierto para cualquier competencia-escrito de firmware.
Naturalmente, eliminación de rebotes requerirá de algún tipo de procesamiento. Sin embargo, el procesamiento es trivial, y para la entrada del usuario se pasa a una baja tasa de actualización como para ser totalmente insignificante. Si usted necesita de rebote entradas con la actualización de las tasas de decenas de kHz, tal vez el tratamiento para la eliminación de rebotes sería considerable, pero un ser humano pulsando los botones no necesita nada de ese tipo de resolución. En su caso, de los 100 hz de muestreo sería fácilmente lo suficientemente rápido, y casi se podría luego dejarlo caer tan bajo como 10 hz de muestreo sin afectando gravemente su interacción con el usuario.
Si usted está tratando de hacer de procesamiento de la entrada principal de control de bucle se ejecuta a decenas de kHz, por supuesto que te chupo la potencia de procesamiento. La solución correcta es escribir el firmware que no hacerlo de esa manera a pesar de que, de no utilizar una solución de hardware para solucionar un software anti-patrón. El uso apropiado de los temporizadores y las prioridades de interrupción le dará lo que necesita.
Usted puede optimizar el procesamiento asegurándose de que la lectura de la espalda está todo en un puerto I/O. Suponiendo que usted está estableciendo los niveles en las columnas y leer las filas, luego de bits Y bits de desplazamiento y poco-O a construir un valor de 16 bits para el de 16 pines. XOR este con el anterior valor de 16 bits, y si esto no es cero, entonces, algo cambió. Un simple rebote algoritmo es sólo para poner un contador a un valor si las patillas de cambio de estado, elija un estado si los pines mantiene su estado y el contador es cero, y disminuir si no es cero.
Usted no necesita ver sólo un botón es presionado, por supuesto. Si tienes un procesador ARM, el BRAZO tiene una instrucción de informe de cuántos bits se establecen, lo que es ideal para esto. Sólo mencionar para una mayor optimización.