I have received mine a few days ago and the quality is OK.
I have made a keypad application:
#include "Nokia_lcd.h"
#include "stdio.h"
#include "EEPROM.h"
int adckey[5] = {27, 123, 264, 379, 533};
const int numkeys = 42;
const int strlength = 14;
char buttons[numkeys] = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9',',','.',' ','<','*','='};
char buf[strlength+1];
int charpos = 0;
int width = 7;
int height = 6;
int x,y;
char curchar = 'A';
Nokia_lcd lcd=Nokia_lcd();
void setup(void){
DDRB=0x2F;
LCD_BACKLIGHT(1);
lcd.cLCD_Init();
lcd.cLCD_Box(0,0,131,131,FILL,BLACK);
}
void loop(void) {
int i,j;
int k = 0;
switch(getkey()) {
case 0:
if (x > 0) {
x -= 1;
}
break;
case 2:
if (y < height-1) {
y += 1;
}
break;
case 3:
if (y > 0) {
y -= 1;
}
break;
case 4:
if (x < width-1) {
x += 1;
}
break;
case 1:
int l,m;
switch(curchar) {
default:
if (charpos < strlength) {
buf[charpos] = curchar;
charpos++;
}
break;
case '*':
for (l=0; l<strlength+1; l++) {
if (buf[l] != NULL) {
EEPROM.write(l,buf[l]);
} else {
if (l != strlength) {
EEPROM.write(l,' ');
} else {
EEPROM.write(l,NULL);
}
}
}
break;
case '=':
charpos = 0;
for (l=0; l<strlength+1; l++) {
buf[l] = EEPROM.read(l);
if (buf[l] != NULL) {
charpos++;
} else {
for (m=l-1; m>0; m--) {
if (buf[m] == ' ') {
charpos--;
} else {
break;
}
}
}
}
break;
case '<':
if (charpos > 0) {
buf[charpos-1] = ' ';
charpos--;
}
break;
}
break;
}
delay(150);
int fg,bg;
for (i=0; i<height; i++) {
for (j=0; j<width; j++) {
if (j == x && i == y) {
fg = WHITE;
bg = BLUE;
curchar = buttons[k];
} else {
fg = BLACK;
bg = WHITE;
}
lcd.cLCD_Box(5+j*16,5+i*16,19+j*16,19+i*16,FILL,bg);
lcd.cLCD_Char(buttons[k],8+j*16,8+i*16,fg,bg);
k++;
if (buttons[k+1] == NULL) {
break;
}
}
}
lcd.cLCD_String(buf,8,112,WHITE,BLACK);
}
int getkey(void) {
int i;
int sig = analogRead(0);
for (i=0; i<5; i++) {
if (sig <= adckey[i]) {
break;
}
}
return i;
}