www.pudn.com > TG12864.rar > menu.c


#include               
#include                               
#include                
 
 
#define uchar unsigned char 
#define uint unsigned int 
#define ulong unsigned long 
#define uint8 unsigned char 
#define DATA  P0 
 
bit flagok=0,flaginc=0,flagexit=0; 
code uchar num[]=                                            //数字库 
{ 
/*--  文字:  0  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 
 
/*--  文字:  1  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00, 
 
/*--  文字:  2  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00, 
 
/*--  文字:  3  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00, 
 
/*--  文字:  4  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00, 
 
/*--  文字:  5  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00, 
 
/*--  文字:  6  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00, 
 
/*--  文字:  7  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00, 
 
/*--  文字:  9  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=8x16   --*/ 
0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00, 
}; 
code uchar mainshow1[]=                              ///mainshow为主菜单显示字库 
{                                 
/*--  文字:  欢  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x20,0x10,0x4C,0x43,0x43,0x2C,0x20,0x10,0x0C,0x03,0x06,0x18,0x30,0x60,0x20,0x00, 
0x14,0x24,0x44,0x84,0x64,0x1C,0x20,0x18,0x0F,0xE8,0x08,0x08,0x28,0x18,0x08,0x00, 
}; 
code uchar mainshow2[]= 
{ 
/*--  文字:  迎  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x1F,0x20,0x40,0x47,0x42,0x41,0x40,0x5F,0x40,0x42,0x44,0x43,0x40,0x00, 
0x40,0x41,0xCE,0x04,0x00,0xFC,0x04,0x02,0x02,0xFC,0x04,0x04,0x04,0xFC,0x00,0x00, 
}; 
code uchar mainshow3[]= 
{ 
/*--  文字:  使  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x7F,0x00,0x40,0x41,0x22,0x14,0x0C,0x13,0x10,0x30,0x20,0x61,0x20,0x00, 
0x40,0x20,0xF0,0x1C,0x07,0xF2,0x94,0x94,0x94,0xFF,0x94,0x94,0x94,0xF4,0x04,0x00, 
}; 
code uchar mainshow4[]= 
{ 
/*--  文字:  用  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x80,0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x42,0x82,0x7F,0x00,0x00, 
0x00,0x00,0x00,0xFE,0x22,0x22,0x22,0x22,0xFE,0x22,0x22,0x22,0x22,0xFE,0x00,0x00, 
}; 
code uchar mainshow5[]= 
{ 
/*--  文字:  本  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x08,0x08,0x04,0x02,0x05,0x04,0x04,0x7F,0x04,0x04,0x04,0x03,0x06,0x0C,0x04,0x00, 
0x08,0x08,0x08,0x08,0x08,0xC8,0x38,0xFF,0x18,0x68,0x88,0x08,0x08,0x08,0x08,0x00, 
}; 
code uchar mainshow6[]= 
{ 
/*--  文字:  系  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x40,0x21,0x13,0x09,0x05,0x41,0x81,0x7F,0x01,0x05,0x09,0x13,0x62,0x00,0x00, 
0x00,0x00,0x02,0x22,0xB2,0xAA,0x66,0x62,0x22,0x11,0x4D,0x81,0x01,0x01,0x00,0x00, 
}; 
code uchar mainshow7[]= 
{ 
/*--  文字:  统  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x20,0x22,0x23,0x12,0x12,0x92,0x40,0x30,0x0F,0x00,0x00,0x3F,0x40,0x41,0x70,0x00, 
0x20,0x30,0x2C,0xA3,0x60,0x10,0x84,0xC4,0xA4,0x9D,0x86,0x84,0xA4,0xC4,0x84,0x00, 
}; 
code uchar mainshow8[]= 
{ 
/*--  文字:  !  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
}; 
code uchar mainshow9[]= 
{ 
/*--  文字:  请  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x00,0x7F,0x20,0x10,0xFF,0x0A,0x0A,0x0A,0x4A,0x8A,0x7F,0x00,0x00,0x00, 
0x40,0x42,0x4C,0xC4,0x00,0x22,0xAA,0xAA,0xAA,0xBF,0xAA,0xAA,0xAA,0x22,0x20,0x00, 
}; 
code uchar mainshow10[]= 
{ 
/*--  文字:  设  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00, 
0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00, 
}; 
code uchar mainshow11[]= 
{ 
/*--  文字:  置  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x80,0x80,0x80,0xFF,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xFF,0x80,0x80,0x80,0x00, 
0x00,0x20,0x2F,0xA9,0xA9,0xAF,0xE9,0xB9,0xA9,0xAF,0xA9,0xA9,0x2F,0x20,0x00,0x00, 
}; 
code uchar mainshow12[]= 
{ 
/*--  文字:  参  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x02,0x42,0x45,0x55,0x52,0x4A,0x29,0x24,0x24,0x12,0x12,0x09,0x0B,0x06,0x02,0x00, 
0x20,0x20,0x28,0x2C,0xAA,0x6B,0x38,0xAC,0x24,0x64,0xA6,0x2C,0x20,0x20,0x00,0x00, 
}; 
code uchar mainshow13[]= 
{ 
/*--  文字:  数  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00, 
0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00, 
}; 
code uchar dot[]= 
{ 
/*--  文字:  -  --*/ 
/*--  隶书12;  此字体下对应的点阵为:宽x高=9x16   --*/ 
0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
0x00,0x00, 
 
/*--  文字:  >  --*/ 
/*--  隶书12;  此字体下对应的点阵为:宽x高=9x16   --*/ 
0x00,0x20,0x30,0x18,0x0C,0x06,0x03,0x01,0x00,0x00,0x08,0x18,0x30,0x60,0xC0,0x80, 
0x00,0x00, 
}; 
 
code uchar dismenu1[]= 
{ 
/*--  文字:  参  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x02,0x42,0x45,0x55,0x52,0x4A,0x29,0x24,0x24,0x12,0x12,0x09,0x0B,0x06,0x02,0x00, 
0x20,0x20,0x28,0x2C,0xAA,0x6B,0x38,0xAC,0x24,0x64,0xA6,0x2C,0x20,0x20,0x00,0x00, 
 
/*--  文字:  数  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00, 
0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00, 
 
/*--  文字:  设  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x7F,0x20,0x90,0x80,0x40,0x43,0x2C,0x10,0x10,0x2C,0x43,0xC0,0x40,0x00, 
0x40,0x41,0xCE,0x04,0x00,0x80,0x40,0xBE,0x82,0x82,0x82,0xBE,0xC0,0x40,0x40,0x00, 
 
/*--  文字:  定  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x18,0x07,0x08,0x10,0x20,0x7F,0x42,0x42,0x42,0x42,0x40,0x40,0x00,0x00, 
0x00,0x10,0x0C,0xA4,0x24,0x24,0x25,0xE6,0x24,0x24,0x24,0x24,0x14,0x0C,0x04,0x00, 
 
/*--  文字:  参  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x02,0x42,0x45,0x55,0x52,0x4A,0x29,0x24,0x24,0x12,0x12,0x09,0x0B,0x06,0x02,0x00, 
0x20,0x20,0x28,0x2C,0xAA,0x6B,0x38,0xAC,0x24,0x64,0xA6,0x2C,0x20,0x20,0x00,0x00, 
 
/*--  文字:  数  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00, 
0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00, 
 
/*--  文字:  修  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x7F,0x00,0x03,0x54,0x54,0x4A,0x2B,0x25,0x15,0x12,0x0A,0x09,0x00,0x00, 
0x20,0x10,0xFC,0x07,0xF2,0x20,0x98,0x8F,0x54,0xA4,0x24,0x54,0xCC,0x80,0x80,0x00, 
 
/*--  文字:  改  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x7F,0x20,0x10,0x48,0x44,0x20,0x20,0x10,0x0B,0x0C,0x13,0x20,0x60,0x20,0x00, 
0x00,0xC4,0x44,0x44,0x44,0x7C,0x80,0x40,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x10,0x00, 
 
/*--  文字:  参  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x02,0x42,0x45,0x55,0x52,0x4A,0x29,0x24,0x24,0x12,0x12,0x09,0x0B,0x06,0x02,0x00, 
0x20,0x20,0x28,0x2C,0xAA,0x6B,0x38,0xAC,0x24,0x64,0xA6,0x2C,0x20,0x20,0x00,0x00, 
 
/*--  文字:  数  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x42,0x42,0x2A,0x2E,0x13,0x1A,0x26,0x02,0x40,0x20,0x13,0x0C,0x33,0x60,0x20,0x00, 
0x10,0x92,0x54,0x38,0xFF,0x38,0x54,0x52,0x80,0xF0,0x1F,0x12,0x10,0xF0,0x10,0x00, 
 
/*--  文字:  发  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x10,0x88,0x87,0x41,0x46,0x28,0x10,0x28,0x27,0x40,0xC0,0x40,0x00,0x00, 
0x00,0x10,0x3E,0x10,0x10,0xF0,0x9F,0x90,0x90,0x92,0x94,0x1C,0x10,0x10,0x10,0x00, 
 
/*--  文字:  送  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x1F,0x20,0x40,0x48,0x44,0x43,0x40,0x41,0x42,0x4C,0x40,0x40,0x40,0x00, 
0x40,0x41,0xC6,0x00,0x40,0x48,0x49,0x4E,0xF8,0x4C,0x4B,0x48,0x48,0x40,0x00,0x00, 
 
/*--  文字:  退  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x1F,0x20,0x40,0x5F,0x48,0x44,0x40,0x41,0x42,0x4D,0x58,0x40,0x40,0x00, 
0x40,0x41,0xC6,0x00,0x00,0xFE,0x4A,0x4A,0xCA,0x4A,0x4A,0x7E,0x80,0x00,0x00,0x00, 
 
/*--  文字:  出  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x7E,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x7E,0x00,0x00, 
0x00,0x00,0xFC,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0x40,0xFC,0x00,0x00, 
 
/*--  文字:  环  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x04,0x04,0x03,0x12,0x0A,0x04,0x03,0x00,0x00,0xFF,0x00,0x00,0x03,0x0E,0x00, 
0x00,0x22,0x22,0xFE,0x22,0x22,0x00,0x02,0xC2,0x32,0xFE,0x42,0x82,0x02,0x02,0x00, 
 
/*--  文字:  境  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x10,0x30,0x1F,0x08,0x08,0x00,0x80,0x4F,0x3A,0x0A,0x0A,0x7A,0x8F,0x80,0xE0,0x00, 
0x20,0x20,0xFE,0x20,0x20,0x00,0x24,0xAC,0xB4,0xA5,0xA6,0xB4,0xAC,0x24,0x00,0x00, 
}; 
  
//管脚定义//////////////////////////////////////////////////////////////// 
sbit CS=P2^1; 
sbit A0=P1^0; 
sbit WR=P2^6; 
sbit RD=P2^7; 
sbit OK=P1^6; 
sbit INC=P1^7; 
sbit EXIT=P1^5; 
////////变量定义///////////////////////////////////////////////////////// 
bit newok,oldok; 
bit newinc,oldinc; 
bit newexit,oldexit; 
bdata uchar showj=0; 
//函数列表////////////////////////////////////////////////////////////////// 
void wcode(uchar i);  
void wdata(uchar i); 
void lcd_busy(void); 
void rdata(uchar i); 
void init_12864(void); 
void startline(uchar i); 
void disoff(uchar o); 
void delay(ulong v) ; 
void setxy (uchar x1,uchar x2,uchar y) ; 
void lw(uchar x, uchar y, uchar dd) ; 
void dh(uchar xx, uchar yy, uchar n, uchar fb,uchar hz[]); 
void clear(void); 
void shownum (uchar xx, uchar yy, uchar n, uchar fb); 
void showtime(void); 
void showsing (uchar xx, uchar yy, uchar team[], uchar fb); 
void counttime (void); 
////////////////////////////////////////////////////////////////////////// 
//检测忙信号?                  //A0=0;RD=0;WR=1     
void lcd_busy(void)   
{                              //函数名为lcd_busy 的判LCM忙子函数                  
    
                                //lcd_busy函数开始 
   CS=1;      
   WR=1;_nop_();     
   A0=0;   
   RD=0;_nop_();  
   DATA=0xff;_nop_();   //选择指令寄存器,选择读方式,LCM数据口置全1 
   CS=0; 
  while(1) 
  {				         //while循环体,无限循环 
        		  			  //使能,将LCM的状态读入MCU 
	if(DATA&0x80)break;    /*若读入状态的数据小于0x80,说明最高位为0,LCM空闲,执行break语句跳出while循环体*/ 
   					          //禁能 
  }  
  CS=1;_nop_();        
}// / while循环体结束 
///////////////////////////////////////////////////////////////////////////// 
//写控制命令到lcd                 //A0=0;RD=1;WR=0 
void wcode (uchar i)    
{   
   lcd_busy();  //检测忙? 
   CS=1; 
   RD=1;_nop_(); 
    
 //  delay(0x04); 
   A0=0;  
   WR=0;_nop_(); 
   CS=0;_nop_(); 
   DATA=i;   
   //delay(0x04); 
  // DATA=i; 
   _nop_(); _nop_(); 
   CS=1;_nop_();  
}  
 ////////////////////////////////////////////////////////////////////////// 
