<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>8-bit MicrocontrollersのトピックRe: MC68HC908GP32 (4x4 matrix keypad program)</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151385#M8225</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Peter,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;What you have&amp;nbsp;suggested is exactly the intent of&amp;nbsp;my posted code, except that the active logic state is low, rather than high.&amp;nbsp; This is more in keeping with use of the internal pullups within the device.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 05 Oct 2007 19:25:41 GMT</pubDate>
    <dc:creator>bigmac</dc:creator>
    <dc:date>2007-10-05T19:25:41Z</dc:date>
    <item>
      <title>MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151374#M8214</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Hi.&amp;nbsp;&amp;nbsp; i need to do a little proyect using a 4x4 matrix keypad.&amp;nbsp;&amp;nbsp; i was thinking use the KBI module, but i found the way to do it without using KBI.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;here is the entire code.&amp;nbsp; i wish you check it and tell me what is wrong, &lt;/SPAN&gt;&lt;STRONG&gt;and how i can return an integer value from this program???&lt;/STRONG&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;#include &amp;lt;hidef.h&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include &amp;lt;MC68HC908GP32.h&amp;gt;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "serial.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "TIMERAPI.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;#include "lcddrv.h"&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void Inicio_uC(void);&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;char Muestreo_Columnas[4]={0x07,0x0B,0x0D,0x0E};&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;char i, Fila_Encontrada, Columna_Encontrada,Tecla_Presionada, Salir;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void Inicio_uC(void){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CONFIG1_COPD=1;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EnableInterrupts;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PTA = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; DDRA = 0x0F;//[PTA7..PTA4]como entradas.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;void main(void) {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Inicio_uC();&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;for(;&lt;/SPAN&gt;&lt;A href="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif"&gt;&lt;IMG alt=":smileywink:" class="emoticon emoticon-smileywink" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-wink.gif" title="Smiley Wink" /&gt;&lt;/A&gt;&lt;SPAN&gt; {&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;PTA=0;&amp;nbsp; //Parte baja de PTA a cero.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Salir=0;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;while((PTA&amp;gt;&amp;gt;4)!=0x0F &amp;amp;&amp;amp; Salir==0){&amp;nbsp; //mientras haya un cero lógico en la parte alta de PTA.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i=1;i&amp;lt;=4;i++){&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Muestreo de las columnas&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; PTA=Muestreo_Columnas[i];&amp;nbsp; //vector de posiciones&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Delayus(500);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //espera 500 us&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if((PTA&amp;gt;&amp;gt;4)!=0x0F){&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Fila_Encontrada=(PTA&amp;gt;&amp;gt;4);&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Columna_Encontrada=Muestreo_Columnas[i];&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Salir=1;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;Tecla_Presionada=Fila_Encontrada &amp;amp;&amp;amp; Muestreo_Columnas;&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Tecla_Presionada is the final variable, in were the key position data will be store.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;&amp;nbsp;Please, help me....&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 30 Sep 2007 02:52:38 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151374#M8214</guid>
      <dc:creator>mauricio2346</dc:creator>
      <dc:date>2007-09-30T02:52:38Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151375#M8215</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi Mauricio,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Take a look at the thermostat example in this book:&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;A href="http://www.freescale.com/files/microcontrollers/doc/ref_manual/M68HC05AG.pdf?fpsp=1" rel="nofollow" target="_blank"&gt;http://www.freescale.com/files/microcontrollers/doc/ref_manual/M68HC05AG.pdf?fpsp=1&lt;/A&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;It is for HC05 and is in assembler, but is good for getting the basic concept of how to do this.&lt;/DIV&gt;&lt;DIV&gt;It has a debounced 4x4 matrix keypad that uses a lookup table to convert keypresses into the character on the key.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;This manual is also a very good "how to get started with microcontrollers" book for anyone starting out.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;A more up to date version of this sort of thing&amp;nbsp;is sadly lacking from Freescales current documentation.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 30 Sep 2007 04:52:09 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151375#M8215</guid>
      <dc:creator>peg</dc:creator>
      <dc:date>2007-09-30T04:52:09Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151376#M8216</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;It seems there are&amp;nbsp;a couple&amp;nbsp;fundamental errors in your code -&lt;/FONT&gt;&lt;/DIV&gt;&lt;OL&gt;&lt;LI&gt;&lt;FONT size="2"&gt;You have defined a 4-element array for the table Muestreo_Columnas.&amp;nbsp; In C, the first element of an array has an index of 0, and the fourth element an index of 3.&amp;nbsp; As the code stands, the first element would never be used and you attempt to read a non-existent fifth element.&amp;nbsp; You might alter the limits of the for-loop to correct this.&lt;/FONT&gt;&lt;/LI&gt;&lt;LI&gt;&lt;FONT size="2"&gt;I have a problem with the final line of code&lt;BR /&gt;&lt;FONT face="Courier New"&gt;Tecla_Presionada = Fila_Encontrada &amp;amp;&amp;amp; Muestreo_Columnas;&lt;BR /&gt;&lt;/FONT&gt;The logical and does not make sense.&amp;nbsp; However, even if a bitwise and is used instead, this will still not produce a unique result for each of the 16&amp;nbsp;keys.&amp;nbsp; I think the row value and the column value should be in different nybbles, and then combined with a bit-wise OR.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&lt;FONT size="2"&gt;There are also some other issues like allowing a key de-bounce period once a keypress is detected, and immediately exiting the for-loop once a keypress is decoded.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;The 500 microsecond delay is insufficient for key de-bounce purposes - a period of 50 milliseconds would be more typical, and this should timeout&amp;nbsp;before entering the for-loop where each column is scanned.&amp;nbsp; The existing delay will allow for settling time during scanning, and could probably be considerably less than 500us.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;I have attempted to correct some of these issues in the following code -&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;void main(void) {&lt;BR /&gt;&amp;nbsp; Inicio_uC();&lt;BR /&gt;&amp;nbsp; for( ; ; )&amp;nbsp;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTA = 0;&amp;nbsp; // Parte baja de PTA a cero.&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Salir = 0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (((PTA &amp;gt;&amp;gt; 4) != 0x0F) &amp;amp;&amp;amp; (Salir == 0)) {&lt;BR /&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#ff0000"&gt;/* Keypress detected -&amp;nbsp;key debounce&amp;nbsp;delay here */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = &lt;FONT color="#ff0000"&gt;0&lt;/FONT&gt;; i &lt;FONT color="#ff0000"&gt;&amp;lt;&lt;/FONT&gt; 4; i++) {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Muestreo de las columnas&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTA = Muestreo_Columnas[i];&amp;nbsp; // vector de posiciones&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Delayus(500);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; // espera 500 us&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ((PTA &amp;gt;&amp;gt; 4) != 0x0F) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;Fila_Encontrada = PTA &lt;FONT color="#ff0000"&gt;&amp;amp; 0xF0&lt;/FONT&gt;;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;Columna_Encontrada = Muestreo_Columnas[i];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;Salir = 1;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;FONT color="#ff0000"&gt;i = 4;&amp;nbsp; /* Terminate for-loop */&lt;/FONT&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Tecla_Presionada = Fila_Encontrada&amp;nbsp;&lt;FONT color="#ff0000"&gt;|&lt;/FONT&gt; Muestreo_Columnas;&lt;BR /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#ff0000"&gt;/* Additional code required for keypress action */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&lt;DIV&gt;&lt;BR /&gt;&lt;FONT color="#ff0000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT face="Courier New" size="2"&gt;/* Wait for no key pressed before allowing loop back to Salir = 0; */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp; }&lt;BR /&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Note that Salir should remain set to 1 until it is established that no key is pressed, to avoid multiple decodes for the same keypress.&amp;nbsp; It might also be a good idea to replace the &lt;FONT face="Courier New"&gt;while&lt;/FONT&gt; with an &lt;FONT face="Courier New"&gt;if&lt;/FONT&gt; since only a single decode is required.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Oct 2007 01:50:27 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151376#M8216</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2007-10-01T01:50:27Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151377#M8217</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Yeah Mac, you were right.&amp;nbsp; i will make the changes&amp;nbsp; (some stupid mistakes jeje).&amp;nbsp;&amp;nbsp; maybe you were wondering why i'm trying to decode a matrix keyboard without KBI module, the answer is that in the final aplication, i will use a MC68HC908JK3 (it doesn't have PORT A-KBI module).&amp;nbsp; anyway....&lt;BR /&gt;i tried to change the index (3 instead 4) of the array Muestreo_Columnas as you suggest me&amp;nbsp; but when i compile the program it shows an error that says:&lt;BR /&gt;Error: C4801: Too many initializers.&lt;BR /&gt;Error: Compile failed.&lt;BR /&gt;with mi original array's index (4) the compile results are diferent.&lt;BR /&gt;&lt;BR /&gt;the code is simple but there is a line that i can't understand:&lt;BR /&gt;&lt;BR /&gt;Fila_Encontrada = PTA &amp;amp; 0xF0;&lt;BR /&gt;&lt;BR /&gt;what is the purpose to "add" 0xF0 to PTA value?&lt;BR /&gt;&lt;BR /&gt;Thanks a Lot!!&lt;BR /&gt;Mauricio&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 01 Oct 2007 10:38:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151377#M8217</guid>
      <dc:creator>mauricio2346</dc:creator>
      <dc:date>2007-10-01T10:38:10Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151378#M8218</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;FONT face="Arial"&gt;thanks for your intersting ideas.&amp;nbsp; if i'm understanding, the last array of the code,&lt;/FONT&gt; &lt;FONT face="Arial" size="2"&gt;RowDecode has to store every 16 posible values of the keyboard numbers (equal hex. numbers of every key?????&lt;BR /&gt;16 posible row values (4 row value by row... jejej).&amp;nbsp; i tested the circuit and the program, and it work fine detecting any key, but when i try to press another key... nothing happens.&lt;BR /&gt;i.e. when i don't push any key, the code returns 0xFF (in my case, through a little message into LCD (not push.)&amp;nbsp; when i push a key, lcd shows a kind of chinese word, it doesn't a problem but when i push another key... that chinese symbol stays in LCD.&lt;BR /&gt;i think Temporal isn't changing every time, even if i change Codificar_Filas values.&lt;BR /&gt;&lt;BR /&gt;Temporal = Codificar_Filas[Temporal &amp;gt;&amp;gt; 4] + i;&lt;BR /&gt;&lt;/FONT&gt;&lt;FONT face="Arial"&gt;&lt;BR /&gt;Grettings&lt;BR /&gt;&lt;BR /&gt;Mauricio.&lt;/FONT&gt;&lt;BR /&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Oct 2007 10:32:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151378#M8218</guid>
      <dc:creator>mauricio2346</dc:creator>
      <dc:date>2007-10-02T10:32:10Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151379#M8219</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Mauricio,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;To explain the&amp;nbsp;array structure a little more clearly, let's&amp;nbsp;label the keyboard rows from 0 to 3, and let's assume that the row with the lower number takes priority over higher numbered rows.&amp;nbsp; When a single column is scanned I will assume that the upper nybble of the PTA reading for a single keypress would be as follows -&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&amp;nbsp;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTA&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Array element&amp;nbsp;Array value&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Row 0&amp;nbsp; 0b1110xxxx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;0&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Row 1&amp;nbsp; 0b1101xxxx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Row 2&amp;nbsp; 0b1011xxxx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;Row 3&amp;nbsp; 0b0111xxxx&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;If the keys in Row 0 and Row 1 were to be simultaneously pressed, the PTA reading would become 0b1100xxxx.&amp;nbsp; This means that&amp;nbsp;array element 12 (the decimal nybble value) should contain the value 0, for Row 0 precedence.&amp;nbsp; Every multiple keypress situation needs to be entered in the array, in a similar fashion.&amp;nbsp; Array element 15 (the last element) will not normally be accessed, but should contain the value 0xFF.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;With the above values in the array, the return value from the keyscan() function should be within the decimal range 0 to 15, when a key is pressed.&amp;nbsp; The returned value should then be&amp;nbsp;used to derive the information you wish to display on the LCD, perhaps a specific text message.&amp;nbsp; As a simple test, you could try adding 0x41 to the value, before sending directly&amp;nbsp;to the display.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;It is not clear whether you are releasing the first key before pressing the second key - the second keypress won't be detected unless the first key is first released.&amp;nbsp; This is because the Salir variable should contain a non-zero value up&amp;nbsp;until all keys are released, and scanning will not occur unless Salir contains zero.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Tue, 02 Oct 2007 11:45:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151379#M8219</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2007-10-02T11:45:20Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151380#M8220</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi Mac.&lt;BR /&gt;i did everything you suggest in your last post.&amp;nbsp; i tested everything with that program, i checked it but it doesn't work.&amp;nbsp; y came back to the previous programs, i rewrite it and it worked, but as you said, it can detect a key even if another one is pressed.&amp;nbsp; when all keys are released, with that program, PTA values changes everytime.&amp;nbsp; what you suggest to prevent this program to read a key with another key pressed??&lt;BR /&gt;thanks!&lt;BR /&gt;&lt;BR /&gt;program:&lt;BR /&gt;&lt;BR /&gt;#include&amp;lt;MC68HC908GP32.h&amp;gt;&lt;BR /&gt;#include "TIMERAPI.h"&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;byte Muestreo_Filas[4]={0x07,0x0B,0x0D,0x0E};&lt;BR /&gt;byte Salir;&lt;BR /&gt;&lt;BR /&gt;void Key_Init(void);&lt;BR /&gt;byte Escanear_Teclado(void);&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;void Key_Init(void){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTAPUE =0xF0;&amp;nbsp;&amp;nbsp; //Entrada de datos con Pull-Up interno&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DDRA&amp;nbsp;&amp;nbsp; =0x0F;&amp;nbsp;&amp;nbsp; //Configura entradas [A7...A4] y salidas [A3...A0].&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTA&amp;nbsp;&amp;nbsp;&amp;nbsp; =0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Todas las salidas del puerto PTA a 0&lt;BR /&gt;}&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;byte Escanear_Teclado(void){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; byte i, Tecla_Pulsada, Fila, Columna;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Key_Init();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;if (Salir == 0) {&lt;BR /&gt;for (i=0;i&amp;lt;4;i++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PTA = Muestreo_Filas[i];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delayus(200);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ((PTA &amp;gt;&amp;gt; 4) != 0x0F) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Delayms(20);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Columna=PTA;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Fila=Muestreo_Filas[i];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Tecla_Pulsada=Columna|Fila;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; i=4;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; return Tecla_Pulsada;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; else{&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Salir=0;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;}&lt;BR /&gt;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 04 Oct 2007 10:19:19 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151380#M8220</guid>
      <dc:creator>mauricio2346</dc:creator>
      <dc:date>2007-10-04T10:19:19Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151381#M8221</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Mauricio,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;You do not describe the manner in which the suggested code failed, or what you observed when you tested the code.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Your new function&amp;nbsp; Escanear_Teclado() differs from the previous keyscan() function in two key areas -&lt;/FONT&gt;&lt;/DIV&gt;&lt;OL&gt;&lt;LI&gt;&lt;FONT size="2"&gt;You have eliminated the test to determined whether &lt;U&gt;any&lt;/U&gt; key is pressed, and hence the determination&amp;nbsp;that &lt;U&gt;all&lt;/U&gt; keys are released.&lt;/FONT&gt;&lt;/LI&gt;&lt;LI&gt;&lt;FONT size="2"&gt;You do not control the Salir variable to prevent multiple entry to the scanning process, once a keypress has been decoded.&lt;/FONT&gt;&amp;nbsp;&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;STRONG&gt;However, to a more important issue . . .&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;I have just realized that all the code posted so far has the potential to damage the MCU and/or the keypad.&amp;nbsp; This is because the columns that are &lt;U&gt;not&lt;/U&gt; being scanned, during each cycle of the scanning process,&amp;nbsp;are driven to&amp;nbsp;a high output state.&amp;nbsp; The single column that is being scanned is driven to a low output state.&amp;nbsp; If two (or more) keys, within the same row, are pressed,&amp;nbsp;this will result in a short circuit between two differing output states, with excessive current flow.&amp;nbsp; This may damage the MCU, and if a membrane keypad type is used,&amp;nbsp;might also&amp;nbsp;damage the keypad.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Two solutions to this problem are possible, a harware solution and a firmware solution -&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;The hardware solution is to place a series schottky diode&amp;nbsp;between&amp;nbsp;each MCU output and its associated keypad column connection.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;The preferred solution is the firmware solution.&amp;nbsp; This requires that the non-scanned columns are &lt;U&gt;never&lt;/U&gt; driven high.&amp;nbsp; This is achieved by the following code changes -&lt;/FONT&gt;&lt;/DIV&gt;&lt;OL&gt;&lt;LI&gt;&lt;FONT size="2"&gt;All bits of the keypad port are set low, and remain so at all times, i.e. PTA = 0;&lt;/FONT&gt;&lt;/LI&gt;&lt;LI&gt;&lt;FONT size="2"&gt;Pullups are enabled on all bits of the port, i.e. PTAPUE = 0xFF;&lt;/FONT&gt;&lt;/LI&gt;&lt;LI&gt;&lt;FONT size="2"&gt;When a column is to be scanned, its corresponding DDR bit is set for output.&amp;nbsp; However, when not scanned the DDR bit must be cleared.&amp;nbsp; This will require change to the Muestreo_Filas array, and the way it is used.&lt;/FONT&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Changes to the previously suggested code are shown below.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;/* Global variables */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;byte Salir = 0;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;byte Tecla_Presionada;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;const byte Muestreo_Columnas[4] = {&lt;FONT color="#ff0000"&gt;0x08, 0x04, 0x02, 0x01&lt;/FONT&gt;};&lt;BR /&gt;const byte RowDecode[16] = {&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;...&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;};&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;byte keyscan(void)&lt;BR /&gt;{&lt;BR /&gt;&amp;nbsp;&amp;nbsp; byte temp, i;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT color="#ff0000" face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; PTA = 0;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT color="#ff0000" face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; PTAPUE = 0xFF;&amp;nbsp; /* Enable all pullups */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT color="#ff0000" face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color="#ff0000"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;/* Check for any key pressed */&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT color="#ff0000" face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; DDRA = 0x0F;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; if (((PTA &amp;gt;&amp;gt; 4) != 0x0F) {&lt;BR /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Check&amp;nbsp;if keypress previously decoded */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (Salir == 0)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Debounce();&amp;nbsp; /* Key debounce delay */&lt;BR /&gt;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Commence scan for actual keypress */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (i = 0; i &amp;lt; 4; i++) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;FONT color="#ff0000"&gt;DDRA&lt;/FONT&gt; = Muestreo_Columnas[i];&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Delayus(500);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Settling delay 500 us&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp = PTA;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ((temp &amp;gt;&amp;gt; 4) != 0x0F) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT color="#ff0000"&gt;DDRA = 0x0F;&lt;/FONT&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Salir = 1;&amp;nbsp; /* Flag successful decode */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; temp = RowDecode[temp &amp;gt;&amp;gt; 4] + i;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return temp;&amp;nbsp; /* Return keypress value 0-15 */&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Salir = 0;&amp;nbsp; /* All keys released */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New" size="2"&gt;&amp;nbsp;&amp;nbsp; &lt;FONT color="#ff0000"&gt;DDRA = 0x0F;&lt;/FONT&gt;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; return 0xFF;&lt;BR /&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 05 Oct 2007 01:09:07 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151381#M8221</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2007-10-05T01:09:07Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151382#M8222</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Hi.&amp;nbsp;&amp;nbsp; no . fortunately, y used between uC and keypad some series resistors. i never trust only in the internal resistors. anyway;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;the way i knew when the program was working as it should, was trough a LCD.&amp;nbsp; the lcd controler support some simbols.&amp;nbsp;&amp;nbsp; with both programs, i store the value of the key into a function that send data to LCD.&amp;nbsp; so, with my last program, the LCD shown a kind of japanese or chinese symbol (diferent for every key).&amp;nbsp; with your program, the LCD shown only one strange symbol, even pressing any key.&amp;nbsp;&lt;BR /&gt;y ckeck some of the programs you have posted and i was thinking about reset PTA after a key was pushed.&amp;nbsp; maybe it was the problem, but i correct it and nothing happens.&amp;nbsp; i think the last corrections you did are fine. i will test them.&lt;BR /&gt;the basic algorith and some examples i choose were taken from this website:&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://www.x-robotics.com/rutinas.htm#Teclado%20Matricial%204x4" target="test_blank"&gt;http://www.x-robotics.com/rutinas.htm#Teclado%20Matricial%204x4&lt;/A&gt; (maybe you need some help with spanish.... jeje.&lt;BR /&gt;)&lt;BR /&gt;&lt;BR /&gt;and from this site:&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://www.rentron.com/serkey16.htm" target="test_blank"&gt;http://www.rentron.com/serkey16.htm&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;there it says the steps you have to follow to control it.&amp;nbsp; i read it and simplify it, trying to use only one function to control everything, detect the key, find the key and return a valid data from every single key.&lt;BR /&gt;&lt;BR /&gt;thanks a lot for your help...&lt;BR /&gt;Mauricio!&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 05 Oct 2007 09:48:50 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151382#M8222</guid>
      <dc:creator>mauricio2346</dc:creator>
      <dc:date>2007-10-05T09:48:50Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151383#M8223</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Mauricio,&lt;BR /&gt;&lt;BR /&gt;I have been lurking on this topic as Bigmac has been very helpful.&amp;nbsp; I have one more thing for you to think about.&lt;BR /&gt;&lt;BR /&gt;Continously scanning the columns generates a lot of electrical noise!&amp;nbsp; You can reduce this a lot if you do the following:&amp;nbsp; While you are in idle mode waiting for a keypress, Drive all the column lines high and then monitor the rows to see if they go high - when they do, you can then start your scan and do one scan to determine which key is pressed - then you put all the columns high again and wait for the rows to all go low - the key has been released - Start Over.&amp;nbsp; This way, you only scan the columns when a key is pressed and only scan once per key press.&amp;nbsp; You may have to slightly modify your hardware to make sure inputs are pulled down and you have propper current limiting.&amp;nbsp; Contact me off topic and I could send you a schematic I have used.&lt;BR /&gt;&lt;BR /&gt;I have used this on several projects and it works very well and helps keep the FCC and your AM radio a lot happier.&lt;BR /&gt;&lt;BR /&gt;Good Luck,&lt;BR /&gt;&lt;BR /&gt;Peter House&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 05 Oct 2007 19:09:23 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151383#M8223</guid>
      <dc:creator>PeterHouse</dc:creator>
      <dc:date>2007-10-05T19:09:23Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151384#M8224</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Hi all,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The method suggested here by Peter is, in fact, the method used by the code I suggested to look at in my first post in this thread. It works well and is the method I (and most others) use also.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 05 Oct 2007 19:18:10 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151384#M8224</guid>
      <dc:creator>peg</dc:creator>
      <dc:date>2007-10-05T19:18:10Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151385#M8225</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Hello Peter,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;What you have&amp;nbsp;suggested is exactly the intent of&amp;nbsp;my posted code, except that the active logic state is low, rather than high.&amp;nbsp; This is more in keeping with use of the internal pullups within the device.&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Regards,&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;Mac&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT size="2"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 05 Oct 2007 19:25:41 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151385#M8225</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2007-10-05T19:25:41Z</dc:date>
    </item>
    <item>
      <title>Re: MC68HC908GP32 (4x4 matrix keypad program)</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151386#M8226</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;Bigmac,&lt;BR /&gt;&lt;BR /&gt;If you like it "Upside Down" that is OK with me. &lt;IMG alt=":smileyhappy:" class="emoticon emoticon-smileyhappy" id="smileyhappy" src="http://freescale.i.lithium.com/i/smilies/16x16_smiley-happy.gif" title="Smiley Happy" /&gt;&lt;BR /&gt;&lt;BR /&gt;Peter&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 05 Oct 2007 19:32:45 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/MC68HC908GP32-4x4-matrix-keypad-program/m-p/151386#M8226</guid>
      <dc:creator>PeterHouse</dc:creator>
      <dc:date>2007-10-05T19:32:45Z</dc:date>
    </item>
  </channel>
</rss>

