<?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: HC11 keyboard scanning routine HELP!</title>
    <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210155#M18005</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Thank you both for your replies. I had just figured it out about an hour after i posted, but your solutions seems to be more effcient than mine. Thank you very much. I am new!&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Mon, 07 Apr 2008 03:59:46 GMT</pubDate>
    <dc:creator>mreister</dc:creator>
    <dc:date>2008-04-07T03:59:46Z</dc:date>
    <item>
      <title>HC11 keyboard scanning routine HELP!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210151#M18001</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;I am tring to write&amp;nbsp;a keyboard scanning routine for a 4x4 keypad in C for my FOX11 HC11 trainer board. I am trying to detect when the values on PORTE and PORTD out changed and process the change accourdingly. The I/O map for the keyboard is shown below.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Pin 2 PD2 connects COL0 of the keypad&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Pin 3 PD3 connects COL1 of the keypad&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Pin 4 PD4 connects COL2 of the keypad&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Pin 5 PD5 connects COL3 of the keypad&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Pin 6 PE0 connects ROW0 of the keypad&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Pin 7 PE1 connects ROW1 of the keypad&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Pin 8 PE2 connects ROW2 of the keypad&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; font-family: Calibri;"&gt;I have used a default asm program given by the manufacturer to verify that the keyboard physically works. My code is shown below:&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;/* sample program of mixed C code and asm code */&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;#include &amp;lt;hc11.h&amp;gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;#define LED (*(volatile unsigned char*)0x1404)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;typedef void (*fnptr)();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;#define lcd_ini ((fnptr)0x80f)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;void lcd_line1(char, char*);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;void lcd_line2(char, char*);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;int main()&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; char characterEntered[] = "Key entered&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt; ";&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; // set up the registers&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; PORTD = 0xFF;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; DDRD&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt; = 0xFE;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; while(1)&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; {&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; if((PORTE != 0x8F) || (PORTD != 0x3F))&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; &lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;{&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&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;/SPAN&gt; lcd_line1(11, characterEntered);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&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;/SPAN&gt; delay1ms(10000);&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&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;/SPAN&gt; lcd_ini();&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; }&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style=": ; color: #000000; font-family: Calibri;"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt; return 0;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="color: #000000; font-family: Calibri;"&gt;When the value on the pins PD2-PD5 and PE0-PE3 change isn’t the change suppose to be reflected in a change in PORTE and PORTD? If so why aren’t the values of PD or PE changed from their default values 0x8F and 0x3F? Even if I try to assign a new value to PORTE or PORTD they do not change?&lt;/SPAN&gt;&lt;/P&gt;&lt;DIV&gt; &lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 06 Apr 2008 10:42:20 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210151#M18001</guid>
      <dc:creator>mreister</dc:creator>
      <dc:date>2008-04-06T10:42:20Z</dc:date>
    </item>
    <item>
      <title>Re: HC11 keyboard scanning routine HELP!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210152#M18002</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;A href="http://www.evbplus.com/download_hcs12/Dragon12_CW_TestC_1_1.zip" rel="nofollow" target="_blank"&gt;This is sample&lt;/A&gt; code to scan the keyboard on a dragon12. It should give you an idea how might you might do this in "C".&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://www.evbplus.com/download_hcs12/Dragon12_CW_TestC_1_1.zip" target="test_blank"&gt;http://www.evbplus.com/download_hcs12/Dragon12_CW_TestC_1_1.zip&lt;/A&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 06 Apr 2008 21:15:57 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210152#M18002</guid>
      <dc:creator>JimDon</dc:creator>
      <dc:date>2008-04-06T21:15:57Z</dc:date>
    </item>
    <item>
      <title>Re: HC11 keyboard scanning routine HELP!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210153#M18003</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;DIV&gt;&lt;/DIV&gt;&lt;DIV&gt;Hello,&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Can I assume that the low nybble of PORTE is set as inputs, and you have&amp;nbsp;either internal&amp;nbsp;pullups enabled, or alternatively external pullups?&amp;nbsp; If so, the active state for&amp;nbsp;each column output should be low, so that when a key is pressed, one of the PORTE inputs will also&amp;nbsp;be driven&amp;nbsp;low.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;I would strongly recommend that, when a column becomes inactive, that you set the column&amp;nbsp;as an input (high-Z) state.&amp;nbsp; This will avoid potential conflict between two outputs, should two keys in different columns be simultaneously pressed.&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;The procedure to read a keypress would then be -&lt;/DIV&gt;&lt;OL&gt;&lt;LI&gt;Set all columns active - if the row inputs all&amp;nbsp;remain high, no key is pressed.&lt;/LI&gt;&lt;LI&gt;If a keypress is sensed, it is usual to allow a switch debounce period, say 50-100 milliseconds.&lt;/LI&gt;&lt;LI&gt;At the conclusion of the debounce period, the keypress will then need to be identified by activating a single column at a time, until the actual keypress is found.&lt;/LI&gt;&lt;LI&gt;The combination of column and row associated with the keypress, will then need to be translated to a character value for display.&lt;/LI&gt;&lt;LI&gt;You might then choose to wait until all keys are released, before allowing detection of another keypress.&lt;/LI&gt;&lt;/OL&gt;&lt;DIV&gt;Here is some untested code -&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;#define COLMASK&amp;nbsp; 0x3C&amp;nbsp; /* PD2-PD5 */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;#define ROWMASK&amp;nbsp; 0x0F&amp;nbsp; /* PE0-PE3 */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;/* Key translation table */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;const byte keytable[] = {&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp; "147*2580369#ABCD"&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;};&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;void main( void)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;{&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;byte col, val;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;...&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;...&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;while (1) {&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;PORTD &amp;amp;= ~COLMASK;&amp;nbsp; /* Set all columns active low */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;DDRD&amp;nbsp;|= COLMASK;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set all columns to output */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;if ((PORTE &amp;amp; ROWMASK) != ROWMASK) { /* Test for a keypress */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay1ms(50);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Delay 50ms debounce */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Scan&amp;nbsp;individual columns */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (col = 0; col &amp;lt; 4; col++) {&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; val = scan_col( col);&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (val)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/* Display keypress value here&amp;nbsp;*/&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DDRD&amp;nbsp;|= COLMASK;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Set all columns to output */&lt;/FONT&gt;&lt;/DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;while ((PORTE &amp;amp; ROWMASK)&amp;nbsp;!= ROWMASK); /*&amp;nbsp;Wait for key release */&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; delay1ms(50);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* Just in case there is key release bounce */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; }&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; ...&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; ...&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;byte scan_col( byte column)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;{&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;byte key, i;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;column &amp;amp;= 0x03;&amp;nbsp;&amp;nbsp; /* Ensure range 0-3 */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;DDRD &amp;amp;= ~COLMASK; /*&amp;nbsp;Set all colunmns inactive (high-Z) */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;DDRD |= (0x04 &amp;lt;&amp;lt; column); /* Set specified column active low */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;key = ~PORTE &amp;amp; ROWMASK;&amp;nbsp;&amp;nbsp; /* Mask inverted row status */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;if (key == 0)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; return 0;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* No keypress in column */&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;i = 0;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;while ((key &amp;gt;&amp;gt; 1) != 0)&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; i++;&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;return (key_table[column*4 + i]);&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;DIV&gt;Regards,&lt;/DIV&gt;&lt;DIV&gt;Mac&lt;/DIV&gt;&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by bigmac on &lt;SPAN class="date_text"&gt;2008-04-07&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;12:37 AM&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;Message Edited by bigmac on &lt;SPAN class="date_text"&gt;2008-04-07&lt;/SPAN&gt; &lt;SPAN class="time_text"&gt;12:42 AM&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 06 Apr 2008 21:31:04 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210153#M18003</guid>
      <dc:creator>bigmac</dc:creator>
      <dc:date>2008-04-06T21:31:04Z</dc:date>
    </item>
    <item>
      <title>Re: HC11 keyboard scanning routine HELP!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210154#M18004</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;The nice thing about the code I pointed you to is that it uses a table to decode the keys, so in the case of the dragon12 you can plug the key board in with way and rearrange the table to decode.&lt;BR /&gt;This table give you a hex value, 0-f, the routine also detects double key presses, and has de-bounce built into it.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;DIV class="msg_source_code"&gt;&lt;DIV class="text_smallest"&gt;Code:&lt;/DIV&gt;&lt;PRE&gt;#ifndef INV_KEYPADbyte _kbdecoder[4][4]={{0xf,0xb,0x7,0x3},{0xe,0xa,0x6,0x2},{0xd,0x9,0x5,0x1},{0xc,0x8,0x4,0x0},};#else  // Use this for dragon12-Plusconst byte _kbdecoder[4][4]={{0xd,0xc,0xb,0xa},{0xe,0x9,0x6,0x3},{0x0,0x8,0x5,0x2},{0xf,0x7,0x4,0x1},};#endif&lt;/PRE&gt;&lt;/DIV&gt;&lt;BR /&gt;&amp;nbsp;&lt;BR /&gt;&lt;/DIV&gt;&lt;BR /&gt;&lt;DIV&gt;&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 06 Apr 2008 22:01:18 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210154#M18004</guid>
      <dc:creator>JimDon</dc:creator>
      <dc:date>2008-04-06T22:01:18Z</dc:date>
    </item>
    <item>
      <title>Re: HC11 keyboard scanning routine HELP!</title>
      <link>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210155#M18005</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;DIV&gt;Thank you both for your replies. I had just figured it out about an hour after i posted, but your solutions seems to be more effcient than mine. Thank you very much. I am new!&lt;/DIV&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Mon, 07 Apr 2008 03:59:46 GMT</pubDate>
      <guid>https://community.nxp.com/t5/8-bit-Microcontrollers/HC11-keyboard-scanning-routine-HELP/m-p/210155#M18005</guid>
      <dc:creator>mreister</dc:creator>
      <dc:date>2008-04-07T03:59:46Z</dc:date>
    </item>
  </channel>
</rss>