//写显示数据到lcd 
void wdata (uchar i)            //A0=1;RD=1;WR=0 
{  lcd_busy();//检测忙? 
   CS=1; 
   RD=1;_nop_(); 
   
  // delay(0x04); 
   A0=1;  
   WR=0;_nop_(); 
   CS=0;_nop_(); 
   DATA=i;   
  // delay(0x04); 
   //DATA=i; 
   _nop_(); _nop_();  
   CS=1;_nop_();  
}  
/////////////////////////////////////////////////////////////////////// 
//lcd读显示数据 
void rdata (uchar i)            //A0=1;RD=0;WR=1 
{ 
   lcd_busy();//检测忙? 
   CS=1; 
   WR=1;_nop_(); 
   
  // delay(0x04); 
   A0=1;  
   RD=0;_nop_(); 
   CS=0;_nop_(); 
   DATA=i;  
   //delay(0x04); 
   //DATA=i; 
   _nop_(); _nop_();  
   CS=1;_nop_();  
}  
/////////////////////////////////////////////////////////////////// 
//液晶屏初始化 
void init_12864(void) 
{ 
           /*函数名为lcd_init 的LCM初始化子函数*/ 
 disoff(0x00);//开显示屏//0x00关显示;0x01开显示////1				  
 wcode(0xa0);  //设置ADC 为正常0---64 ///8 
 wcode(0xa6);//设置正常的开关状态/////9 
 wcode(0x2f);//设置能量控制16 
 wcode(0x81);wcode(0x00);//Electronic volume control  setting 18 
 wcode(0xa3);//设置lcd bias///////11 
 wcode(0xc0);///选择输出状态寄存器////15 
 wcode(0xa5);//全屏亮///10 
 delay(4);		//////			  
 wcode(0xa4); //正常显示//////	10 
 startline(0x00);//从第一行开始显示//////2 
 clear();//清屏	///	 
 disoff(0x01);//开显示屏//0x00关显示;0x01开显示////1 
 		 
}  
////////////////////////////////////////////////////////////////////// 
void startline (uchar i) //设置显示起始行 
{ 
 i=i+0x40; 
 wcode(i); 
} 
/////////////////////////////////////////////////////////////////////// 
void setxy (uchar x1,uchar x2,uchar y)    //定位x方向、y方向的子函数 
{ 
  y=y+0xb0; 
  x2=x2+0x10; 
  x1=x1+0x00; 
  wcode(x1); 
  wcode(x2); 
  wcode(y); 
} 
/////////////////////////////////////////////////////////////////////// 
void disoff (uchar o)//显示屏关子函数 
{ 
  o=o+0xae; 
  wcode(o); 
} 
////////////////////////////////////////////////////////////////////// 
 void delay (ulong v) 
 { 
    while(v!=0)v--; 
 } 
  
