?? menu.c
字號:
/***********************************
project: 凌陽SPCE61A單片機應用例程
item:菜單操作
version: V1.0
Description:
Author: 江蘇大學電氣信息工程學院
History:
Date Author
08/15/2005 秦云
***********************************/
#include "spce061v004.h"
#include "main.h"
#include "string.h"
typedef struct{
int MenuPage;
int MenuPointer;
int MenuUP;
int MenuNo;
}MenuCtrl;
MenuCtrl MCtrl;
//=========================================================================================
//菜單操作
//響應按鍵輸入,根據菜單狀態執行操作
//=========================================================================================
void Menu(int key)
{
switch(key)
{
case 0x000d: //up
MCtrl.MenuPointer=MCtrl.MenuPointer+0x0001;
if(MCtrl.MenuPointer>MCtrl.MenuNo) MCtrl.MenuPointer=MCtrl.MenuPointer-1;
if(MCtrl.MenuPointer>MCtrl.MenuUP+2)
{
MCtrl.MenuUP=MCtrl.MenuUP+2;
if(MCtrl.MenuUP+5>MCtrl.MenuNo) MCtrl.MenuUP=MCtrl.MenuUP-2;
}
MenuDisp();
break;
case 0x000b: //down
MCtrl.MenuPointer=MCtrl.MenuPointer-0x0001;
if(MCtrl.MenuPointer<1) MCtrl.MenuPointer=1;
if(MCtrl.MenuPointer<MCtrl.MenuUP)
{
MCtrl.MenuUP=MCtrl.MenuUP-2;
if(MCtrl.MenuUP<1) MCtrl.MenuUP=1;
}
MenuDisp();
break;
case 0x0007: //ok
switch(MCtrl.MenuPage)
{
case 1: //菜單頁1
switch(MCtrl.MenuPointer)
{
case 1: //系統
PositionPage(); //打開設置菜單
break;
case 2: //啟動
CirclePage();//OpenMenu(2,1); //進入運行窗口
break;
case 3: //系統
TrackPage(); //打開設置菜單
break;
case 4: //系統
FollowPage(); //打開設置菜單
break;
}
break;
case 2: //菜單頁2
}
break;
}
}
//=========================================================================================
//顯示菜單
//根據當前菜單頁信息MCtrl,顯示MCtrl.MenuUP開始的4個菜單項,
//每個菜單項首先讀取文字首地址的指針,由該指針獲得文字首地址,
//而后從該地址開始讀取菜單項文字。組成液晶顯示行輸出。
//=========================================================================================
void MenuDisp()
{
int i,line=0;
unsigned int *HZTable;
unsigned int j;
for(i=MCtrl.MenuUP;i<MCtrl.MenuUP+6;i=i+2)
{
unsigned int HZCode[10]={0xa1a0,0xa1a0,0xa1a0,0xa1a0,0xa1a0,
0xa1a0,0xa1a0,0xa1a0,0xa1a0,0xa1a0}; //為液晶行復初值
if(i<=MCtrl.MenuNo)
{
HZTable=ReadMenuCodeAddr(MCtrl.MenuPage)+i; //讀取"Ctrl.MenuPage"菜單頁第i項菜單文字的首地址指針
j=1;
HZTable=*HZTable; //菜單頁文字的首地址
while(*HZTable!=0)
{
HZCode[j]=*HZTable; //讀取文字
HZTable++;
j++;
}
if(i==MCtrl.MenuPointer) //如果該項菜單是指針指向的當前項,則文字首位增加【】
{
HZCode[0]=0xa1bc;
HZCode[j]=0xa1bd;
}
else
{
HZCode[0]=0xa1a0;
HZCode[j]=0xa1a0;
}
}
if(i<=MCtrl.MenuNo-1)
{
HZTable=ReadMenuCodeAddr(MCtrl.MenuPage)+i+1; //讀取"Ctrl.MenuPage"菜單頁第i項菜單文字的首地址指針
j=5;
HZTable=*HZTable; //菜單頁文字的首地址
while(*HZTable!=0)
{
HZCode[j]=*HZTable; //讀取文字
HZTable++;
j++;
}
if(i==MCtrl.MenuPointer-1) //如果該項菜單是指針指向的當前項,則文字首位增加【】
{
HZCode[4]=0xa1bc;
HZCode[j]=0xa1bd;
}
else
{
HZCode[7]=0xa1a0;
HZCode[j]=0xa1a0;
}
}
line++;
LCDWriteLine(line,HZCode);
}
}
//=========================================================================================
//打開菜單頁
//=========================================================================================
void OpenMenu(int MenuNo,int Pointer)
{
int* addr;
MCtrl.MenuPage=MenuNo; //本菜單頁是幾號菜單頁
addr=ReadMenuCodeAddr(MenuNo);
MCtrl.MenuNo=*addr; //本菜單頁一共有多少菜單項
MCtrl.MenuPointer=Pointer; //當前菜單項
MCtrl.MenuUP=1; //菜單顯示第一行
MenuDisp(); //顯示菜單
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -