极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16006|回复: 13

我的超长代码贴-NOKIA LCD 菜单 部分功能已经实现

[复制链接]
发表于 2012-12-13 20:16:38 | 显示全部楼层 |阅读模式
现在我的这个菜单项目终于完成了,功能部分只有部分实现,颜色识别没有实现,另外就是录音和MP3播放,一来是没有模块,在一个端口不够了。
先上图
这个是程序调用的框图,简化版的非标准程序框图,只是让大家知道有几个函数在调用,当然了也不是全部的函数。

下一个是整体的模块硬件图

系统运行时的几个画面





再然后就是冗长的代码了
[pre lang="arduino" line="1" file="LCD"]#include "Wire.h"
//////////////////////// 传感器引脚定义  /////////////////////////////
#define ALCOHOL_AINPUT  A6 //D20
#define ALCOHOL_DINPUT  21
#define COMBUST_AINPUT  A6 //D20
#define COMBUST_DINPUT  21
#define MIC_AINPUT      A6 //D20
#define MIC_DINPUT      21
#define COLOR_S0        20 // A6
#define COLOR_S1        21 // A7
#define COLOR_S2         0
#define COLOR_S3         1
#define COLOR_OUT        2
#define COLOR_LED       13
#define TEMPE_HUMI_IN   13
////////////////////////// 按键扫盲引脚 定义 /////////////
#define SHIFTKEYS       17 // A3
#define SCANROW_1       16 // A2
#define SCANROW_2       15 // A1
#define SCANROW_3       14 // A0
#define READCOL_1        4
#define READCOL_2        5
#define READCOL_3        6
#define READCOL_4         7
//////////// LCD 接口定义//////////////////////
#define PIN_RESET        12
#define PIN_SCE        11
#define PIN_DC         10
#define PIN_SDIN        9
#define PIN_SCLK        8
#define BACKLIGHT       3
///////////// LCD 状态控制 ///////////////////
#define LCD_C           LOW
#define LCD_D           HIGH
#define LCD_CMD         0
//////////// LCD 屏幕大小 ////////////////////
#define LCD_X           84
#define LCD_Y           48
///////////////////// DS1307寄存器变量定义 /////
#define DS1307_ADDRESS      0x68
#define DS1307_STOP_START   0x00
#define DS1307_REG_SECOND   0x00
#define DS1307_REG_MINITUE  0x01
#define DS1307_REG_HOURS    0x02
#define DS1307_REG_WEEK     0x03
#define DS1307_REG_DATE     0x04
#define DS1307_REG_MONTH    0x05
#define DS1307_REG_YEAR     0x06
#define DS1307_REG_CTRL     0x07
#define DS1307_HOUR_12      0x40
#define DS1307_HOUR_24      0x00
#define DS1307_START        0x00
#define DS1307_STOP         0x80
///////////////// 时间寄存器选择 /////////////////////
#define YEAR                6
#define MONTH               5
#define DATE                4
#define WEEK                3
#define HOURS               2
#define MINITUES            1
#define SECOND              0
/////////////////英文 ASCII 字符定义///////////
static const byte ASCII[][5] =
{
{0x00, 0x00, 0x00, 0x00, 0x00} // 20 空格
,{0x00, 0x00, 0x5f, 0x00, 0x00} // 21 !
,{0x00, 0x07, 0x00, 0x07, 0x00} // 22 "
,{0x14, 0x7f, 0x14, 0x7f, 0x14} // 23 #
,{0x24, 0x2a, 0x7f, 0x2a, 0x12} // 24 $
,{0x23, 0x13, 0x08, 0x64, 0x62} // 25 %
,{0x36, 0x49, 0x55, 0x22, 0x50} // 26 &
,{0x00, 0x05, 0x03, 0x00, 0x00} // 27 '
,{0x00, 0x1c, 0x22, 0x41, 0x00} // 28 (
,{0x00, 0x41, 0x22, 0x1c, 0x00} // 29 )
,{0x14, 0x08, 0x3e, 0x08, 0x14} // 2a *
,{0x08, 0x08, 0x3e, 0x08, 0x08} // 2b +
,{0x00, 0x50, 0x30, 0x00, 0x00} // 2c ,
,{0x08, 0x08, 0x08, 0x08, 0x08} // 2d -
,{0x00, 0x60, 0x60, 0x00, 0x00} // 2e .
,{0x20, 0x10, 0x08, 0x04, 0x02} // 2f /
,{0x3e, 0x51, 0x49, 0x45, 0x3e} // 30 0
,{0x00, 0x42, 0x7f, 0x40, 0x00} // 31 1
,{0x42, 0x61, 0x51, 0x49, 0x46} // 32 2
,{0x21, 0x41, 0x45, 0x4b, 0x31} // 33 3
,{0x18, 0x14, 0x12, 0x7f, 0x10} // 34 4
,{0x27, 0x45, 0x45, 0x45, 0x39} // 35 5
,{0x3c, 0x4a, 0x49, 0x49, 0x30} // 36 6
,{0x01, 0x71, 0x09, 0x05, 0x03} // 37 7
,{0x36, 0x49, 0x49, 0x49, 0x36} // 38 8
,{0x06, 0x49, 0x49, 0x29, 0x1e} // 39 9
,{0x00, 0x36, 0x36, 0x00, 0x00} // 3a :
,{0x00, 0x56, 0x36, 0x00, 0x00} // 3b ;
,{0x08, 0x14, 0x22, 0x41, 0x00} // 3c <
,{0x14, 0x14, 0x14, 0x14, 0x14} // 3d =
,{0x00, 0x41, 0x22, 0x14, 0x08} // 3e >
,{0x02, 0x01, 0x51, 0x09, 0x06} // 3f ?
,{0x32, 0x49, 0x79, 0x41, 0x3e} // 40 @
,{0x7e, 0x11, 0x11, 0x11, 0x7e} // 41 A
,{0x7f, 0x49, 0x49, 0x49, 0x36} // 42 B
,{0x3e, 0x41, 0x41, 0x41, 0x22} // 43 C
,{0x7f, 0x41, 0x41, 0x22, 0x1c} // 44 D
,{0x7f, 0x49, 0x49, 0x49, 0x41} // 45 E
,{0x7f, 0x09, 0x09, 0x09, 0x01} // 46 F
,{0x3e, 0x41, 0x49, 0x49, 0x7a} // 47 G
,{0x7f, 0x08, 0x08, 0x08, 0x7f} // 48 H
,{0x00, 0x41, 0x7f, 0x41, 0x00} // 49 I
,{0x20, 0x40, 0x41, 0x3f, 0x01} // 4a J
,{0x7f, 0x08, 0x14, 0x22, 0x41} // 4b K
,{0x7f, 0x40, 0x40, 0x40, 0x40} // 4c L
,{0x7f, 0x02, 0x0c, 0x02, 0x7f} // 4d M
,{0x7f, 0x04, 0x08, 0x10, 0x7f} // 4e N
,{0x3e, 0x41, 0x41, 0x41, 0x3e} // 4f O
,{0x7f, 0x09, 0x09, 0x09, 0x06} // 50 P
,{0x3e, 0x41, 0x51, 0x21, 0x5e} // 51 Q
,{0x7f, 0x09, 0x19, 0x29, 0x46} // 52 R
,{0x46, 0x49, 0x49, 0x49, 0x31} // 53 S
,{0x01, 0x01, 0x7f, 0x01, 0x01} // 54 T
,{0x3f, 0x40, 0x40, 0x40, 0x3f} // 55 U
,{0x1f, 0x20, 0x40, 0x20, 0x1f} // 56 V
,{0x3f, 0x40, 0x38, 0x40, 0x3f} // 57 W
,{0x63, 0x14, 0x08, 0x14, 0x63} // 58 X
,{0x07, 0x08, 0x70, 0x08, 0x07} // 59 Y
,{0x61, 0x51, 0x49, 0x45, 0x43} // 5a Z
,{0x00, 0x7f, 0x41, 0x41, 0x00} // 5b [
,{0x02, 0x04, 0x08, 0x10, 0x20} // 5c &
,{0x00, 0x41, 0x41, 0x7f, 0x00} // 5d ]
,{0x04, 0x02, 0x01, 0x02, 0x04} // 5e ^
,{0x40, 0x40, 0x40, 0x40, 0x40} // 5f _
,{0x00, 0x01, 0x02, 0x04, 0x00} // 60 `
,{0x20, 0x54, 0x54, 0x54, 0x78} // 61 a
,{0x7f, 0x48, 0x44, 0x44, 0x38} // 62 b
,{0x38, 0x44, 0x44, 0x44, 0x20} // 63 c
,{0x38, 0x44, 0x44, 0x48, 0x7f} // 64 d
,{0x38, 0x54, 0x54, 0x54, 0x18} // 65 e
,{0x08, 0x7e, 0x09, 0x01, 0x02} // 66 f
,{0x0c, 0x52, 0x52, 0x52, 0x3e} // 67 g
,{0x7f, 0x08, 0x04, 0x04, 0x78} // 68 h
,{0x00, 0x44, 0x7d, 0x40, 0x00} // 69 i
,{0x20, 0x40, 0x44, 0x3d, 0x00} // 6a j
,{0x7f, 0x10, 0x28, 0x44, 0x00} // 6b k
,{0x00, 0x41, 0x7f, 0x40, 0x00} // 6c l
,{0x7c, 0x04, 0x18, 0x04, 0x78} // 6d m
,{0x7c, 0x08, 0x04, 0x04, 0x78} // 6e n
,{0x38, 0x44, 0x44, 0x44, 0x38} // 6f o
,{0x7c, 0x14, 0x14, 0x14, 0x08} // 70 p
,{0x08, 0x14, 0x14, 0x18, 0x7c} // 71 q
,{0x7c, 0x08, 0x04, 0x04, 0x08} // 72 r
,{0x48, 0x54, 0x54, 0x54, 0x20} // 73 s
,{0x04, 0x3f, 0x44, 0x40, 0x20} // 74 t
,{0x3c, 0x40, 0x40, 0x20, 0x7c} // 75 u
,{0x1c, 0x20, 0x40, 0x20, 0x1c} // 76 v
,{0x3c, 0x40, 0x30, 0x40, 0x3c} // 77 w
,{0x44, 0x28, 0x10, 0x28, 0x44} // 78 x
,{0x0c, 0x50, 0x50, 0x50, 0x3c} // 79 y
,{0x44, 0x64, 0x54, 0x4c, 0x44} // 7a z
,{0x00, 0x08, 0x36, 0x41, 0x00} // 7b {
,{0x00, 0x00, 0xff, 0x00, 0x00} // 7c |
,{0x00, 0x41, 0x36, 0x08, 0x00} // 7d }
,{0x10, 0x08, 0x08, 0x10, 0x08} // 7e ←
,{0x00, 0x06, 0x09, 0x09, 0x06} // 7f →
};
/////////////////// 符号定义 ////////////////////////
static const byte SYMBOL[][8] =
{
{0x00,0x00,0x3E,0x1C,0x08,0x00,0x00,0x00},//
{0x00,0x00,0x3E,0x3E,0x00,0x3E,0x3E,0x00},//
{0x00,0x00,0x3E,0x3E,0x3E,0x3E,0x3E,0x00},//
{0x00,0x00,0x08,0x1C,0x3E,0x00,0x00,0x00},//
{0x00,0x00,0x3E,0x08,0x1C,0x3E,0x00,0x00},//
{0x00,0x00,0x3E,0x1C,0x08,0x3E,0x00,0x00},//
{0x00,0x00,0x08,0x1C,0x3E,0x1C,0x08,0x00},//
{0x00,0x18,0x20,0x6E,0x6E,0x20,0x18,0x00},//
{0x00,0x00,0x08,0x12,0x7A,0x0E,0x00,0x00},//
{0x00,0x04,0x0A,0x2A,0x54,0x50,0x20,0x00},//
{0x00,0x00,0x02,0x06,0x0E,0x06,0x02,0x00},//
{0x00,0x00,0x40,0x60,0xE0,0x60,0x40,0x00},//
{0x00,0xC3,0x42,0x42,0x42,0xC3,0x00,0x00},//
{0x00,0x00,0x00,0x00,0x0E,0x0A,0x0E,0x00},
};
////////////////////全局变量定义//////////////
byte menucount;
boolean keystatus;
byte frequencecount;
////////////////////// 传感器初始化 //////////
void alcoholInti()
{
  pinMode(ALCOHOL_AINPUT,INPUT);
  pinMode(ALCOHOL_DINPUT,INPUT);
}
void combustInti()
{
  pinMode(COMBUST_AINPUT,INPUT);
  pinMode(COMBUST_DINPUT,INPUT);
}
void noiseInti()
{
  pinMode(MIC_AINPUT,INPUT);
  pinMode(MIC_DINPUT,INPUT);
}
void colorInti()
{
  pinMode(COLOR_S0 ,OUTPUT);
  pinMode(COLOR_S1 ,OUTPUT);
  pinMode(COLOR_S2 ,OUTPUT);
  pinMode(COLOR_S3 ,OUTPUT);
  pinMode(COLOR_OUT,INPUT);
  pinMode(COLOR_LED,OUTPUT);
}
/////////////////// 中断函数,频率计数  //////////////////////
void frequence()
{
  frequencecount ++;
}
/////////////////  酒精数据读取 ////////////////////////////////////////
byte alcoholRead()
{
  int temp;
  byte alcohol;
  temp = analogRead(ALCOHOL_AINPUT);
  alcohol = map(temp,0,1023,0,255) ; //
  //delay(5);
  return alcohol;
}
////////////////  可燃气体数据读取 /////////////////////////////////////
byte combustibleRead()
{
  int temp;
  byte combustible;
  temp = analogRead(COMBUST_AINPUT);
  combustible = map(temp,0,1023,0,255);
  //delay(5);
  return combustible;
}
//////////////////  噪音数据读取 ////////////////////////////////////////
byte noiseRead()
{
  int temp;
  byte nosie;
  temp = analogRead(MIC_AINPUT);
  nosie = map(temp,0,1023,0,255);
  //delay(5);
  return nosie;
}
//////////////////////////////////颜色读取函数/////////////////////////////
byte colorRead()
{

}
////////////////////////////////////白平衡设置函数///////////////////////////
boolean color_WB_set()
{

}
///////////////////////////////////温湿度读取函数/////////////////////////////
byte tempe_humiRead(byte *re_ar)
{
  byte tempvalue[5];
  byte cnt = 7;
  byte idx = 0;
  for (int i=0; i< 5; i++) tempvalue = 0;
  pinMode(TEMPE_HUMI_IN, OUTPUT);
  digitalWrite(TEMPE_HUMI_IN, LOW);
  delay(18);
  digitalWrite(TEMPE_HUMI_IN, HIGH);
  delayMicroseconds(40);
  pinMode(TEMPE_HUMI_IN, INPUT);        
  unsigned int cyclecount = 10000;
  while(digitalRead(TEMPE_HUMI_IN) == LOW)
  if (cyclecount-- == 0) return -1;
  cyclecount = 10000;
  while(digitalRead(TEMPE_HUMI_IN) == HIGH)
  if (cyclecount-- == 0) return -1;
  for (int i=0; i<40; i++)
  {               
    cyclecount = 10000;
    while(digitalRead(TEMPE_HUMI_IN) == LOW)
    if (cyclecount-- == 0) return -1;
    unsigned long t = micros();
    cyclecount = 10000;
    while(digitalRead(TEMPE_HUMI_IN) == HIGH)
    if (cyclecount-- == 0) return -1;
        
    if ((micros() - t) > 40) tempvalue[idx] |= (1 << cnt);
    if (cnt == 0)   // 位计数
    {
      cnt = 7;    // 数据传输从高到低
      idx++;      // 字节计数
    }
    else cnt--;
  }
  //  tempvalue[1] 和tempvalue[3] 总是为零
  re_ar[0] = tempvalue[0];
  re_ar[1] = tempvalue[2];
  uint8_t sum = tempvalue[0] + tempvalue[2];  
  if (tempvalue[4] != sum) return -2;
  return 1;
}