///////////////////////////////////////////////////////////// 
/*-----------------------------------写数据至LCM子函数----------------------------------*/ 
void lw (uchar x, uchar y, uchar dd) /*函数名为lw 的写数据至LCM子函数。定义x、y、dd为无符号 
                                             字符型局部变量*/ 
{uchar temp,x1,x2;                                   //lw子函数开始	  
 temp=x; 
 x=x&0x0f; 
 x1=x; 
 x=temp; 
 x=x&0xf0; 
 x=x/16; 
 x=x&0x0f; 
 x2=x; 
 setxy(x1,x2,y);				  
 wdata(dd);			 					  
				 				  
}								  
 
  //////////////////////////////////////////////////////////// 
/*-------------------------------------显示汉字子函数------------------------------------------*/ 
void dh (uchar xx, uchar yy,uchar n,uchar fb,uchar hz[]) /*函数名为dh的显示汉字子函数。 
定义xx、yy、n、fb为无符号字符型局部变量。其中xx、yy为列、页定位值, 
n为汉字库中的第n个汉字,fb为反白显示选择*/ 
{								//dh子函数开始 
uchar i,dx;                        //定义i、dx为无符号字符型局部变量 
  for(i=0;i<16;i++)					//for循环体,用于扫描汉字的上半部分 
   {dx=hz[i+n*32];					//取得第n个汉字的上半部分数据代码 
     if(fb)dx=255-dx;					//若fb不为0,获得反白数据代码 
     lw(xx*8+i+2,yy+1,dx); 
   }			                    //将数据代码写入LCd 
  for(i=0;i<16;i++)	 
   {dx=hz[(i+16)+n*32];				//取得第n个汉字的下半部分数据代码 
     if(fb)dx=255-dx;					//若fb不为0,获得反白数据代码 
     lw(xx*8+i+2,yy,dx);				//将数据代码写入LCM 
   }								//for循环体结束 
}								//dh子函数结束 
/********************************************************/ 
void shownum (uchar xx, uchar yy, uchar n, uchar fb)          /*函数名为shownum的显示数字的函数*/ 
{							     	//shownum子函数开始 
  uchar i,dx;                        //定义i、dx为无符号字符型局部变量 
  for(i=0;i<8;i++)					//for循环体,用于扫描汉字的上半部分 
   {dx=num[i+n*16];					//取得第n个数字的上半部分数据代码 
     if(fb)dx=255-dx;					//若fb不为0,获得反白数据代码 
     lw(xx+i+2,yy+1,dx); 
   }		                      	//将数据代码写入LCd 
  for(i=0;i<8;i++)	 
   {dx=num[(i+8)+n*16];				//取得第n个数字的下半部分数据代码 
     if(fb)dx=255-dx;					//若fb不为0,获得反白数据代码 
     lw(xx+i+2,yy,dx);				//将数据代码写入LCM 
   }								//for循环体结束 
}								//shownum子函数结束 
////////////////////////////////////////////////////////// 
void showsing (uchar xx, uchar yy, uchar team[], uchar fb) /*函数名为showsing的显示单个汉字子函数。 
定义xx、yy、n、fb为无符号字符型局部变量。其中xx、yy为列、页定位值.带数组显示*/ 
  
