SPI接続のLCD、UC1701です。
12
VDD(pin7)にレギュレータを追加できる仕様になっています。
バックライト(pin5)とRST(pin11)もレギュレータから給電できるようにして、結線をシンプルにしてみます。
11
レギュレータはヒートシンクと真ん中のピンがOUT側:3.3Vのピン配列になっているものが必要です。
1701-pin

10
レギュレータと入出力のコンデンサを追加。
バックライトとRSTのピンを抜いて、ポリウレタン銅線でレギュレータのOUT側と接続。
15
ピンを支える樹脂の部分は、ポリウレタン銅線が通るところだけ、少し削っています。
16
動作テストを兼ねて、コントラストの調整をしてみます。
LCDを使用するとき、スケッチにコントラストの値を指定できるので、最適な値を探ってみます。
タクトスイッチを2つ使って、片方が押されたらコントラストを上昇、もう片方が押されたらコントラストを下降させます。
レギュレータを追加したので、VDDは5Vから供給し、3.3Vで動作します。
タクトスイッチは、pinModeをINPUT_PULLUPにして、328p内部の抵抗を使用しています。
18
u8glibのサンプルスケッチを流用して、右側にコントラストの値を表示しています。
22
コントラストは255まで指定できますが、値が大きいと、背景が黒くなって表示が見えません。
19
コントラストの値が小さいと、背景は目立たなくなりますが、表示も薄くなってしまいます。
下の画像はコントラストの値が111の時ですが、100以下ではほとんど何も見えなくなります。
20
背景が濃くならず、表示が分かりやすい濃さになるのは、この辺りでした。
21
タクトスイッチはチャタリングの影響があるで、何も対策しないと1回押しても2回分値が変わってしまいます。
そこで、処理が3回ループする間、押されていたら1回押したと見なして、コントラストを1段上げ下げするようにしたところ、操作と値の変化の間に違和感がなくなりました。
また、28ループ以上、押し続けた場合は、長押ししたと判断して、連続してコントラストを変化させるようにしています。
チャタリングの防止は、押している時間をカウントするとか、他にいろいろやり方があるようです。
INPUT_PULLUPを使用しているので、押している間はLOWで、押されていなければHIGHになります。
コントラストの初期値を178にして100から255まで変化できるようにしています。

#include <u8glib> // LCD

const int SW_up = 6;
const int SW_down = 7;
int contrast = 178;
int count_SW_up = 0;
int count_SW_down = 0;

U8GLIB_MINI12864 u8g(10, 9); // HW SPI (CS, RS)

void draw(void) {

  u8g.setFont(u8g_font_gdr25r);
  u8g.drawStr( 0, 30, "U");
  u8g.drawStr(53, 30, "g");
  u8g.setFont(u8g_font_gdr30n);
  u8g.drawStr90(23, 10, "8");

  u8g.setFont(u8g_font_gdr20r);
  u8g.setPrintPos(80, 30); u8g.print(contrast);

  u8g.setFont(u8g_font_4x6);
  u8g.drawStr(80,  8, "contrast:");
  u8g.drawStr( 1, 54, "code.google.com/p/u8glib");
  
  u8g.drawHLine( 2, 35, 47);
  u8g.drawVLine(45, 32, 12);
}

void setup(void) {
  //Serial.begin(9600); 
  pinMode(SW_up, INPUT_PULLUP);
  pinMode(SW_down, INPUT_PULLUP);
}

void loop(void) {
  u8g.setContrast(contrast);
  
  // picture loop
  u8g.firstPage();  
  do {
    draw();
  } while( u8g.nextPage() );
  
  // contrast manipulation
  if(digitalRead(SW_up) == LOW ){
    ++count_SW_up;
  }else{
    count_SW_up = 0;
  }
  if(contrast < 255){
    if(count_SW_up == 3 or count_SW_up >= 28){
      ++contrast;
    }
  }
  if(digitalRead(SW_down) == LOW ){
    ++count_SW_down;
  }else{
    count_SW_down = 0;
  }
  if(contrast > 100){
    if(count_SW_down == 3 or count_SW_down >= 28){
      --contrast;
    }
  }
}
<参考>