/////////////////////写寄存器/////////////////////////////////////////
void registerSet(byte deviceAddress, byte registerAddress, byte registerValue)  
{
  Wire.beginTransmission(deviceAddress);
  Wire.write(registerAddress);
  Wire.write(registerValue);
  Wire.endTransmission();
}

//////////////////// 读寄存器 ////////////////////////////////////////
void registerRead(byte deviceAddress, byte registerAddress, byte *registerValue,byte n)
{
  byte temp[n];
  Wire.beginTransmission(deviceAddress);
  Wire.write(registerAddress);
  Wire.endTransmission();
  Wire.requestFrom(deviceAddress,n);
  if(Wire.available() <= n);;
  {
    for( byte i = 0 ; i < n ; i++)  
    registerValue = Wire.read();
  }

  Wire.endTransmission();
}

//////////////////////获取时间 返回时间存储在 timevalue数组中 ////////////
void timeGet(byte deviceAddress, byte registerAddress,byte *timevalue)
{
  byte rtc[7];  
  registerRead(deviceAddress,registerAddress,rtc,7);
  timevalue[6] = ((rtc[6] & 0xF0 ) >> 4 ) + (rtc[6] & 0x0F ); //year   
  timevalue[5] = ((rtc[5] & 0x10 ) >> 4 ) + (rtc[5] & 0x0F ); //month
  timevalue[4] = ((rtc[4] & 0x30 ) >> 4 ) + (rtc[4] & 0x0F ); //date
  timevalue[3] = rtc[3] & 0x07;               //week
  timevalue[2] = ((rtc[2] & 0x30 ) >> 4 ) + (rtc[2] & 0x0F ); //hour
  timevalue[1] = ((rtc[1] & 0x70 ) >> 4 ) + (rtc[1] & 0x0F ); //minitue
  timevalue[0] = ((rtc[0] & 0x70 ) >> 4 ) + (rtc[0] & 0x0F ); //second  
}

//////////////////// 时间设置,按照年月日,时分秒,星期 输入////////////////////
byte timeSet(byte yr,byte mh,byte da,byte hr,byte mt,byte se,byte we)
{
  /////////确保时间日期输入不超范围////////////////////////////////////////////////////////
  if ( yr < 0 || yr > 99 )  return 99;
  if ( mh < 0 || mh > 12 )  return 12;
  if ( da < 0 || da > 31 )  return 31;
  if ( hr < 0 || hr > 23 )  return 24;
  if ( mt < 0 || mt > 59 )  return 60;
  if ( se < 0 || se > 59 )  return 60;
  if ( we < 0 || we > 7 )   return 7;
  else return -1;
  //////////////////// 时间转化为BCD格式 (寄存器格式)////////////////
  yr = (( yr / 10 ) << 4 ) + ( yr % 10 );
  mh = (( mh / 10 ) << 4 ) + ( mh % 10 );
  da = (( da / 10 ) << 4 ) + ( da % 10 );
  hr = (( hr / 10 ) << 4 ) + ( hr % 10 );
  hr = hr | DS1307_HOUR_24 ;
  mt = (( mt / 10 ) << 4 ) + ( mt % 10 );
  se = (( se / 10 ) << 4 ) + ( se % 10 );
  we = we ;
  ///////////////////写寄存器数据,设置时间初始值/////////////////////////////////
  registerSet(DS1307_ADDRESS,DS1307_STOP_START,DS1307_STOP);  //时钟计数器停止
  registerSet(DS1307_ADDRESS,DS1307_REG_SECOND,se);           //设置秒
  registerSet(DS1307_ADDRESS,DS1307_REG_MINITUE,mt);          //设置分钟
  registerSet(DS1307_ADDRESS,DS1307_REG_HOURS,hr);            //设置时
  registerSet(DS1307_ADDRESS,DS1307_REG_WEEK,we);             //设置星期
  registerSet(DS1307_ADDRESS,DS1307_REG_DATE,da);             //设置日
  registerSet(DS1307_ADDRESS,DS1307_REG_MONTH,mh);            //设置月
  registerSet(DS1307_ADDRESS,DS1307_REG_YEAR,yr);             //设置年
  registerSet(DS1307_ADDRESS,DS1307_REG_CTRL,0x13);           //输出控制 (32hz)
  registerSet(DS1307_ADDRESS,DS1307_STOP_START,DS1307_START); //时钟计数器开始
  return 1;
}
void outputCtrl(byte Hz)
{
  byte ctrl_value;

  switch (Hz)
  {
    case 0 :
        ctrl_value = 0x00;
        break;
    case 1 :
        ctrl_value = 0x10;
        break;
    case 4 :
        ctrl_value = 0x11;
        break;
    case 8 :
        ctrl_value = 0x12;
        break;
    case 32:
        ctrl_value = 0x13;
        break;
    default :
        ctrl_value = 0x80;
        break;
  }

  registerSet(DS1307_ADDRESS,DS1307_REG_CTRL,ctrl_value);     //输出控制
}

////////////////// 将星期数字转化为字符串 ///////////////////////
char* weektoString(byte week)
{
  char *weekstring[4];
  switch(week)
  {
    case 1 :
        weekstring[4] = "Mon " ;
        return weekstring[4];
        break;                          
    case 2 :
        weekstring[4] = "Thue" ;
        return weekstring[4];
        break;
    case 3 :
         weekstring[4] = "Wed " ;
         return weekstring[4];
         break;                          
    case 4 :
        weekstring[4] = "Turs" ;
        return weekstring[4];
        break;                           
    case 5 :
        weekstring[4] = "Fri " ;
        return weekstring[4];
        break;
    case 6 :
        weekstring[4] = "Sat " ;
        return weekstring[4];
        break;
    case 7 :
        weekstring[4] = "Sun " ;
        return weekstring[4];
        break;
    default :
        weekstring[4] = "Err ";
        return weekstring[4];
        break;
  }
  
}



//////////////清屏////////////////////////////
void lcdClear(void)
{
  for (int index = 0; index < LCD_X * LCD_Y / 8; index++)
  {
    lcdWrite(LCD_D, 0x00);
  }
}
//////////////////// 初始化屏幕 //////////////
void lcdInitialise(void)
{
  pinMode(PIN_SCE,   OUTPUT);
  pinMode(PIN_RESET, OUTPUT);
  pinMode(PIN_DC,    OUTPUT);
  pinMode(PIN_SDIN,  OUTPUT);
  pinMode(PIN_SCLK,  OUTPUT);
  pinMode(BACKLIGHT, OUTPUT);

  digitalWrite(PIN_RESET, LOW);
  digitalWrite(PIN_RESET, HIGH);
  analogWrite( BACKLIGHT,150);

  lcdWrite(LCD_CMD, 0x21);  // LCD 扩展命令模式
  lcdWrite(LCD_CMD, 0xBf);  // LCD 偏置电压设定
  lcdWrite(LCD_CMD, 0x04);  // LCD 温度补偿设定
  lcdWrite(LCD_CMD, 0x13);  // LCD 对比度  设定
  lcdWrite(LCD_CMD, 0x0C);  // LCD 增量模式
  lcdWrite(LCD_C, 0x20);
  lcdWrite(LCD_C, 0x0C);
}

///////////// 英文字符串显示 ///////////////
void lcdString(char *characters)
{
  while (*characters)
  {
    lcdCharacter(*characters++);
  }
}