{								//showsing子函数开始 
uchar i,dx;                        //定义i、dx为无符号字符型局部变量 
  for(i=0;i<16;i++)					//for循环体,用于扫描汉字的上半部分 
   {dx=team[i];					//取得第n个汉字的上半部分数据代码 
     if(fb)dx=255-dx;					//若fb不为0,获得反白数据代码 
     lw(xx+i+2,yy+1,dx); 
   }			                    //将数据代码写入LCd 
  for(i=0;i<16;i++)	 
   {dx=team[i+16];				//取得第n个汉字的下半部分数据代码 
     if(fb)dx=255-dx;					//若fb不为0,获得反白数据代码 
     lw(xx+i+2,yy,dx);				//将数据代码写入LCM 
   }								//for循环体结束 
}								//dh子函数结束 
/////////////////////////////////////////////////////// 
/*-------------------------------------显示汉字子函数------------------------------------------*/ 
  
void clear(void) 
{ 
    uchar x,y; 
    for(y=0;y<8;y++) 
     { 
       for(x=0;x<=131;x++)  
		     lw(x,y,0x00);   
     } 
} 
///////////////////////////////////////////////////////////////// 
void dismain(void)                             //主菜单显示函数 
{ 
  showsing(4,2,mainshow1,0); 
  showsing(20,2,mainshow2,0); 
  showsing(36,2,mainshow3,0); 
  showsing(52,2,mainshow4,0); 
  showsing(68,2,mainshow5,0); 
  showsing(84,2,mainshow6,0); 
  showsing(100,2,mainshow7,0); 
  showsing(116,2,mainshow8,0); 
  showsing(20,4,mainshow9,0); 
  showsing(36,4,mainshow10,0); 
  showsing(52,4,mainshow11,0); 
  showsing(68,4,mainshow12,0); 
  showsing(84,4,mainshow13,0); 
 
} 
//////////////////////////////////////////////////////////////// 
void dismenuson(void)                                //菜单显示 
{ 
  uchar loop; 
  shownum(2,0,1,1); 
  shownum(2,2,2,1); 
  shownum(2,4,3,1); 
  shownum(2,6,4,1); 
   for(loop=0;loop<4;loop++) 
	  {dh(2*loop+36,0,loop,0,dismenu1);} 
   for(loop=0;loop<4;loop++) 
	  {dh(2*loop+36,2,loop+4,0,dismenu1);} 
   for(loop=0;loop<4;loop++) 
	  {dh(2*loop+36,4,loop+8,0,dismenu1);} 
   for(loop=0;loop<4;loop++) 
	  {dh(2*loop+36,6,loop+12,0,dismenu1);} 
} 
/////////////////////////////////////////////////////////////// 
  
