پاسخ تمرين اول كلاسي ميكرو
در ضمن بدست آوردن مقادير مربوط به متغير keytable به عهده دانشجويان مي باشد.
#include
#include
#include
#include
#asm
.equ __lcd_port=0x18
#endasm
void main (void)
{
char buffer[6];
char key,i;
unsigned char keytable[17]={0xee,.....};
lcd_init(16);
lcd_clear();
while(1){
lcd_putsf("welcome");
delay_ms(500);
lcd_clear();
DDRD=0x0f;
PORTD=0xf0;
delay_us(10);
key=PIND;
DDRD=0xf0;
PORTD=0x0f;
delay_us(10);
key=PIND|key;
delay_ms(20);
i=0xff;
if (key!=0xff){
for(i=0;i<16;i++){
if(keytable[i]==key){
i++;
switch (i){
case 9: i=0;
sprintf(buffer,"key=%d",i);
lcd_puts(buffer);
break;
case 10: lcd_putsf("key=*");
break;
case 11: lcd_putsf("key=#");
break;
case 12: lcd_putsf("key=f1");
break;
case 13: lcd_putsf("key=f2");
break;
case 14: lcd_putsf("key=f3");
break;
case 15: lcd_putchar("key=f4");
break;
default:
sprintf(buffer,"key=%d",i);
lcd_puts(buffer);
}
}
}
}
}
}
در اينجا مي توان در تمام حالات مقدار i را به عنوان يك كاراكتر تعريف كرده(كاراكتر متناظر) و سپس بعد از اتمام switch با دو خط دستور زير آنرا روي lcd نمايش داد.
(sprintf(buffer,"key=%c",i
(lcd_puts(buffer