#include "LCD12864.h"
#include <intrins.h>
//菜单的实现
/*-------------------------------------------------------------*/
#define MENU_SIZE 18 //菜单长度
unsigned char KeyFuncIndex=0; //存放当前的菜单索引
void (*KeyFuncPtr)(); //定义按键功能指针
//定义类型
typedef struct
{
unsigned char KeyStateIndex; //当前的状态索引号
unsigned char KeyDownState; //按下向下键时的状态索引号
unsigned char KeyUpState; //按下向上键时的状态索引号
unsigned char KeyEnterState; //按下回车键时的状态索引号
void (*CurrentOperate)(); //当前状态应该执行的功能操作
} StateTab;
//
//
unsigned char code s0[]="BasicWork ";
unsigned char code s1[]="HighWork ";
unsigned char code s2[]="Basic01 ";
unsigned char code s3[]="Basic02 ";
unsigned char code s4[]="Basic03 ";
unsigned char code s5[]="Cancel ";
unsigned char code s6[]="High01 ";
unsigned char code s7[]="High02 ";
unsigned char code s8[]="High03 ";
unsigned char code s9[]="Cancel ";
unsigned char code s10[]=" ";
unsigned char code str[]="> ";
/*-------------------------------------------------------------*/
void Stat0(void)
{
Char_Set_XY(0,0,str);
Char_Set_XY(1,0,s0);
Char_Set_XY(0,1,s1);
Char_Set_XY(0,2,s10);
Char_Set_XY(0,3,s10);
}
/*-------------------------------------------------------------*/
void Stat1(void)
{
Char_Set_XY(0,0,s0);
Char_Set_XY(0,1,str);
Char_Set_XY(1,1,s1);
Char_Set_XY(0,2,s10);
Char_Set_XY(0,3,s10);
}
/*-------------------------------------------------------------*/
void Stat2(void)
{
Char_Set_XY(0,0,str);
Char_Set_XY(1,0,s2);
Char_Set_XY(0,1,s3);
Char_Set_XY(0,2,s4);
Char_Set_XY(0,3,s5);
}
/*-------------------------------------------------------------*/
void Stat3(void)
{
Char_Set_XY(0,0,s2);
Char_Set_XY(0,1,str);
Char_Set_XY(1,1,s3);
Char_Set_XY(0,2,s4);
Char_Set_XY(0,3,s5);
}
/*-------------------------------------------------------------*/
void Stat4(void)
{
Char_Set_XY(0,0,s2);
Char_Set_XY(0,1,s3);
Char_Set_XY(0,2,str);
Char_Set_XY(1,2,s4);
Char_Set_XY(0,3,s5);
}
/*-------------------------------------------------------------*/
void Stat5(void)
{
Char_Set_XY(0,0,s2);
Char_Set_XY(0,1,s3);
Char_Set_XY(0,2,s4);
Char_Set_XY(0,3,str);
Char_Set_XY(1,3,s5);
}
/*-------------------------------------------------------------*/
void Stat6(void)
{
Char_Set_XY(0,0,str);
Char_Set_XY(1,0,s6);
Char_Set_XY(0,1,s7);
Char_Set_XY(0,2,s8);
Char_Set_XY(0,3,s9);
}
/*-------------------------------------------------------------*/
void Stat7(void)
{
Char_Set_XY(0,0,s6);
Char_Set_XY(0,1,str);
Char_Set_XY(1,1,s7);
Char_Set_XY(0,2,s8);
Char_Set_XY(0,3,s9);
}
/*-------------------------------------------------------------*/
void Stat8(void)
{
Char_Set_XY(0,0,s6);
Char_Set_XY(0,1,s7);
Char_Set_XY(0,2,str);
Char_Set_XY(1,2,s8);
Char_Set_XY(0,3,s9);
}
/*-------------------------------------------------------------*/
void Stat9(void)
{
Char_Set_XY(0,0,s6);
Char_Set_XY(0,1,s7);
Char_Set_XY(0,2,s8);
Char_Set_XY(0,3,str);
Char_Set_XY(1,3,s9);
}
/*-------------------------------------------------------------*/
void Stat10(void)
{
Char_Set_XY(0,0,s10);
Char_Set_XY(0,1,"Basic01 is work-");
Char_Set_XY(0,2,"ing...... ");
Char_Set_XY(0,3,s10);
}
/*-------------------------------------------------------------*/
void Stat11(void)
{
Char_Set_XY(0,0,s10);
Char_Set_XY(0,1,"Basic02 is work-");
Char_Set_XY(0,2,"ing...... ");
Char_Set_XY(0,3,s10);
}
/*-------------------------------------------------------------*/
void Stat12(void)
{
Char_Set_XY(0,0,s10);
Char_Set_XY(0,1,"Basic03 is work-");
Char_Set_XY(0,2,"ing...... ");
Char_Set_XY(0,3,s10);
}
/*-------------------------------------------------------------*/
void Stat13(void)
{
Char_Set_XY(0,0,s10);
Char_Set_XY(0,1,"High01 is work-");
Char_Set_XY(0,2,"ing...... ");
Char_Set_XY(0,3,s10);
}
/*-------------------------------------------------------------*/
void Stat14(void)
{
Char_Set_XY(0,0,s10);
Char_Set_XY(0,1,"High02 is work-");
Char_Set_XY(0,2,"ing...... ");
Char_Set_XY(0,3,s10);
}
/*-------------------------------------------------------------*/
void Stat15(void)
{
Char_Set_XY(0,0,s10);
Char_Set_XY(0,1,"High03 is work-");
Char_Set_XY(0,2,"ing...... ");
Char_Set_XY(0,3,s10);
}
/*-------------------------------------------------------------*/
//数据结构数组
StateTab code KeyTab[MENU_SIZE]=
{
//当前,向下,向上,确定
{0,1,1,2, (*Stat0)}, //顶层 当前的状态索引号,按下向下键时的状态索引号,按下向上键时的状态索引号,按下回车键时的状态索引号,当前状态应该执行的功能操作
{1,0,0,6, (*Stat1)}, //顶层
{2,3,5,10, (*Stat2)}, //二层
{3,4,2,11, (*Stat3)}, //二层
{4,5,3,12, (*Stat4)}, //二层
{5,2,4,0, (*Stat5)}, //二层
{6,7,9,13, (*Stat6)}, //二层
{7,8,6,14, (*Stat7)}, //
{8,9,7,15, (*Stat8)},
{9,6,8,1 , (*Stat9)}, //二层
{10,2,2,2,(*Stat10)}, //三 LineTest
{11,3,3,3,(*Stat11)}, // RectTest
{12,4,4,4,(*Stat12)}, // ImgTest
{13,6,6,6,(*Stat13)}, //三 Univercity
{14,7,7,7,(*Stat14)}, // E-Mail
{15,8,8,8,(*Stat15)} // QQ Numeber
};
/*-------------------------------------------------------------*/
void MenuOperate(unsigned char key)
{
switch(key)
{
case 0x30: //向上的键
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyUpState;
break;
}
case 0x28: //回车键
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyEnterState;
break;
}
case 0x18: //向下的键
{
KeyFuncIndex=KeyTab[KeyFuncIndex].KeyDownState;
break;
}
//此处添加按键错误代码
}
//下面是执行按键的操作
KeyFuncPtr=KeyTab[KeyFuncIndex].CurrentOperate;
(*KeyFuncPtr)(); //执行当前的按键操作
} //*/
void Delay(unsigned int Ms)
{
unsigned int i,j;
while(Ms--)
{
for(i=0;i<50;i++)
for(j=0;j<10;j++)
;
}
}
/*****************************
***鍔熻兘锛氫覆琛屽彂閫佷竴瀛楄妭鏁版嵁
***杈撳叆鍙傛暟锛歞at-瑕佸彂閫佺殑瀛楄妭
***杈撳嚭鍙傛暟锛�--
*****************************/
void SendByte(unsigned char dat)
{
unsigned char i;
for(i=0;i<8;i++)
{
E_CLK=0;
if(dat&0x80)
RW_SID=1;
else
RW_SID=0;
E_CLK=1;
dat=dat<<1;
}
}
/*******************************
*** 鍔熻兘锛氬啓鍏ュ懡浠�
*** 杈撳叆鍙傛暟锛歝om-鍐欏懡浠�
*** 杈撳嚭鍙傛暟锛�----------
*******************************/
void SendCMD(unsigned char com)
{
SendByte(0xF8);//11111,00,0 RW=0,RS=0 鍚屾鏍囧織
SendByte(com&0xF0);//楂樺洓浣�
SendByte((com&0x0F)<<4);//浣庡洓浣�
}
//鍐欐樉绀烘暟鎹垨鍗曞瓧鑺傚瓧绗�
/*******************************
*** 鍔熻兘锛氬啓鍏ユ暟鎹�
*** 杈撳叆鍙傛暟锛歞at-鍐欐暟鎹�
*** 杈撳嚭鍙傛暟锛�----------
*******************************/
void SendDat(unsigned char dat)
{
SendByte(0xFA);//11111,01,0 RW=0,RS=1
SendByte(dat&0xF0);//楂樺洓浣�
SendByte((dat&0x0F)<<4);//浣庡洓浣�
}
//void LCD12864_InitPicture()
//{
// SendCMD(0x3E);
// SendCMD(0x01);
//}
/* 鍐欐眽瀛楀埌LCD 鎸囧畾鐨勪綅缃�
x_add鏄剧ずRAM鐨勫湴鍧�
dat1/dat2鏄剧ず姹夊瓧缂栫爜
*/
/******************************
***鍔熻兘锛氬垵濮嬪寲鍑芥暟
***杈撳叆鍙傛暟锛�------
***杈撳嚭鍙傛暟锛�------
*******************************/
//鍒濆鍖� LCM
void LCD12864_Init(void)
{
SendCMD(0x30);//鍔熻兘璁剧疆锛屼竴娆¢��8浣嶆暟鎹紝鍩烘湰鎸囦护闆�
SendCMD(0x0C);//0000,1100 鏁翠綋鏄剧ず锛屾父鏍噊ff锛屾父鏍囦綅缃畂ff
SendCMD(0x01);//0000,0001 娓匘DRAM
SendCMD(0x02);//0000,0010 DDRAM鍦板