/////////////// 反色显示 //////////////////////
void lcdStringB(char *characters)
{
  while (*characters)
  {
    lcdCharacterB(*characters++);
  }
}
/////////////////// 上划线 ////////////////////
void lcdStringS(char *characters)
{
  while (*characters)
  {
    lcdCharacterS(*characters++);
  }
}
////////////////// 下划线 ////////////////////////
void lcdStringU(char *characters)
{
  while (*characters)
  {
    lcdCharacterU(*characters++);
  }
}
/////////////////显示英文字符//////////////////////
void lcdCharacter(char character)
{
  lcdWrite(LCD_D, 0x00);
  for (byte index = 0; index < 5; index++)
  {
    lcdWrite(LCD_D, ASCII[character - 0x20][index]);
  }
  //lcdWrite(LCD_D, 0x00);
}
//////////////////////////////////////////////////
void lcdCharacterB(char character)
{
  byte temp;
  lcdWrite(LCD_D, 0xFF);
  for (byte index = 0; index < 5; index++)
  {
    temp = ASCII[character - 0x20][index];
    lcdWrite(LCD_D, ~temp);
  }
  //lcdWrite(LCD_D, 0x00);
}
/////////////////////////////////////////////////////
void lcdCharacterS(char character)
{
  byte temp;
  lcdWrite(LCD_D, 0x01);
  for (byte index = 0; index < 5; index++)
  {
    temp = ASCII[character - 0x20][index];
    temp = temp | 0x01;
    lcdWrite(LCD_D, temp);
  }
  //lcdWrite(LCD_D, 0x00);
}
///////////////////////////////////////////////////
void lcdCharacterU(char character)
{
  byte temp;
  lcdWrite(LCD_D, 0x80);
  for (byte index = 0; index < 5; index++)
  {
    temp = ASCII[character - 0x20][index];
    temp = temp | 0x80;
    lcdWrite(LCD_D, temp);
  }
  //lcdWrite(LCD_D, 0x00);
}
///////////////////////////////////////////
void lcdSymbol(byte symbol)
{
  lcdWrite(LCD_D, 0x00);
  for (byte index = 0; index < 8; index++)
  {
    lcdWrite(LCD_D, SYMBOL[symbol][index]);
  }
  //lcdWrite(LCD_D, 0x00);
}
//////////////////////////////////////////////////
void lcdSymbolB(byte symbol)
{
  byte temp;
  lcdWrite(LCD_D, 0xFF);
  for (byte index = 0; index < 8; index++)
  {
    temp = SYMBOL[symbol][index];
    lcdWrite(LCD_D, ~temp);
  }
  //lcdWrite(LCD_D, 0x00);
}
//////////////// 屏幕写操作  //////////////
void lcdWrite(byte dc, byte data)
{
  digitalWrite(PIN_DC, dc);
  digitalWrite(PIN_SCE, LOW);
  shiftOut(PIN_SDIN, PIN_SCLK, MSBFIRST, data);
  digitalWrite(PIN_SCE, HIGH);
}
//////////////字符位置设定////////////////
void gotoXY(byte x, byte y)
{
  lcdWrite( 0, 0x80 | x);  // 列
  lcdWrite( 0, 0x40 | y);  // 行
}
//////////////字符串滚动///////////////
void stringScroll(String message)
{
  byte scrollPosition = -10;
  for (byte i = scrollPosition; i < scrollPosition + 11; i++)
  {
    if ((i >= message.length()) || (i < 0))
    {
      lcdCharacter(' ');
    }
    else
    {
      lcdCharacter(message.charAt(i));
    }
  }
  scrollPosition++;
  if ((scrollPosition >= message.length()) && (scrollPosition > 0))
  {
    scrollPosition = -10;
  }
}
///////////////////////// 键盘初始化 /////////////////////////////
void keyInti()
{
  pinMode(SCANROW_1,OUTPUT);
  pinMode(SCANROW_2,OUTPUT);
  pinMode(SCANROW_3,OUTPUT);
  pinMode(READCOL_1,INPUT);
  pinMode(READCOL_2,INPUT);
  pinMode(READCOL_3,INPUT);
  pinMode(READCOL_4,INPUT);
}
/////////////////////  按键读取  /////////////////////////
char keyRead()
{
  byte scanarr[3],readarr[4];
  byte i,j;
  byte keytemp;
  char keyvalue;
  boolean flag;

  scanarr[0] = SCANROW_1;
  scanarr[1] = SCANROW_2;
  scanarr[2] = SCANROW_3;
  readarr[0] = READCOL_1;
  readarr[1] = READCOL_2;
  readarr[2] = READCOL_3;
  readarr[3] = READCOL_4;
  
  flag = false;
  keyvalue = 0xFF;

  for ( i = 0 ; i < 3 ; i++ )
  {
    digitalWrite(scanarr,HIGH);
    delay(2);
    for ( j = 0 ; j < 4 ; j++ )
    {
      //if ( digitalRead(readarr[j]) == LOW )
      {
        //delay(5);

        if ( digitalRead(readarr[j]) == HIGH )
        {
          keytemp = 0x00;
          bitWrite( keytemp , 6-i , 1 ) ;
          //delay(2);
          bitWrite( keytemp , 3-j , 1 ) ;
          //delay(2);
          flag = true;  
          //Serial.println(keytemp,HEX);         
          break;
        }   
      }                       
    }
    digitalWrite(scanarr,LOW);
    delay(2);
    if ( digitalRead(SHIFTKEYS) )
    {
      delay(5);
      bitWrite( keytemp , 7 , 1 ) ;
    }

    if ( flag) break;
  }      
  switch( keytemp)
  {
    case 0x00 : keyvalue = 'K' ; break;
    case 0x11 : keyvalue = 'O' ; break;
    case 0x12 : keyvalue = 'F' ; break;
    case 0x14 : keyvalue = 'N' ; break;
    case 0x18 : keyvalue = 'P' ; break;
    case 0x21 : keyvalue = 'U' ; break;
    case 0x22 : keyvalue = 'M' ; break;
    case 0x24 : keyvalue = 'D' ; break;
    case 0x28 : keyvalue = 'T' ; break;
    case 0x41 : keyvalue = 'E' ; break;
    case 0x42 : keyvalue = 'B' ; break;
    case 0x44 : keyvalue = 'C' ; break;
    case 0x48 : keyvalue = 'R' ; break;
    default   : keyvalue = 'Q' ; break;
  }

  return keyvalue;  
}
///////////////////// 菜单函数 ////////////////////////////
byte screen_play()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("PLAY");

  gotoXY(0,1);
  lcdSymbolB(0);

  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Mode");
  gotoXY(75,1);
  lcdSymbol(0);

  gotoXY(0,2);
  lcdSymbol(7);

  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Reverb");
  gotoXY(75,2);
  lcdSymbol(0);

  gotoXY(0,3);
  lcdSymbol(8);

  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Equalizer");
  gotoXY(75,3);
  lcdSymbol(0);

  gotoXY(0,4);
  lcdSymbol(9);

  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");

  return 1;

}
byte screen_play_mode()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("PLAY");

  gotoXY(0,1);
  lcdSymbolB(0);

  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdStringB("Mode");
  gotoXY(75,1);
  lcdSymbolB(0);

  gotoXY(0,2);
  lcdSymbol(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Reverb");
  gotoXY(75,2);
  lcdSymbol(0);

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Equalizer");
  gotoXY(75,3);
  lcdSymbol(0);

  gotoXY(0,4);
  lcdSymbol(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 11;

}
byte screen_play_mode_allrepeat()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Mode");

  gotoXY(0,1);
  lcdStringB("All repeat");
  
  gotoXY(0,2);
  lcdString("Repeat");

  gotoXY(0,3);
  lcdString("Random");

  gotoXY(8,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 111;

}
byte screen_play_mode_repeat()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Mode");

  gotoXY(0,1);
  lcdString("All repeat");
  
  gotoXY(0,2);
  lcdStringB("Repeat");

  gotoXY(0,3);
  lcdString("Random");

  gotoXY(8,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 112;

}
byte screen_play_mode_random()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Mode");

  gotoXY(0,1);
  lcdString("All repeat");
  
  gotoXY(0,2);
  lcdString("Repeat");

  gotoXY(0,3);
  lcdStringB("Random");

  gotoXY(8,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 113;

}
byte screen_play_reverb()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("PLAY");

  gotoXY(0,1);
  lcdSymbolB(0);

  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Mode");
  gotoXY(75,1);
  lcdSymbol(0);

  gotoXY(0,2);
  lcdSymbol(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdStringB("Reverb");
  gotoXY(75,2);
  lcdSymbolB(0);

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Equalizer");
  gotoXY(75,3);
  lcdSymbol(0);

  gotoXY(0,4);
  lcdSymbol(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 12;

}
byte screen_play_reverb_none()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Reverb");

  gotoXY(0,1);
  lcdStringB("None");
  
  gotoXY(0,2);
  lcdString("Studio");

  gotoXY(0,3);
  lcdString("Club");

  gotoXY(0,4);
  lcdString("Hall");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 121;

}
byte screen_play_reverb_studio()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Reverb");

  gotoXY(0,1);
  lcdString("None");
  
  gotoXY(0,2);
  lcdStringB("Studio");

  gotoXY(0,3);
  lcdString("Club");

  gotoXY(0,4);
  lcdString("Hall");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 122;

}
byte screen_play_reverb_club()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Reverb");

  gotoXY(0,1);
  lcdString("None");
  
  gotoXY(0,2);
  lcdString("Studio");

  gotoXY(0,3);
  lcdStringB("Club");

  gotoXY(0,4);
  lcdString("Hall");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 123;

}
byte screen_play_reverb_hall()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Reverb");

  gotoXY(0,1);
  lcdString("None");
  
  gotoXY(0,2);
  lcdString("Studio");

  gotoXY(0,3);
  lcdString("Club");

  gotoXY(0,4);
  lcdStringB("Hall");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 124;

}
byte screen_play_equa()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("PLAY");

  gotoXY(0,1);
  lcdSymbolB(0);

  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Mode");
  gotoXY(75,1);
  lcdSymbol(0);

  gotoXY(0,2);
  lcdSymbol(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Reverb");
  gotoXY(75,2);
  lcdSymbol(0);

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdStringB("Equalizer");
  gotoXY(75,3);
  lcdSymbolB(0);

  gotoXY(0,4);
  lcdSymbol(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 13;

}
byte screen_play_equa_none()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Equalizer");

  gotoXY(0,1);
  lcdStringB("None");
  
  gotoXY(0,2);
  lcdString("Classical");

  gotoXY(0,3);
  lcdString("Jazz");

  gotoXY(0,4);
  lcdString("Rock");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 131;

}
byte screen_play_equa_classical()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Equalizer");

  gotoXY(0,1);
  lcdString("None");
  
  gotoXY(0,2);
  lcdStringB("Classical");

  gotoXY(0,3);
  lcdString("Jazz");

  gotoXY(8,4);
  lcdString("Rock");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 132;

}
byte screen_play_equa_jazz()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Equalizer");

  gotoXY(0,1);
  lcdString("None");
  
  gotoXY(0,2);
  lcdString("Classical");

  gotoXY(0,3);
  lcdStringB("Jazz");

  gotoXY(0,4);
  lcdString("Rock");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 133;

}
byte screen_play_equa_rock()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("PLAY/Equalizer");

  gotoXY(0,1);
  lcdString("None");
  
  gotoXY(0,2);
  lcdString("Classical");

  gotoXY(0,3);
  lcdString("Jazz");

  gotoXY(0,4);
  lcdStringB("Rock");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 134;

}
byte screen_recorder()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("RECORDER");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Mode");
  gotoXY(75,1);
  lcdSymbol(0);

  gotoXY(0,2);
  lcdSymbolB(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Mic");
  gotoXY(75,2);
  lcdSymbol(0);

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Display");
  //gotoXY(75,3);
  //lcdSymbol(0);

  gotoXY(0,4);
  lcdSymbol(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 2;
}
byte screen_recorder_mode()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("RECORDER");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdStringB("Mode");
  gotoXY(75,1);
  lcdSymbolB(0);

  gotoXY(0,2);
  lcdSymbolB(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Mic");
  gotoXY(75,2);
  lcdSymbol(0);

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Display");
  //gotoXY(75,3);
  //lcdSymbol(0);

  gotoXY(0,4);
  lcdSymbol(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 21;
}
byte screen_recorder_mode_mp3()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode");

  gotoXY(0,1);
  lcdStringB("MP3");
  //gotoXY(75,1);
  //lcdSymbol(0);

  gotoXY(0,2);
  lcdString("WMA");
  //gotoXY(75,2);
  //lcdSymbol(0);

  gotoXY(0,3);
  lcdString("PCM");
  //gotoXY(75,3);
  //lcdSymbol(0);

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 211;

}
void screen_recorder_mode_mp3_320()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode/MP3");

  gotoXY(0,1);
  lcdStringB("320kbps");

  gotoXY(0,2);
  lcdString("256kbps");

  gotoXY(0,3);
  lcdString("128kbps");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");

}
void screen_recorder_mode_mp3_256()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode/MP3");

  gotoXY(0,1);
  lcdString("320kbps");

  gotoXY(0,2);
  lcdStringB("256kbps");

  gotoXY(0,3);
  lcdString("128kbps");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");

}
void screen_recorder_mode_mp3_128()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode/MP3");

  gotoXY(0,1);
  lcdString("320kbps");

  gotoXY(0,2);
  lcdString("256kbps");

  gotoXY(0,3);
  lcdStringB("128kbps");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");

}
byte screen_recorder_mode_wma()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode");

  gotoXY(0,1);
  lcdString("MP3");
  //gotoXY(75,1);
  //lcdSymbol(0);

  gotoXY(0,2);
  lcdStringB("WMA");
  //gotoXY(75,2);
  //lcdSymbol(0);

  gotoXY(0,3);
  lcdString("PCM");
  //gotoXY(75,3);
  //lcdSymbol(0);

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 212;

}
void screen_recorder_mode_wma_160()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode/WMA");

  gotoXY(0,1);
  lcdStringB("160kbps");

  gotoXY(0,2);
  lcdString("128kbps");

  gotoXY(0,3);
  lcdString("64kbps");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");

}
void screen_recorder_mode_wma_128()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode/WMA");

  gotoXY(0,1);
  lcdString("160kbps");

  gotoXY(0,2);
  lcdStringB("128kbps");

  gotoXY(0,3);
  lcdString("64kbps");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");

}
void screen_recorder_mode_wma_64()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode/WMA");

  gotoXY(0,1);
  lcdString("160kbps");

  gotoXY(0,2);
  lcdString("128kbps");

  gotoXY(0,3);
  lcdStringB("64kbps");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");

}
byte screen_recorder_mode_pcm()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode");

  gotoXY(0,1);
  lcdString("MP3");
  //gotoXY(75,1);
  //lcdSymbol(0);

  gotoXY(0,2);
  lcdString("WMA");
  //gotoXY(75,2);
  //lcdSymbol(0);

  gotoXY(0,3);
  lcdStringB("PCM");
  //gotoXY(75,3);
  //lcdSymbol(0);

  gotoXY(8,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 213;

}
void screen_recorder_mode_pcm_high()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode/PCM");

  gotoXY(0,1);
  lcdStringB("HIGH");

  gotoXY(0,2);
  lcdString("LOW");

  gotoXY(0,3);
  lcdString("");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");

}
void screen_recorder_mode_pcm_low()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mode/PCM");

  gotoXY(0,1);
  lcdString("HIGH");

  gotoXY(0,2);
  lcdStringB("LOW");

  gotoXY(0,3);
  lcdString("");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");

}
byte screen_recorder_mic()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("RECORDER");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Mode");
  gotoXY(75,1);
  lcdSymbol(0);

  gotoXY(0,2);
  lcdSymbolB(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdStringB("Mic");
  gotoXY(75,2);
  lcdSymbolB(0);

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Display");
  //gotoXY(75,3);
  //lcdSymbol(0);

  gotoXY(0,4);
  lcdSymbol(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 22;
}
byte screen_recorder_mic_buildin()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mic");

  gotoXY(0,1);
  lcdStringB("BuildIn");

  gotoXY(0,2);
  lcdString("External");

  gotoXY(0,3);
  lcdString("");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 221;

}
byte screen_recorder_mic_external()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("RECORDER/Mic");

  gotoXY(0,1);
  lcdString("BuildIn");

  gotoXY(0,2);
  lcdStringB("External");

  gotoXY(0,3);
  lcdString("");

  gotoXY(0,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 222;

}
byte screen_recorder_display()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("RECORDER");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Mode");
  gotoXY(75,1);
  lcdSymbol(0);

  gotoXY(0,2);
  lcdSymbolB(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Mic");
  gotoXY(75,2);
  lcdSymbol(0);

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdStringB("Display");
  //gotoXY(75,3);
  //lcdSymbolB(0);

  gotoXY(0,4);
  lcdSymbol(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 23;
}
byte screen_tool()
{

  for ( byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("TOOLS");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("alcohol");

  gotoXY(0,2);
  lcdSymbol(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Combust");

  gotoXY(0,3);
  lcdSymbolB(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Color Test");
  

  gotoXY(0,4);
  lcdSymbol(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("Noise");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 3;
}
byte screen_tools_alcohol()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("TOOLS/alcohol");

  gotoXY(0,1);
  lcdStringB("alcohol");

  gotoXY(0,2);
  lcdString("Combust");

  gotoXY(0,3);
  lcdString("Color Test");

  gotoXY(0,4);
  lcdString("Noise");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 31;

}
byte screen_tools_combust()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("TOOLS/COMBUST");

  gotoXY(0,1);
  lcdString("alcohol");

  gotoXY(0,2);
  lcdStringB("Combust");

  gotoXY(0,3);
  lcdString("Color Test");

  gotoXY(0,4);
  lcdString("Noise");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 32;

}
byte screen_tools_color()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("TOOLS/COLOR");

  gotoXY(0,1);
  lcdString("alcohol");

  gotoXY(0,2);
  lcdString("Combust");

  gotoXY(0,3);
  lcdStringB("Color Test");

  gotoXY(0,4);
  lcdString("Noise");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 33;

}
byte screen_tools_noise()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(0,0);
  lcdStringU("TOOLS/Noise");

  gotoXY(0,1);
  lcdString("alcohol");

  gotoXY(0,2);
  lcdString("Combust");

  gotoXY(0,3);
  lcdString("Color Test");
  
  gotoXY(0,4);
  lcdStringB("Noise");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 34;

}
byte screen_setup()
{
  for ( byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("SETUP");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Date & Time");

  gotoXY(0,2);
  lcdSymbol(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Screen");

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Power");

  gotoXY(0,4);
  lcdSymbolB(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("Version");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 4;
}
byte screen_setup_datetime()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("SETUP");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdStringB("Date & Time");

  gotoXY(0,2);
  lcdSymbol(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Screen");


  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Power");

  gotoXY(0,4);
  lcdSymbolB(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("Version");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 41;
}

byte screen_setup_screen()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("SETUP");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Date & Time");

  gotoXY(0,2);
  lcdSymbol(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdStringB("Screen");

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Power");

  gotoXY(0,4);
  lcdSymbolB(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("Version");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 42;
}
byte screen_setup_power()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("SETUP");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Date & Time");

  gotoXY(0,2);
  lcdSymbol(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Screen");

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdStringB("Power");

  gotoXY(0,4);
  lcdSymbolB(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdString("Version");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 43;
}
byte screen_setup_version()
{
  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0x80);
  }
  gotoXY(2,0);
  lcdStringU("SETUP");

  gotoXY(0,1);
  lcdSymbol(0);
  gotoXY(8,1);
  lcdWrite(1,0xFF);

  gotoXY(10,1);
  lcdString("Date & Time");

  gotoXY(0,2);
  lcdSymbol(7);
  gotoXY(8,2);
  lcdWrite(1,0xFF);

  gotoXY(10,2);
  lcdString("Screen");

  gotoXY(0,3);
  lcdSymbol(8);
  gotoXY(8,3);
  lcdWrite(1,0xFF);

  gotoXY(10,3);
  lcdString("Power");

  gotoXY(0,4);
  lcdSymbolB(9);
  gotoXY(8,4);
  lcdWrite(1,0xFF);

  gotoXY(10,4);
  lcdStringB("Version");

  for (byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,5);
    lcdWrite(1,0xFF);
  }
  gotoXY(1,5);
  lcdStringB(" EXIT ");
  gotoXY(60,5);
  lcdStringB(" OK ");
  return 44;
}

void alcohol_Dis(byte v)
{
  //
  char str[3];
  sprintf(str, "%d", v);

  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 0 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 1 , 0 );
  lcdStringB("ALCOHIL TEST");
  gotoXY( 1 , 2 );
  lcdString("Alcohil: ");
  lcdString(str);//
  lcdCharacter('%');
  
  if ( digitalRead( ALCOHOL_DINPUT))
  {
    gotoXY( 1 , 4 );
    lcdString(" WARNING... ");
   
    gotoXY( 1 , 4 );
    lcdString("            ");
   
  }
  else
  {
    lcdString(" ");
  }
  
  for ( int i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( 0 , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( " EXIT ");
}
void combust_Dis(byte v)
{
  
  char str[3];
  sprintf(str, "%d", v);
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 0 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 1 , 0 );
  lcdStringB("COMBUST TEST");
  gotoXY( 1 , 2 );
  lcdString("Combust: ");
  lcdString(str);//
  lcdCharacter('%');
  
  if ( digitalRead(COMBUST_DINPUT))
  {
    gotoXY( 1 , 4 );
    lcdString(" WARNING... ");
   
    gotoXY( 1 , 4 );
    lcdString("            ");   
  }
  else
  {
    lcdString(" ");
  }
  
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( " EXIT ");
}
void noise_Dis(byte v )
{
  char str[3];
  sprintf(str, "%d", v);
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 0 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 1 , 0 );
  lcdStringB("NOISE TEST");
  gotoXY( 1 , 2 );
  lcdString("Noise  ");
  lcdString(str);//
  lcdString("dB");
  
  if ( digitalRead(MIC_DINPUT))
  {
    gotoXY( 1 , 4 );
    lcdString(" WARNING... ");
   
    gotoXY( 1 , 4 );
    lcdString("            ");
   
  }
  else
  {
    lcdString(" ");
  }
  
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( " EXIT ");
}
void color_Dis( byte r,byte g,byte b)
{
  char str[3];
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 0 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 1 , 0 );
  lcdStringB("COLOR TEST");
  gotoXY( 1 , 2 );
  lcdString("R : ");
  sprintf(str, "%d", r);
  lcdString(str);//
  gotoXY( 1 , 3 );
  lcdString("G : ");
  sprintf(str, "%d", g);
  lcdString(str);//
  gotoXY( 1 , 4 );
  lcdString("B : ");
  sprintf(str, "%d", b);
  lcdString(str);//
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( " EXIT ");
}
boolean color_wb_Dis()
{
  char str[3];
  byte r,g,b;
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 0 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 1 , 0 );
  lcdStringB("WB SET");
  gotoXY( 1 , 2 );
  lcdString("R : ");
  sprintf(str, "%d", r);
  lcdString(str);//
  gotoXY( 1 , 3 );
  lcdString("G : ");
  sprintf(str, "%d", g);
  lcdString(str);//
  gotoXY( 1 , 4 );
  sprintf(str, "%d", b);
  lcdString(str);
  lcdString(" 200 ");//
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( " CONTINUE ");
  //if (v != 0 ) return 1;
  //return 0;
}
void datetime_setup(byte k,byte v)
{
  char str[2];
  sprintf(str, "%02d", v);
  switch(k)
  {
    case 1  :
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,0);
          lcdWrite(1,0x00);
        }
        
        gotoXY(12,0);
        lcdSymbol(11);
        gotoXY(10,1);   
        lcdString(str);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,2);
          lcdWrite(1,0x00);
        }      
        gotoXY(12,2);
        lcdSymbol(10);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,4);
          lcdWrite(1,0x00);
        }
        break;
    case 2  :
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,0);
          lcdWrite(1,0x00);
        }
        
        gotoXY(27,0);
        lcdSymbol(11);
        gotoXY(25,1);   
        lcdString(str);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,2);
          lcdWrite(1,0x00);
        }      
        gotoXY(27,2);
        lcdSymbol(10);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,4);
          lcdWrite(1,0x00);
        }
        break;
    case 3  :
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,0);
          lcdWrite(1,0x00);
        }
        
        gotoXY(42,0);
        lcdSymbol(11);
        gotoXY(40,1);   
        lcdString(str);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,2);
          lcdWrite(1,0x00);
        }      
        gotoXY(42,2);
        lcdSymbol(10);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,4);
          lcdWrite(1,0x00);
        }
        break;
    case 4  :
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,0);
          lcdWrite(1,0x00);
        }
        
        gotoXY(60,0);
        lcdSymbol(11);
        gotoXY(55,1);   
        lcdString(weektoString(v-1));
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,2);
          lcdWrite(1,0x00);
        }      
        gotoXY(60,2);
        lcdSymbol(10);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,4);
          lcdWrite(1,0x00);
        }
        break;
    case 5  :
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,0);
          lcdWrite(1,0x00);
        }      
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,2);
          lcdWrite(1,0x00);
        }
        gotoXY(12,2);
        lcdSymbol(11);
        gotoXY(10,3);   
        lcdString(str);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,4);
          lcdWrite(1,0x00);
        }
        gotoXY(12,4);
        lcdSymbol(10);
        break;
    case 6  :
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,0);
          lcdWrite(1,0x00);
        }      
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,2);
          lcdWrite(1,0x00);
        }
        gotoXY(27,2);
        lcdSymbol(11);
        gotoXY(25,3);   
        lcdString(str);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,4);
          lcdWrite(1,0x00);
        }
        gotoXY(27,4);
        lcdSymbol(10);
        break;
    case 7  :
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,0);
          lcdWrite(1,0x00);
        }      
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,2);
          lcdWrite(1,0x00);
        }
        gotoXY(42,2);
        lcdSymbol(11);
        gotoXY(40,3);   
        lcdString(str);
        for( int i = 0 ; i < 84 ; i ++)
        {
          gotoXY(i,4);
          lcdWrite(1,0x00);
        }
        gotoXY(42,4);
        lcdSymbol(10);
        break;
    default : break;
   
  }

  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( " EXIT ");
  gotoXY( 50 , 5 );
  lcdStringB( " SAVE ");
  

}
void datetime_setup_inti(byte *v)
{
  char str[2];
  sprintf(str, "%02d", v);
  
  gotoXY( 0 , 1 );
  lcdString( "20");
  sprintf(str, "%02d", v[6]);
  lcdString( str );
  lcdCharacter('.');
  sprintf(str,"%02d", v[5]);
  lcdString(str );
  lcdCharacter('.');
  sprintf(str, "%02d", v[4]);
  lcdString( str );
  gotoXY(60,1);
  sprintf(str, "%02d", v[3]);
  lcdString( str );
  gotoXY( 5 , 3 );
  sprintf(str, "%02d", v[2]);
  lcdString( str );
  lcdCharacter(':');
  sprintf(str, "%02d", v[1]);
  lcdString(str);
  lcdCharacter(':');
  sprintf(str, "%02d", v[0]);
  lcdString(str );

  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( " EXIT ");
  gotoXY( 50 , 5 );
  lcdStringB( " SAVE ");
}
void display_setup(byte k,byte v)
{
  byte v_b,v_c;
  char str[3];
  sprintf(str, "%d", v);
  for( byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0xFF);
  }
  gotoXY(0,0);
  lcdStringB("SCREEN SET");
  if ( k == 1)
  {
    gotoXY(45,1);
    lcdString( str );
    gotoXY(0,2);
    lcdStringB("Bright:");
    for ( byte j = 0 ; j <= v ; j ++)
    {
      gotoXY( 35 + ( 8 * j ) , 2 );
      lcdSymbol(2);
    }
    v_b = v;
    analogWrite(BACKLIGHT,50 * v);  
    gotoXY(0,4);
    lcdString("Contrast:");
    for ( byte j = 0 ; j < v_c ; j ++)
    {
      gotoXY( 45 + ( 8 * j ) , 4 );
      lcdSymbol(2);
    }
    lcdWrite(LCD_CMD, 0x10 + v_c);  // LCD 对比度  设定  
   
  }
  if ( k == 2)
  {
    gotoXY(0,2);
    lcdString("Bright:");
    for ( byte j = 0 ; j <= v_b ; j ++)
    {
      gotoXY( 35 + ( 8 * j ) , 1 );
      lcdSymbol(2);
    }
    analogWrite(BACKLIGHT,50 * v_b);
    gotoXY(45,3);
    lcdString( str );
    gotoXY(0,4);
    lcdStringB("Contrast:");
    for ( byte j = 0 ; j < v ; j ++)
    {
      gotoXY( 45 + ( 8 * j ) , 1 );
      lcdSymbol(2);
    }
    v_c = v;
    lcdWrite(LCD_CMD, 0x10 + v);  // LCD 对比度  设定  
  }

  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( " EXIT ");
  gotoXY( 50 , 5 );
  lcdStringB( " SAVE ");
}
void power_setup( byte v)
{
  char str[3];
  sprintf(str, "%d", v);
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 0 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 0 , 0 );
  lcdStringB( "POWER");

  gotoXY(45,2);
  lcdString( str );
  gotoXY(0,3);
  lcdStringB("Power:");
  for ( byte j = 0 ; j <= v ; j ++)
  {
    gotoXY( 30 + ( 8 * j ) , 3 );
    lcdSymbol(2);
  }

  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( " EXIT ");
  gotoXY( 50 , 5 );
  lcdStringB( " SAVE ");
}
void version_dis()
{
  for( byte i = 0 ; i < 84 ; i ++)
  {
    gotoXY(i,0);
    lcdWrite(1,0xFF);
  }
  gotoXY(0,0);
  lcdStringB("VERSION");
  gotoXY(2,2);
  lcdString("Version : 0.10beta");
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB( "EXIT ");

}
void lcdLogoDisplay()
{
  gotoXY(2,2);
  lcdString(" KAJW WA");

}
void lcdDefaultDisplay()
{
  byte t,h;
  byte time_b[7];
  byte th[2];
  char t_d_st[4];
  char str[2];
  
  timeGet(DS1307_ADDRESS,DS1307_STOP_START,time_b);
  if (tempe_humiRead(th) == 1)
  {
    t = th[0];
    h = th[1];  
  }
  
  gotoXY(0,0);
  lcdString("20");
  sprintf(str, "%02d", time_b[6]);
  lcdString( str );
  lcdCharacter('.');
  sprintf(str, "%02d", time_b[5]);
  lcdString( str );
  lcdCharacter('.');
  sprintf(str, "%02d", time_b[4]);
  lcdString(str );
  gotoXY(65,0);
  lcdString( weektoString(time_b[3]) );
   
  gotoXY(0,1);
  sprintf(str, "%02d", time_b[2]);
  lcdString( str );
  lcdCharacter(':');
  sprintf(str, "%02d", time_b[1]);
  lcdString( str );
  lcdCharacter(':');
  sprintf(str, "%02d", time_b[0]);
  lcdString( str );

  gotoXY(0,2);
  lcdString("T : ");
  sprintf(str, "%02d", t);
  //Serial.print("T :");
  //Serial.println(str);
  lcdString( str );
  lcdString( " " );
  lcdSymbol(13);
  lcdCharacter('C');
  gotoXY(0,3);
  lcdString("D : ");
  sprintf(str, "%02d", h);
  lcdString( str );
  //Serial.print("H :");
  //Serial.println(str);
  lcdString("  %");
  for ( byte i = 0 ; i < 84 ; i ++ )
  {
    gotoXY( i , 5 );
    lcdWrite( 1 , 0xFF );
  }
  gotoXY( 2 , 5 );
  lcdStringB(" EXIT ");

}
void musicPlay()
{
  gotoXY(2,2);
  lcdString(" MUSIC PLAY");
}
void recorder()
{
  gotoXY(2,2);
  lcdString(" RECORDING");
}
//////////////////////  菜单显示  ////////////////////////////////
byte menu_dis(byte num)
{
  byte count,num_pre;

  if ( num >= 0 && num <= 9 )
  {
    if ( num > 4 ) num = 1;
    if ( num < 1 ) num = 4;
    else num = num;
  }
  else if ( num >= 10 && num <= 19 )
  {
    if ( num > 13 ) num = 11;
    if ( num < 11 ) num = 13;
    else num = num;
  }
  else if ( num >= 20 && num <= 29)
  {
    if ( num > 23 ) num = 21;
    if ( num < 21 ) num = 23;
    else num = num;
  }
  else if ( num >= 30 && num <= 39)
  {
    if ( num > 34 ) num = 31;
    if ( num < 31 ) num = 34;
    else num = num;
  }
  else if ( num >= 40 && num <= 49)
  {
    if ( num > 44 ) num = 41;
    if ( num < 41 ) num = 44;
    else num = num;
  }
  else if ( num >= 110 && num <= 119)
  {
    if ( num > 113 ) num = 111;
    if ( num < 111 ) num = 113;
    else num = num;
  }
  else if ( num >= 120 && num <= 129)
  {
    if ( num > 124 ) num = 121;
    if ( num < 121 ) num = 124;
    else num = num;
  }
  else if ( num >= 130 && num <= 139)
  {
    if ( num > 134 ) num = 131;
    if ( num < 131 ) num = 134;
    else num = num;
  }
  else if ( num >= 210 && num <= 219)
  {
    if ( num > 213 ) num = 211;
    if ( num < 211 ) num = 213;
    else num = num;
  }
  else if ( num >= 220 && num <= 229)
  {
    if ( num > 222 ) num = 221;
    if ( num < 221 ) num = 222;
    else num = num;
  }
  else
  {
    num = 1;  
  }
  if (num_pre != num)
  {
    lcdClear();
    num_pre = num;
  }
  
  switch(num)
  {
    case 1   :
        while( 1 )
        {
          count = screen_play();
          if(keyRead() != 'K') break;
        }
        break;
    case 2   :
        while( 1 )
        {  
          count = screen_recorder();
          if(keyRead() != 'K') break;         
        }
        break;
    case 3   :
        while( 1 )
        {  
          count = screen_tool();
          if(keyRead() != 'K') break;         
        }
        break;
    case 4   :
        while( 1 )
        {  
          count = screen_setup();
          if(keyRead() != 'K') break;         
        }
        break;
    case 11  :
        while( 1 )
        {  
          count = screen_play_mode();
          if(keyRead() != 'K') break;           
        }
        break;
    case 12  :
        while( 1 )
        {  
          count = screen_play_reverb();
          if(keyRead() != 'K') break;         
        }
        break;
    case 13  :
        while( 1 )
        {  
          count = screen_play_equa();
          if(keyRead() != 'K') break;         
        }
        break;
    case 21  :
        while( 1 )
        {  
          count = screen_recorder_mode();
          if(keyRead() != 'K') break;         
        }
        break;
    case 22  :
        while( 1 )
        {  
          count = screen_recorder_mic();
          if(keyRead() != 'K') break;         
        }
        break;
    case 23  :
        while( 1 )
        {  
          count = screen_recorder_display();
          if(keyRead() != 'K') break;
        }
    case 31  :
        while( 1 )
        {  
          count = screen_tools_alcohol();
          if(keyRead() != 'K') break;         
        }
        break;
    case 32  :
        while( 1 )
        {  
          count = screen_tools_combust();
          if(keyRead() != 'K') break;         
        }
        break;
    case 33  :
        while( 1 )
        {  
          count = screen_tools_color();
          if(keyRead() != 'K') break;
        }
        break;
    case 34  :
        while( 1 )
        {  
          count = screen_tools_noise();
          if(keyRead() != 'K') break;
        }
        break;
    case 41  :
        while( 1 )
        {  
          count = screen_setup_datetime();
          if(keyRead() != 'K') break;         
        }
        break;
    case 42  :
        while( 1 )
        {  
          count = screen_setup_screen();
          if(keyRead() != 'K') break;      
        }
        break;
    case 43  :
        while( 1 )
        {  
          count = screen_setup_power();
          if(keyRead() != 'K') break;         
        }
        break;
    case 44  :
        while( 1 )
        {  
          count = screen_setup_version();
          if(keyRead() != 'K') break;         
        }
        break;
    case 111 :
        while( 1 )
        {  
          count = screen_play_mode_allrepeat();
          if(keyRead() != 'K') break;      
        }
        break;
    case 112 :
        while( 1 )
        {  
          count = screen_play_mode_repeat();
          if(keyRead() != 'K') break;      
        }
        break;
    case 113 :
        while( 1 )
        {  
          count = screen_play_mode_random();
          if(keyRead() != 'K') break;      
        }
        break;
    case 121 :
        while( 1 )
        {  
          count = screen_play_reverb_none();
          if(keyRead() != 'K') break;      
        }
        break;
    case 122 :
        while( 1 )
        {  
          count = screen_play_reverb_studio();
          if(keyRead() != 'K') break;      
        }
        break;
    case 123 :
        while( 1 )
        {  
          count = screen_play_reverb_club();
          if(keyRead() != 'K') break;      
        }
        break;
    case 124 :
        while( 1 )
        {  
          count = screen_play_reverb_hall();
          if(keyRead() != 'K') break;      
        }
        break;
    case 131 :
        while( 1 )
        {
          count = screen_play_equa_none();
          if(keyRead() != 'K') break;      
        }
        break;
    case 132 :
        while( 1 )
        {  
          count = screen_play_equa_classical();
          if(keyRead() != 'K') break;         
        }
        break;
    case 133 :
        while( 1 )
        {  
          count = screen_play_equa_jazz();
          if(keyRead() != 'K') break;         
        }
        break;
    case 134 :
        while( 1 )
        {  
          count = screen_play_equa_rock();
          if(keyRead() != 'K') break;         
        }
        break;
    case 211 :
        while( 1 )
        {  
          count = screen_recorder_mode_mp3();
          if(keyRead() != 'K') break;      
        }
        break;
    case 212 :
        while( 1 )
        {  
          count = screen_recorder_mode_wma();
          if(keyRead() != 'K') break;         
        }
        break;
    case 213 :
        while( 1 )
        {  
          count = screen_recorder_mode_pcm();
          if(keyRead() != 'K') break;         
        }
        break;
    case 221 :
        while( 1 )
        {  
          count = screen_recorder_mic_buildin();
          if(keyRead() != 'K') break;         
        }
        break;
    case 222 :
        while( 1 )
        {  
          count = screen_recorder_mic_external();
          if(keyRead() != 'K') break;      
        }
        break;
    default :
          count = 0x00;
          break;

  }
  return count;
}
///////////////////////// 执行菜单 ///////////////////////////////////
void menu_exe( byte menucount)
{
  char keytemp;
  byte t[7];
  byte v;
  byte k;
        
  switch( menucount)
  {
    case 31  :                  
        alcoholInti();
        lcdClear();
        while( 1 )
        {
          v = alcoholRead();                    
          alcohol_Dis(v);
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 32  :                  
        combustInti();
        lcdClear();
        while( 1 )
        {
          v = combustibleRead();
          combust_Dis(v);   
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 33  :
        frequencecount = 0;
        colorInti();                  
        interrupts();
        attachInterrupt(0,frequence,RISING);
        lcdClear();
        while( 1 )
        {
         
          while(1)
          {
            if (color_wb_Dis()) break;
            color_Dis(222,250,220);
            keytemp = keyRead();
            if ( keytemp == 'E') break;
          }
        }
        break;
    case 34  :                  
        noiseInti();
        lcdClear();
        while( 1 )
        {
          v = noiseRead();
          noise_Dis(v);   
          keytemp = keyRead();
          if ( keytemp == 'E') break;      
        }
        break;
    case 41  :                                    
        k = 1;
        timeGet(DS1307_ADDRESS ,DS1307_START,t);
        lcdClear();
        datetime_setup_inti(t);                 
        while( 1 )
        {
          keytemp = keyRead();
          if ( keytemp == 'U') v ++;
          if ( keytemp == 'D') v --;
          if ( keytemp == 'F') k ++;
          if ( keytemp == 'B') k --;
          if ( keytemp == 'E') break;
          if ( k > 7 ) k = 1;
          if ( k < 1 ) k = 7;
          switch( k)
          {
            case 1  :
                if ( v > 99 ) v =  1;
                if ( v <  1 ) v = 99;
                t[6] = v;
                break;
            case 2  :
                if ( v > 12 ) v =  1;
                if ( v <  1 ) v = 12;
                t[5] = v;
                break;
            case 3  :
                if ( v > 31 ) v =  1;
                if ( v <  1 ) v = 31;
                t[4] = v;
                break;
            case 4  :
                if ( v >  7 ) v = 1;
                if ( v <  1 ) v = 7;
                t[3] = v;
                break;
            case 5  :
                if ( v > 23 ) v =  0;
                if ( v <  0 ) v = 23;
                t[2] = v;
                break;
            case 6  :
                if ( v > 59 ) v =  0;
                if ( v <  0 ) v = 59;
                t[1] = v;
                break;
            case 7  :
                if ( v > 59 ) v =  0;
                if ( v <  0 ) v = 59;
                t[0] = v;
                break;
            default :
                break;
          }
          datetime_setup(k,v);
        }
        //timeSet(DS1307_ADDRESS ,DS1307_START,v)
        break;
    case 42  :                    
        k = 1;
        v = 3;
        lcdClear();
        while( 1 )
        {
          display_setup(k,v);
          keytemp = keyRead();
          if ( keytemp == 'U') v ++;
          if ( keytemp == 'D') v --;
          if ( keytemp == 'F') k ++;
          if ( keytemp == 'B') k --;
          if ( keytemp == 'E') break;
          if ( k > 2 ) k = 1;
          if ( k < 1 ) k = 2;
          if ( v > 5 ) v = 1;
          if ( v < 1 ) v = 5;                  
        }
        break;
    case 43  :              
        v = 3;
        lcdClear();
        while( 1 )
        {
          power_setup(v*2);
          keytemp = keyRead();                    
          if ( keytemp == 'U') v ++;
          if ( keytemp == 'D') v --;
          if ( keytemp == 'E') break;
          if ( v > 5 ) v = 1;
          if ( v < 1 ) v = 5;     
        }
        break;
    case 44  :
        lcdClear();
        while( 1 )
        {
          version_dis();
          keytemp = keyRead();
          if ( keytemp == 'E')
          break;
        }
        break;
    case 111 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;      
        }
        break;
    case 112 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 113 :
        //lcdClear();
        while( 1 )
        {
          {

            }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 121 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 122 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 123 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 124 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 131 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 132 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 133 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 134 :  
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;            
    case 211 :  
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;         
    case 212 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 213 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead(); break;
        }
        break;
    case 221 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    case 222 :
        //lcdClear();
        while( 1 )
        {
          {

          }
          keytemp = keyRead();
          if ( keytemp == 'E') break;
        }
        break;
    default  :
        break;

  }
   
}
void setup()
{
  lcdInitialise();
  keyInti();
  lcdClear();
  lcdLogoDisplay();
  delay(2000);
  //Serial.begin(9600) ;
}
void loop()
{
  char keytemp;
  boolean key_OK ,flag_m,keystatus;
  keystatus = true;
  flag_m = true;
  key_OK = false;
  lcdClear();
  while(keystatus)
  {
    lcdDefaultDisplay();
    delay(800);
    keytemp = keyRead();

    if (keytemp == 'M' || keytemp == 'P' || keytemp == 'R' )
    keystatus = false;
  }

  keytemp = keyRead() ;

  if ( keytemp == 'M')
  {
    lcdClear();
    menucount = screen_play();
    while(flag_m)
    {
      keytemp = keyRead();
      //Serial.println(keytemp);
      switch(keytemp)
      {
        case 'E' : flag_m = false; break;
              
        case 'O' : key_OK  = true; break;

        case 'U' : menucount --; break;

        case 'D' : menucount ++; break;

        case 'B' : menucount /= 10; break;

        case 'F' : menucount *= 10; break;

        case 'M' : menucount = 1; break;

        default  : break;
      }
      //Serial.println(menucount);
      menucount = menu_dis(menucount);
      
      if ( key_OK )
      {
        if( ( menucount > 0 && menucount < 19 ) || ( menucount > 20 && menucount < 29 )  )
        {
          menucount *= 10;
        }
        if( ( menucount > 30 && menucount < 49 ) || ( menucount > 110 && menucount < 139) || (menucount > 210 && menucount < 229 ))
        {
          menu_exe(menucount);
        }     
      }      
    }

  }
  else if (keytemp == 'P')
  {
    musicPlay();

  }
  else if ( keytemp == 'R')
  {
    recorder();
  }
  else
  {

  }

}


[/code]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2012-12-13 20:42:58 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2012-12-13 20:44:20 | 显示全部楼层
真够长的,慢慢学习了
回复 支持 反对

使用道具 举报

发表于 2012-12-13 21:07:26 | 显示全部楼层
工程不小,辛苦啦!
做一个简单的控制器,够用了。
提个建议,一个是拆分成不同的文件方便管理,再就是分层实现,方便不同显示分辨率的适配,尽量做到硬件无关(当然这个很难)。
回复 支持 反对

使用道具 举报

发表于 2012-12-13 21:40:15 | 显示全部楼层
太长了,应该可以优化下
回复 支持 反对

使用道具 举报

发表于 2012-12-13 22:11:29 | 显示全部楼层
太牛了
回复 支持 反对

使用道具 举报

发表于 2012-12-14 09:43:40 | 显示全部楼层
拜啊~~~~~~~~~~~~~
回复 支持 反对

使用道具 举报

发表于 2012-12-14 10:49:23 | 显示全部楼层
这是多大的工程量啊
回复 支持 反对

使用道具 举报

发表于 2012-12-14 12:52:13 | 显示全部楼层
代码好多啊

强悍{:soso_e179:}
回复 支持 反对

使用道具 举报

发表于 2012-12-14 13:56:43 | 显示全部楼层
好有耐心,这么长写到uno里还剩多少空间啊?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-14 18:49:49 | 显示全部楼层
wasdpkj 发表于 2012-12-14 13:56
好有耐心,这么长写到uno里还剩多少空间啊?

程序23K。现在想办法优化代码。有好一点的OLED或是TFT的屏幕模块推荐吗,最好是SPI或是I2C接口的。彩色的,分辨率在360*240的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-14 18:50:12 | 显示全部楼层
禅轩 发表于 2012-12-14 10:49
这是多大的工程量啊

写了两个星期
回复 支持 反对

使用道具 举报

发表于 2012-12-14 19:11:24 | 显示全部楼层
一直在为Microduino选显示的屏幕,诺基亚5110以便宜小巧是首选。改天为它设计一个底板,如果资源不够,可以考虑下Microduino-core+,他是以644PA及1284P为mcu,价格便宜。
回复 支持 反对

使用道具 举报

发表于 2012-12-14 19:14:27 | 显示全部楼层
5110除便宜,还有个优点是能耗很低,别的点阵屏功耗远大于它
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-5-1 13:59 , Processed in 0.050726 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表