void dishead(uchar yy)   //箭头显示 
{ 
  uchar i,dx,yyx;  
  yyx=2*yy;                      
  for(i=0;i<9;i++)					  
      {dx=dot[i];				  
          			  
         lw(10+i+2,yy+1,dx); 
      }		                      	  
  for(i=0;i<9;i++)	 
      {dx=dot[i+9];				  
         				  
         lw(10+i+2,yy,dx);			  
      } 
   for(i=0;i<9;i++)					  
      {dx=dot[i+18];				  
          			  
         lw(18+i+2,yy+1,dx); 
      }		                        
  for(i=0;i<9;i++)	 
      {dx=dot[i+27];			  
          			  
         lw(18+i+2,yy,dx);			  
      } 															  
} 
///////////////////////////////////////////////////////////////// 
void keyscanok(void)/////确认键扫描程序 
{ 
 while(1) 
 { 
   if(OK==0)  
     {delay(100); 
	   if(OK==0)  
	     {flagok=1; 
		  break; 
		 } 
 
	 } 
   break; 
 } 
} 
///////////////////////////////////////////////////////////////// 
void keyscaninc(void)         ////增加键扫描程序 
{ 
 while(1) 
 { 
   if(INC==0)  
     {delay(100); 
	   if(INC==0)  
	     {flaginc=1; 
		 showj++;  
		 if(showj==4) showj=0; 
		 break; 
		 } 
 
	 } 
   break; 
 } 
} 
///////////////////////////////////////////////////////////////// 
void keyscanexit(void)          //退出键扫描程序 
{ 
 while(1) 
 { 
   if(EXIT==0)  
     {delay(100); 
	   if(EXIT==0)  
	     {flagexit=1; 
		  break; 
		 } 
 
	 } 
   break; 
 } 
} 
////////////////////////////////////////////////////////////////// 
/****************************主函数******************************/ 
void main(void) 
{ 
   
 // uchar u=0;  
  /P0M1=0x00;P0M2=0x00; 
  P1M1=0x0c;P1M2=0x00; 
  P2M1=0x00;P2M2=0x00; 
  P3M1=0x00;P3M2=0x00; 
  wcode(0xe2);       
  init_12864();						//LCM初始化 
// delay(1); 
					//延时一会 
while(1)						//无限循环 
    {    
    
  
    dismain();//显示主菜单 
    keyscanok();//确认键扫描 
    if(flagok==1)//确认键标志 
       {clear(); 
 	    dismenuson();//显示第一层菜单 
        dishead(showj);//显示箭头 
        keyscaninc();//扫描增加键 
          while(flaginc==1)//增加键标志 
             {switch(showj) 
			    {case '1': 
                     clear(); 
 		 	         dismenuson();//显示第二层菜单 
                    // dishead(showj);//显示箭头  
					 if(flagexit==1) 
					      break; 
				 case '2': 
				     clear(); 
					 dishead(showj); 
					 if(flagexit==1) 
				  	      break; 
				 case '3': 
                     clear(); 
 		 	         dismenuson();//显示第二层菜单 
                    // dishead(showj);//显示箭头  
					 if(flagexit==1) 
					      break; 
				 case '4': 
				     clear(); 
					 dishead(showj); 
					 if(flagexit==1) 
				  	      break; 
				 default:break; 
			    } 
             } 
      if(flagexit==1) 
		    break; 
       } 
   
   
	   
    } 
 
      delay(400000000); 
      delay(400000000); 
      delay(400000000); 
 	  delay(400000000); 
  
}