Page 457 - Programming Microcontrollers in C
P. 457
442 Chapter 8 MCORE, A RISC Machine
static BYTE c;
if(KPSR.KPKD) /* if a key has been depressed */
{
for(column=COL_0;column!=0xf;column=(column<<1 |0x1) & 0xf)
{
KPDRB.COLUMNS=column;
/* kill some time here */
if(KPDRB.ROWS!=0xff)
{
c=(~(KPDRB.COLUMNS<<4 |
(KPDRB.ROWS&0xf))) & 0xff;
}
}
if(c==0x22)
*data=’2';
else if(c==0x42)
*data=’1';
else
*data=0;
c=0;
KPDRB.COLUMNS=0X0; /* write 0 to KPDR[15:8] */
KPSR.KDIE=OFF; /* disable key depress interrupt */
KPSR.KRIE=ON; /* enable key release interrupt */
}
else /* key release was detected */
{
KPSR.KPKR=ON;
KPSR.KPKD=ON; /* clear key release and depress */
KPSR.KRSS=ON; /* set key release synchronizer */
KPSR.KDSC=ON; /* clear key depress synchronizer */
KPDRB.COLUMNS=0X0; /* write 0 to KPDR[15:8] */
KPSR.KDIE=ON; /* enable key depress interrupt */
KPSR.KRIE=OFF; /* disable key release interrupt */
}
}
The code executed by the isr when a key is released is unchanged
from earlier.
Adding a Display
Access to the LCD port is through a memory-mapped register.
This register contains two byte-wide fields, one called COMMAND

