/*****************************************************************************************
文件:app_touch.c
編者:張永輝 2013年6月24日
2013年6月25日 去掉了開機密碼
*****************************************************************************************/
#include "includes.h"
#include "GUI.h"
#include "bsp.h"
#include "bsptouch.h"
#include "bspdbg.h"
#include "jpgfile.h"
#include "JpegToBmp.h"
#include "\embed\source\lib\basetype.h"
#include "fun.h"
/*****************************************************************************************
觸摸屏按下檢測
*****************************************************************************************/
#define TOUCHC_NUM 16 //檢測點數目
static struct g_CheakPiontChekd
{
u32 beIsin; //上次是否在本范圍內
u32 x0;
u32 y0;
u32 x1;
u32 y1;
}chd[TOUCHC_NUM];
//***********************設置要檢測的點***************************************************
void TouchcSet(u32 index,u32 x0,u32 y0,u32 x1,u32 y1)
{
chd[index].x0 = x0;
chd[index].y0 = y0;
chd[index].x1 = x1;
chd[index].y1 = y1;
}
/*************************檢測某個點的按下,或者放開事件**********************************
返回: 0沒有發生
1有進入該區域
2有離開該區域
*/
int TouchcClickUpDown(u32 index)
{
u32 x,y;
u32 yes = 0;
if (index >= TOUCHC_NUM)
{
return 0;
}
x = BspTouchGetX();
y = BspTouchGetY();
//本次在范圍內
if((x > chd[index].x0 && x < chd[index].x1) && (y > chd[index].y0 && y < chd[index].y1))
{
//若上次不在范圍內===被按下了
if(chd[index].beIsin == 0)
{
yes = 1;
if(index !=0) //0號測試用的,不叫
{
//蜂鳴器聲音
//BspBeepOne();
}
}
chd[index].beIsin = 1;
}else
//本次不在范圍內
{
//若上次在范圍內===被按松開了
if(chd[index].beIsin == 1)
{
yes = 2;
}
chd[index].beIsin = 0; //不在范圍內
}
return yes;
}
/*************************顯示圖片,并與某個鍵號綁定**************************************
參數:keyNum == 0時表示不幫鍵號
注: 綁定后,便可以根據鍵號,查詢是否按下或放開了
VS2008使用函數此處不能命中,于是用宏了
*/
GUI_JPEG_INFO jpeginfo;
#define TouchcJpeg(pDATA,X0,Y0,keyNum)\
{\
if(keyNum>=0)\
{\
GUI_JPEG_Draw(pDATA,sizeof(pDATA),X0,Y0);\
if(keyNum > 0 )\
{\
GUI_JPEG_GetInfo(pDATA,sizeof(pDATA),&jpeginfo);\
TouchcSet(keyNum,X0,Y0,(X0+jpeginfo.XSize),(Y0+jpeginfo.YSize));\
}\
}\
}
//從內存調用解碼后的數據,直接顯示,在M3上顯示速度明顯提高
//參數:keyNum == 0時表示不綁定鍵號
//換成本函數后,毛擊VS2008會死機,原因不明
void TouchcBmp(GUI_BITMAP * pBMP,int X0,int Y0,int keyNum) //TouchcBmp(BMP
{
int x1;
int y1;
x1 = X0 + pBMP->XSize;
y1 = Y0+pBMP->YSize;
if (keyNum >= 0)
{
//從內存顯示圖片
GUI_DrawBitmap(pBMP,X0,Y0);
if (keyNum > 0)
{
//綁定建號
TouchcSet(keyNum,X0,Y0,x1,y1);
}
}
}
//輸入框
void TouchcInput(int X0,int Y0,int X1,int Y1,int keyNum)
{
//實驗
GUI_DrawLine(X0,Y0,X1,Y0);
GUI_DrawLine(X1,Y0,X1,Y1);
GUI_DrawLine(X0,Y0,X0,Y1);
GUI_DrawLine(X0,Y1,X1,Y1);
TouchcSet(keyNum,X0,Y0,X1,Y1);
}
/*****************************************************************************************
功能函數支持
*****************************************************************************************/
void StateFun_j_jar_n(void);
void TouchcJpeg_beep(void);
u32 StateFun_PreSent_Covert(u32 i);//將百分比轉換成指針的角度
void StateFun_Press_n(void); //主頁面要顯示的指針和數值
void StateFun_Press_4page(void); //4頁面要顯示的 指針和數值
void StateFun_GasCheck(void); //氣體檢測時要顯示的數值
void StateFun_DisAllFunKey(u32 KeyIndex); //顯示功能按鍵
/*****************************************************************************************
狀態機
*****************************************************************************************/
//------------------狀態定義------------
#define C_SETUP_LOG 1 //啟動顯示LOG
#define C_MAIN_PAGE 2 //主頁面狀態
#define C_PASSWD 3 //輸入密碼狀態
#define C_GAS_CHECK 4 //檢測
#define C_SYS_ALARM 5 //系統報警
#define C_HARD_ERR_CHECK 6 //
#define C_4PAGE 7 //4頁面
#define C_PASSWD_SET 8 //密碼設置
#define C_4PAGE_SET 9 //氣瓶參數設置
#define C_SYS_SET 10 //系統設置
#define C_IDLE 11 //啟動顯示LOG
#define C_KEYBORD 12 //啟動鍵盤輸入
//------------------狀態聲明------------
u32 StateSetUp(void);
u32 StateMainPage(void);
u32 StatePassWd(void);
u32 StateGasCheck(void);
u32 StateSysAlarm(void);
u32 StateHardErrCheck(void);
u32 State4page(void);
u32 StatePasswdSet(void);
u32 State4pageSet(void);
u32 StateSysSet(void);
u32 StateKeyBord(void);
//------------------變量----------------
u32 StateBc = C_SETUP_LOG; //前一個狀態
u32 State = C_SETUP_LOG; //當前狀態
u32 MainPageJarNum = 1; //在主頁面顯示的瓶號
u32 StatNum = 0; //進入某個狀態的計數器,剛進入時等于0。
u32 StateChgReq = 0; //狀態切換申請,由子狀態發起,主狀態在切換前清除
u32 StateMsgForm = 0; //消息發出者 == 狀態值(狀態間消息傳遞)
u32 StateMsg1; //消息內容
u32 StateMsg2;
u32 StateMsg3;
//**************************************狀態機調度函數************************************
//調用總入口,每20ms調用一次
void app_touch_test(void)
{
//---------------按鍵測試函數-------
u32 x,y;
BspTouchBeginOnce();
x = BspTouchGetX();
y = BspTouchGetY();
TouchcSet(0,0,0,480,272);
if(TouchcClickUpDown(0))
{
DBG_S("xxx = ");DBG_U32N(x);
DBG_S("yyy = ");DBG_U32N(y);
}
//--------------狀態機開始----------
switch(State)
{
case C_SETUP_LOG:
State = StateSetUp();
break;
case C_IDLE:
case C_MAIN_PAGE:
State = StateMainPage();
break;
case C_PASSWD:
State = StatePassWd();
break;
case C_GAS_CHECK:
State = StateGasCheck();
break;
case C_SYS_ALARM:
State = StateSysAlarm();
break;
case C_HARD_ERR_CHECK:
State = StateHardErrCheck();
break;
case C_4PAGE:
State = State4page();
break;
case C_PASSWD_SET:
State = StatePasswdSet();
break;
case C_4PAGE_SET:
State = State4pageSet();
break;
case C_SYS_SET:
State= StateSysSet();
break;
case C_KEYBORD:
State= StateKeyBord();
break;
default:
State = C_MAIN_PAGE;
break;
}
//--------------狀態改變時的操作----
if(StateBc != State)
{
StateBc = State;
StatNum = 0; //保證剛進入狀態時為0
}else
{
StatNum++;
}
}
/***************************************鍵盤輸入*****************************************/
/*
入參: StateMsgForm, 鍵盤輸入結束后要返回的地方
StateMsg1 鍵盤X位置
StateMsg2 鍵盤Y位置
輸出: StateMsgForm = C_KEYBORD
StateMsg1 = 0 取消
StateMsg1 = 1 確定
StateMsg2; 確定時,鍵盤輸入的數值
*/
#define KEYH 40 //每個鍵盤格子的長,寬
#define KEYL 40
static int keyvaule = 0;
static int keyvaulelen = 0;
u32 StateKeyBord(void)
{
u32 Click;
u32 i;
//在此可以檢測 StateMsgForm 判斷鍵盤請求來源
//剛開始進本狀態
if (StatNum==0)
{
//顯示背景
TouchcBmp(&BMP.j_keybord,StateMsg1,StateMsg2,0);
//格子開始的相對位置
StateMsg1 +=3;
StateMsg2 +=50;
TouchcInput(StateMsg1 ,StateMsg2,StateMsg1+KEYH ,StateMsg2+KEYL,1); //按鍵1
TouchcInput(StateMsg1+KEYH ,StateMsg2,StateMsg1+KEYH*2,StateMsg2+KEYL,2); //按鍵2
TouchcInput(StateMsg1+KEYH*2,StateMsg2,StateMsg1+KEYH*3,StateMsg2+KEYL,3); //按鍵3
TouchcInput(StateMsg1+KEYH*3,StateMsg2,StateMsg1+KEYH*4,StateMsg2+KEYL,11); //按鍵 CLR
StateMsg2 +=KEYL;
TouchcInput(StateMsg1 ,StateMsg2,StateMsg1+KEYH ,StateMsg2+KEYL,4); //按鍵4
TouchcInput(StateMsg1+KEYH ,StateMsg2,StateMsg1+KEYH*2,StateMsg2+KEYL,5); //按鍵5
TouchcInput(StateMsg1+KEYH*2,StateMsg2,StateMsg1+KEYH*3,StateMsg2+KEYL,6); //按鍵6
TouchcInput(StateMsg1+KEYH*3,StateMsg2,StateMsg1+KEYH*4,StateMsg2+KEYL,12); //按鍵 回退
StateMsg2 +=KEYL;
TouchcInput(StateMsg1 ,StateMsg2,StateMsg1+KEYH ,StateMsg2+KEYL,7); //按鍵7
TouchcInput(StateMsg1+KEYH ,StateMsg2,StateMsg1+KEYH*2,StateMsg2+KEYL,8); //按鍵8
TouchcInput(StateMsg1+KEYH*2,StateMsg2,StateMsg1+KEYH*3,StateMsg2+KEYL,9); //按鍵9
TouchcInput(StateMsg1+KEYH*3,StateMsg2,StateMsg1+KEYH*4,StateMsg2+KEYL,13); //按鍵 - 取消
StateMsg2 +=KEYL;
TouchcInput(StateMsg1 ,StateMsg2,StateMsg1+KEYH ,StateMsg2+KEYL,10); //按鍵10 0
TouchcInput(StateMsg1+KEYH ,StateMsg2,StateMsg1+KEYH*2,StateMsg2+KEYL,14); //按鍵11 .
TouchcInput(StateMsg1+KEYH*2,StateMsg2,StateMsg1+KEYH*3+KEYH,StateMsg2+KEYL,15);//按鍵12 確定 占2個格子
//還原其值
StateMsg1 -= 3;
StateMsg2 -=50;
StateMsg2 -=KEYL*3;
GUI_SetTextMode(GUI_TEXTMODE_NORMAL);
GUI_SetColor(0);
GUI_SetBkColor((GUI_COLOR)-1); //
//GUI_SetTextMode(GUI_TEXTMODE_TRANS); //文本模式==透明模式
GUI_SetFont(&GUI_Font16B_ASCII); //數字大小
DBG_S("State = StateKeyBord.\n");
//鍵值初始化
keyvaulelen = 0;
keyvaule = 0;
}
//輸入數字檢測
for (i = 1;i<= 10;i++)
{
Click = TouchcClickUpDown(i);
if(Click==1)
{
//密碼長度限制
if (keyvaulelen>=6)
{
break;
}
keyvaulelen++;
keyvaule = keyvaule*10 + i%10; //10代表0
DBG_U32N(i);
GUI_DispDecAt(keyvaule,StateMsg1+20,StateMsg2+30,keyvaulelen);
}
}
//清除
Click = TouchcClickUpDown(11);
if(Click==1)
{
DBG_U32N(11);
keyvaule = 0;
keyvaulelen = 0;
GUI_DispStringAt(" ",StateMsg1+20,StateMsg2+30);
}
//回退
Click = TouchcClickUpDown(12);
if(Click==1)
{
//密碼長度限制
if (keyvaulelen > 0)
{
keyvaule = keyvaule/10;
keyvaulelen--;
DBG_U32N(11);
GUI_DispStringAt(" ",StateMsg1+20,StateMsg2+30);
GUI_DispDecAt(keyvaule,StateMsg1+20,StateMsg2+30,keyvaulelen);
//GUI_SetTextMode(GUI_TEXTMODE_TRANS); //文本模式==透明模式
}
}
//取消
Click = TouchcClickUpDown(13);
if(Click==1)
{
StateChgReq = StateMsgForm; //返回原來的狀態
StateMsgForm = C_KEYBORD;
StateMsg1 = 0; //表示取消
return C_IDLE;
}
//確定
Click = TouchcClickUpDown(15); //返回原來的狀態
if(Click==1)
{
StateChgReq = StateMsgForm;
StateMsgForm = C_KEYBORD;
StateMsg1 = 1; //表示確定
StateMsg2 = keyvaule; //返回鍵值
return C_IDLE;
}
return C_KEYBORD;
}
//**************************************主頁面********************************************
u32 StateMainPage(void)
{
u32 Click;
//狀態切換申請
if(StateChgReq != 0)
{
switch(StateChgReq)
{
//此三個狀態會相互轉移,或回到主界面
case C_SYS_SET:
StateChgReq = 0;
return C_SYS_SET;
case C_4PAGE_SET:
StateChgReq = 0;
return C_4PAGE_SET;
case C_PASSWD_SET:
StateChgReq = 0;
return C_PASSWD_SET;
case C_KEYBORD:
StateChgReq = 0;
return C_KEYBORD;
case C_PASSWD:
StateChgReq = 0;
return C_PASSWD;
default:
StateChgReq = 0;
break;
}
}
//如果沒有輸入密碼則需要輸入 開機密碼暫時不要了
//if (IsPasswordOk()!= TRUE)
//{
// return C_PASSWD;
//}
//如果密碼通過了,則是要系統設置了。出來的時候要去掉。
//if (IsPasswordOk()== TRUE)
//{
// return C_SYS_SET;
//}
//顯示主頁面
if (StatNum==0)
{
//主頁面
TouchcBmp(&BMP.j_manpage,0,0,0);
StateFun_j_jar_n(); //顯示第n瓶
JarSetnSet(MainPageJarNum); //設置瓶號
StateFun_Press_n(); //顯示瓶子壓力,應該有刷新
//顯示功能按鈕,并綁定按鍵號
TouchcBmp(&BMP.j_but_forward_up, 0 ,226,1);
TouchcBmp(&BMP.j_but_back_up , 60 ,226,2);
TouchcBmp(&BMP.j_but_4page_up , 120,226,3);
TouchcBmp(&BMP.j_but_gas_up , 180,226,4);
TouchcJpeg( j_but_had_check_up, 240,226,5);
TouchcBmp(&BMP.j_but_alarm_up, 300,226,6);
TouchcJpeg_beep(); //顯示聲音是否關閉
TouchcBmp(&BMP.j_but_set_up, 420,226,8);
DBG_S("State = StateMainPage\n");
}
//根據按鍵號,檢測每個按鍵的按下、放開狀態
//【按鍵1】 瓶號切換:遞增
Click = TouchcClickUpDown(1);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_forward_down,0,226,0);
}
if(Click==2) //放開
{
TouchcBmp(&BMP.j_but_forward_up,0,226,0);
MainPageJarNum++;
if(MainPageJarNum > 4)
{
MainPageJarNum = 1;
}
StateFun_j_jar_n();
}
//【按鍵2】瓶號切換:遞減
Click = TouchcClickUpDown(2);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_back_down,60,226,0);
}
if(Click==2) //放開
{
TouchcBmp(&BMP.j_but_back_up,60,226,0);
MainPageJarNum--;
if(MainPageJarNum <= 0)
{
MainPageJarNum = 4;
}
StateFun_j_jar_n();
}
//【按鍵3】顯示4個頁面
Click = TouchcClickUpDown(3);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_4page_down , 120,226,0);
}
if(Click==2) //放開
{
TouchcBmp(&BMP.j_but_4page_up , 120,226,0);
return C_4PAGE;
}
//【按鍵4】氣體檢測
Click = TouchcClickUpDown(4);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_gas_down , 180,226,0);
}
if(Click==2) //放開
{
return C_GAS_CHECK;
}
//【按鍵5】 硬件故障檢測
Click = TouchcClickUpDown(5);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_had_check_down,240,226,0);
}
if(Click==2) //放開
{
return C_HARD_ERR_CHECK;
}
//【按鍵6 】系統報警檢測
Click = TouchcClickUpDown(6);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_alarm_down, 300,226,0);
}
if(Click==2) //放開狀態轉移
{
return C_SYS_ALARM;
}
//【按鍵7】 關閉/開啟聲音
Click = TouchcClickUpDown(7);
if(Click==1) //按下
{
if (BeepIsCloseGet())
{
BeepSet(false);
}else
{
BeepSet(true);
}
TouchcJpeg_beep();
}
//【按鍵8】 系統設置
Click = TouchcClickUpDown(8);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_set_down, 420,226,0);
}
if(Click==2) //放開
{
return C_SYS_SET;
}
return C_IDLE;
}
//**************************************系統設置******************************************
#define CC 3
//是否顯示指針
bool IsDisplayPointer = true;
bool IsDisplayPointerGet(void)
{
return IsDisplayPointer;
}
void IsDisplayPointerSet(bool yes)
{
IsDisplayPointer = yes;
}
//是否顯示指針
void StateSysSet_IsDisplayPointer(bool yes)
{
if(yes == false)
{
TouchcBmp(&BMP.j_but_no,135,145,13);
TouchcBmp(&BMP.j_but_yes,213,145,14);
}else
{
TouchcBmp(&BMP.j_but_yes,135,145,13);
TouchcBmp(&BMP.j_but_no,213,145,14);
}
}
//是否可燃氣體檢測
void StateSysSet_IsGasCkeck(bool yes)
{
if(yes == false)
{
TouchcBmp(&BMP.j_but_no,135,113,11);
TouchcBmp(&BMP.j_but_yes,213,113,12);
}else
{
TouchcBmp(&BMP.j_but_yes,135,113,11);
TouchcBmp(&BMP.j_but_no,213,113,12);
}
}
//是否低液位報警
void StateSysSet_IsLowAlarm(bool yes)
{
if(yes == false)
{
TouchcBmp(&BMP.j_but_no,135,81,9);
TouchcBmp(&BMP.j_but_yes,213,81,10);
}else
{
TouchcBmp(&BMP.j_but_yes,135,81,9);
TouchcBmp(&BMP.j_but_no,213,81,10);
}
}
//復選框:瓶子個數
void StateSysSet_JarNumber(u32 num)
{
//瓶個數選擇
TouchcBmp(&BMP.j_but_no,135,48,3);
TouchcBmp(&BMP.j_but_no,213,48,4);
TouchcBmp(&BMP.j_but_no,289,48,5);
TouchcBmp(&BMP.j_but_no,363, 48,6);
switch(num)
{
case 1:
TouchcBmp(&BMP.j_but_yes,135,48,3);
break;
case 2:TouchcBmp(&BMP.j_but_yes,213,48,4);
break;
case 3:TouchcBmp(&BMP.j_but_yes,289,48,5);
break;
case 4:TouchcBmp(&BMP.j_but_yes,363, 48,6);
break;
}
}
u32 StateSysSet(void)
{
u32 Click;
int i;
//設置前要輸入密碼
//if (IsPasswordOk()!= TRUE)
//{
// StateChgReq = C_PASSWD;
// return C_IDLE;
//}
//顯示主頁面
if (StatNum==0)
{
//顯示黑色底,以覆蓋不必要的按鈕
TouchcBmp(&BMP.j_back_480x60,0,220,0);
//主頁面
TouchcBmp(&BMP.j_sys_set,0,0,0);
//橫條顯示
TouchcBmp(&BMP.j_but_sys_set,0,0,0);
//顯示功能按鈕,并綁定按鍵號
TouchcBmp(&BMP.j_but_forward_up, 0 ,226,1);
TouchcBmp(&BMP.j_but_back_up , 60 ,226,2);
TouchcBmp(&BMP.j_but_manpage_up, 420,226,8);
//復選框:瓶子個數
StateSysSet_JarNumber(JarNumberGet()); //鍵號 = 3 4 5 6
//復選框:是否低液位報警
StateSysSet_IsLowAlarm(IsLowAlarmGet()); //鍵號 = 9 10
//復選框:是否進行氣體濃度監測
StateSysSet_IsGasCkeck(IsGasCkeckGet()); //鍵號 = 11 12
//復選框:是否顯示指針
StateSysSet_IsDisplayPointer(IsDisplayPointerGet()); //鍵號 = 13 14
DBG_S("State = StateSysSet\n");
}
//復選框:瓶個數選擇
for (i = 1; i <= 4;i++ )
{
Click = TouchcClickUpDown(2+i); //3 4 5 6
if(Click==1)
{
JarNumberSet(i);
StateSysSet_JarNumber(JarNumberGet());
}
}
//復選框:是否低液位報警
Click = TouchcClickUpDown(9);
if(Click == 1)
{
IsLowAlarmSet(true);
StateSysSet_IsLowAlarm(IsLowAlarmGet());
}
Click = TouchcClickUpDown(10);
if(Click == 1)
{
IsLowAlarmSet(false);
StateSysSet_IsLowAlarm(IsLowAlarmGet());
}
//復選框:是否進行氣體濃度監測
Click = TouchcClickUpDown(11);
if(Click == 1)
{
IsGasCkeckSet(true);
StateSysSet_IsGasCkeck(IsGasCkeckGet());
}
Click = TouchcClickUpDown(12);
if(Click == 1)
{
IsGasCkeckSet(false);
StateSysSet_IsGasCkeck(IsGasCkeckGet());
}
//復選框:是否顯示指針
Click = TouchcClickUpDown(13);
if(Click == 1)
{
IsDisplayPointerSet(true);
StateSysSet_IsDisplayPointer(IsDisplayPointerGet());
}
Click = TouchcClickUpDown(14);
if(Click == 1)
{
IsDisplayPointerSet(false);
StateSysSet_IsDisplayPointer(IsDisplayPointerGet());
}
//【按鍵1】
Click = TouchcClickUpDown(1);
if(Click==1)
{
TouchcBmp(&BMP.j_but_forward_down,0,226,0);
}
if(Click==2)
{
StateChgReq = C_PASSWD_SET;
return C_IDLE;
}
//【按鍵2】
Click = TouchcClickUpDown(2);
if(Click==1)
{
TouchcBmp(&BMP.j_but_back_down,60,226,0);
}
if(Click==2)
{
JarSetnSet(1);
StateChgReq = C_4PAGE_SET;
return C_IDLE;
}
//【按鍵8】
Click = TouchcClickUpDown(8);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_manpage_dowm , 420,226,0);
}
if(Click==2) //放開狀態轉移
{
//PasswordOkSet(false); //
return C_IDLE;
}
return C_SYS_SET;
}
//**************************************更改密碼******************************************
u32 StatePasswdSet(void)
{
int static newpasd;
u32 Click;
u32 i;
//顯示主頁面
if (StatNum==0)
{
//
//if(StateMsgForm!=C_KEYBORD)
//{
TouchcBmp(&BMP.j_passwd_set,0,0,0);
//}
TouchcBmp(&BMP.j_but_passwd_set,0,0,0);
//顯示功能按鈕,并綁定按鍵號
TouchcBmp(&BMP.j_but_forward_up, 0 ,226,1);
TouchcBmp(&BMP.j_but_back_up , 60 ,226,2);
TouchcBmp(&BMP.j_but_manpage_up, 420,226,8);
///輸入框位置檢測
TouchcInput(181,46 ,285,59,3); //源密碼
TouchcInput(181,84 ,285,96,4); //新密碼
TouchcInput(181,123,285,135,5); //新密碼
//
GUI_SetTextMode(GUI_TEXTMODE_TRANS); //文本模式==透明模式
GUI_SetFont(&GUI_FontComic18B_ASCII);
DBG_S("State = StateSysSet\n");
}
//【按鍵3,4,5】
for (i = 0;i < 3;i++)
{
Click = TouchcClickUpDown(3+i);
if(Click==1)
{
StateMsgForm = C_PASSWD_SET; //鍵盤將返回到本狀態
StateMsg1 = 0; //鍵盤的起始位置
StateMsg2 = 0;
StateMsg3 = 3+i; //鍵盤不會改變此值,當有多個輸入時需要
//請求狀態轉移
StateChgReq = C_KEYBORD;
return C_IDLE;
}
}
//檢測鍵盤的返回
if(StateMsgForm==C_KEYBORD)
{
StateMsgForm = 0;
//按鍵3,獲取到鍵盤的值了
if(StateMsg3==3)
{
//確定鍵
if(StateMsg1==1)
{
//GUI_DispDecAt(keyvaule,240+2,128+2,keyvaulelen);
GUI_DispStringAt("******",181+2,46+2);
if(PasswordGet()==keyvaule)
{
//密碼通過
GUI_DispStringAt("ok ",295,46);
newpasd = -2;
}else
{
//密碼檢測失敗
GUI_DispStringAt("err",295,46);
newpasd = -1;
}
}
//取消鍵
if(StateMsg1==0)
{
//獲取到的鍵值
}
}
//新密碼
if(StateMsg3==4)
{
//確定鍵
if(StateMsg1==1)
{
GUI_DispStringAt("******",183,88);
if(newpasd==-2) //判斷舊密碼檢驗通過才行
{
newpasd = keyvaule;
GUI_DispStringAt("ok ",295,86);
}else
{
GUI_DispStringAt("err",295,86);
}
}
//取消鍵
if(StateMsg1==0)
{
//獲取到的鍵值
}
}
//新密碼
if(StateMsg3==5)
{
//確定鍵
if(StateMsg1==1)
{
GUI_DispStringAt("******",183,125);
//新密碼設置成功
if(newpasd == keyvaule)
{
PasswordSet(keyvaule);
GUI_DispStringAt("ok ",295,123);
}else
{
GUI_DispStringAt("err",295,123);
}
}
//取消鍵
if(StateMsg1==0)
{
//獲取到的鍵值
}
}
}
//【按鍵1】
Click = TouchcClickUpDown(1);
if(Click==1)
{
TouchcBmp(&BMP.j_but_forward_down,0,226,0);
}
if(Click==2)
{
JarSetnSet(4);
StateChgReq = C_4PAGE_SET;
return C_IDLE;
}
//【按鍵2】
Click = TouchcClickUpDown(2);
if(Click==1)
{
TouchcBmp(&BMP.j_but_back_down,60,226,0);
}
if(Click==2)
{
StateChgReq = C_SYS_SET;
return C_IDLE;
}
//【按鍵8】
Click = TouchcClickUpDown(8);
if(Click==1)
{
TouchcBmp(&BMP.j_but_manpage_dowm , 420,226,0);
}
if(Click==2)//回主界面
{
return C_IDLE;
}
return C_PASSWD_SET;
}
//**************************************4個氣瓶設置***************************************
// 根據要設置的瓶號,顯示標簽
void State4pageSet_dis_page(u32 n)
{
switch(n)
{
case 1:
TouchcBmp(&BMP.j_but_jar1_set,0,0,0);
break;
case 2:TouchcBmp(&BMP.j_but_jar2_set,0,0,0);
break;
case 3:TouchcBmp(&BMP.j_but_jar3_set,0,0,0);
break;
case 4:TouchcBmp(&BMP.j_but_jar4_set,0, 0,0);
break;
}
}
u32 State4pageSet(void)
{
u32 Click;
int i;
//顯示主頁面
if (StatNum==0)
{
//主頁面
TouchcBmp(&BMP.j_4page_set,0,0,0);
//氣瓶設置標簽
State4pageSet_dis_page(JarSetnGet());
//顯示功能按鈕,并綁定按鍵號
TouchcBmp(&BMP.j_but_forward_up, 0 ,226,1);
TouchcBmp(&BMP.j_but_back_up , 60 ,226,2);
TouchcBmp(&BMP.j_but_manpage_up, 420,226,8);
//獲取當前值
TouchcBmp(&BMP.j_but_get_value_up, 384,107,3);
TouchcBmp(&BMP.j_but_get_value_up, 384,158,4);
//氣瓶容量設置
TouchcInput(385, 57,450,69,5);
TouchcInput(385, 83,450,95,6);
TouchcInput(385,136,450,148,7);
//本狀態字體顏色
GUI_SetColor(GUI_RED);
GUI_SetFont(&GUI_Font8x12_ASCII);
//顯示
GUI_GotoXY(385, 57);GUI_DispDecMin(JarMaxGasGet()); //最大氣罐容量
GUI_GotoXY(385, 83);GUI_DispDecMin(JarGasLowPfGet()); //最小電容值
GUI_GotoXY(385, 136);GUI_DispDecMin(JarGasHigPfGet()); //最大電容值
//顯示實時值
GUI_GotoXY(161, 57);GUI_DispDecMin(JarGasNowPfGet()); //實時電容
GUI_GotoXY(161, 83);GUI_DispDecMin(JarGasNowGet()); //實時液位
GUI_GotoXY(161, 108);GUI_DispFloatFix(JarPressNowGet(),4,2); //實時瓶壓
GUI_GotoXY(161, 136);GUI_DispFloatFix(JarBufferPressNowGet(),4,2); //實時緩沖壓
GUI_GotoXY(161, 164);GUI_DispDecMin(JarTemperatureNowGet()); //實時溫度
//
DBG_S("State = State4pageSet :");DBG_U32N(JarSetnGet());
}
//【按鍵3】獲取當前值,空瓶電容
Click = TouchcClickUpDown(3);
if(Click==1)
{
TouchcBmp(&BMP.j_but_get_value_down, 384,107,0);
}
if(Click==2)
{
TouchcBmp(&BMP.j_but_get_value_up, 384,107,0);
}
//【按鍵4】獲取當前值,滿瓶電容
Click = TouchcClickUpDown(4);
if(Click==1)
{
TouchcBmp(&BMP.j_but_get_value_down, 384,158,0);
}
if(Click==2)
{
TouchcBmp(&BMP.j_but_get_value_up , 384,158,0);
}
for (i = 0;i<3;i++)
{
//【按鍵5,6,7】氣瓶容量設置 空瓶設置 滿屏設置
Click = TouchcClickUpDown(5+i);
if(Click==2)
{
StateMsgForm = C_4PAGE_SET; //鍵盤將返回到本狀態
StateMsg1 = 0; //鍵盤的起始位置
StateMsg2 = 0;
StateMsg3 = 5+i; //鍵盤不會改變此值,當有多個輸入時需要
//請求狀態轉移
StateChgReq = C_KEYBORD;
return C_IDLE;
}
}
//檢測鍵盤的返回
if(StateMsgForm==C_KEYBORD)
{
StateMsgForm = 0;
if(StateMsg3==5) //氣瓶容量設置
{
//確定鍵
if(StateMsg1==1)
{
//獲取到的鍵值 keyvaule
GUI_DispStringAt(" ",385, 57);
GUI_GotoXY(385, 57);
GUI_DispDecMin(keyvaule);
JarMaxGasSet(keyvaule);
}
}
if(StateMsg3==6) //空瓶設置
{
//確定鍵
if(StateMsg1==1)
{
//獲取到的鍵值 keyvaule
GUI_DispStringAt(" ",385, 83);
GUI_GotoXY(385, 83);
GUI_DispDecMin(keyvaule);
JarGasLowPfSet(keyvaule);
}
}
if(StateMsg3==7) //滿屏設置
{
//確定鍵
if(StateMsg1==1)
{
//獲取到的鍵值 keyvaule
GUI_DispStringAt(" ",385, 136);
GUI_GotoXY(385, 136);
GUI_DispDecMin(keyvaule);
JarGasHigPfSet(keyvaule);
}
}
}
//【按鍵1】
Click = TouchcClickUpDown(1);
if(Click==1)
{
TouchcBmp(&BMP.j_but_forward_down,0,226,0);
}
if(Click==2)
{
//根據標簽,界面向前切換
if(JarSetnGet()==1)
{
StateChgReq = C_SYS_SET;
}else
{
JarSetnSet( JarSetnGet() - 1);
StateChgReq = C_4PAGE_SET;
}
return C_IDLE;
}
//【按鍵2】
Click = TouchcClickUpDown(2);
if(Click==1)
{
TouchcBmp(&BMP.j_but_back_down,60,226,0);
}
if(Click==2)
{
//根據標簽,界面向后切換
if(JarSetnGet()==4)
{
StateChgReq = C_PASSWD_SET;
}else
{
JarSetnSet( JarSetnGet()+1);
StateChgReq = C_4PAGE_SET;
}
return C_IDLE;
}
//【按鍵8】
Click = TouchcClickUpDown(8);
if(Click==1)
{
TouchcBmp(&BMP.j_but_manpage_dowm , 420,226,0);
}
if(Click==2)
{
return C_IDLE;
}
return C_4PAGE_SET;
}
//**************************************系統報警******************************************
void StateSysAlarm_fun(void)
{
int i;
//低液位
for(i=0;i<4;i++)
{
if(IsLngLow(i+1))
{
TouchcBmp(&BMP.j_alarm_yes,197,62+i*25,0);
}
}
//高液位
for(i=0;i<4;i++)
{
if(IsLngHig(i+1))
{
TouchcBmp(&BMP.j_alarm_yes,360,62+i*25,0);
}
}
}
u32 StateSysAlarm(void)
{
u32 Click;
//顯示主頁面
if (StatNum==0)
{
TouchcBmp(&BMP.j_sys_alarm,0,0,0); //本頁主界面
StateSysAlarm_fun(); //高低液位檢測
StateFun_DisAllFunKey(1); //顯示所有的功能按鍵,綁定1號鍵
TouchcBmp(&BMP.j_but_alarm_down, 300,226,0);//顯示按下的功能鍵
}
//按鍵8
Click = TouchcClickUpDown(1);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_alarm_up, 300,226,0);
}
if(Click==2) //放開狀態轉移
{
return C_IDLE;
}
return C_SYS_ALARM;
}
//**************************************硬件故障檢測**************************************
void StateHardErrCheck_fun(void)
{
int i;
//斷路檢測
for(i=0;i<4;i++)
{
if(IsJarCapBreak(i+1))
{
TouchcBmp(&BMP.j_alarm_yes,427,58+i*28,0);
}
}
//短路檢測
for(i=0;i<4;i++)
{
if(IsJarCapShort(i+1))
{
TouchcBmp(&BMP.j_alarm_yes,206,58+i*28,0);
}
}
}
u32 StateHardErrCheck(void)
{
u32 Click;
//顯示主頁面
if (StatNum==0)
{
TouchcBmp(&BMP.j_hard_err_check,0,0,0); //本頁主界面
StateHardErrCheck_fun();
StateFun_DisAllFunKey(1); //顯示所有的功能按鍵,綁定1號鍵
TouchcBmp(&BMP.j_but_had_check_down, 240,226,0); //顯示按下的功能鍵
}
//按鍵8
Click = TouchcClickUpDown(1);
if(Click==1) //按下
{
TouchcJpeg(j_but_had_check_up, 240,226,0);
}
if(Click==2) //放開狀態轉移
{
return C_IDLE;
}
return C_HARD_ERR_CHECK;
}
//**************************************氣體檢測******************************************
u32 StateGasCheck(void)
{
u32 Click;
//顯示主頁面
if (StatNum==0)
{
TouchcBmp(&BMP.j_gas_check,0,0,0); //本頁主界面
StateFun_DisAllFunKey(1); //顯示所有的功能按鍵,綁定1號鍵
TouchcBmp(&BMP.j_but_gas_down , 180,226,0); //顯示按下的功能鍵
StateFun_GasCheck(); //氣體檢測,并報警
}
//按鍵1
Click = TouchcClickUpDown(1);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_gas_up , 180,226,0);
}
if(Click==2) //放開狀態轉移
{
return C_IDLE;
}
return C_GAS_CHECK;
}
/***************************************顯示4個頁面**************************************/
u32 State4page(void)
{
u32 Click;
//顯示主頁面
if (StatNum==0)
{
TouchcBmp(&BMP.j_4page,0,0,0);
StateFun_DisAllFunKey(1); //顯示所有的功能按鍵,綁定1號鍵
TouchcBmp(&BMP.j_but_4page_down , 120,226,0); //顯示被按下的按鍵,
StateFun_Press_4page(); //指針顯示
}
//按鍵1
Click = TouchcClickUpDown(1);
if(Click==1) //按下
{
TouchcBmp(&BMP.j_but_4page_up , 120,226,0);
}
if(Click==2) //放開狀態轉移
{
return C_IDLE;
}
return C_4PAGE;
}
/***************************************輸入密碼*****************************************/
u32 StatePassWd(void)
{
//輸入開機密碼
int i = 0;
u32 Click;
i = i;
if(StatNum==0)
{
TouchcBmp(&BMP.j_passwd,0,0,0);
TouchcBmp(&BMP.j_but_enter_up,165,165,1); //確定
TouchcBmp(&BMP.j_but_cancel_up,265,165,2); //取消
//輸入框位置檢測
TouchcInput(240,128,352,150,3);
GUI_SetColor(GUI_RED);
GUI_SetFont(&GUI_FontComic18B_ASCII);
DBG_S("State = StatePassWd...\n");
}
//確定
Click = TouchcClickUpDown(1);
if(Click==1)
{
TouchcBmp(&BMP.j_but_4page_down,165,165,1);
}
//取消
Click = TouchcClickUpDown(2);
if(Click==1)
{
}
//請求鍵盤輸入
Click = TouchcClickUpDown(3);
if(Click==2)
{
StateMsgForm = C_PASSWD; //鍵盤將返回到本狀態
StateMsg1 = 0; //鍵盤的起始位置
StateMsg2 = 0;
StateMsg3 = 3; //鍵盤不會改變此值,當有多個輸入時需要
//請求狀態轉移
StateChgReq = C_KEYBORD;
return C_IDLE;
}
//檢測鍵盤的返回
if(StateMsgForm==C_KEYBORD)
{
StateMsgForm = 0; //清除,否則重復檢測到鍵盤
//按鍵3,獲取到鍵盤的值了
if(StateMsg3==3)
{
//確定鍵
if(StateMsg1==1)
{
//獲取到的鍵值
//GUI_DispDecAt(keyvaule,240+2,128+2,keyvaulelen);
GUI_DispStringAt("******",240+2,128+2);
//StateMsg2
if(PasswordGet()==keyvaule)
{
//密碼檢測通過
PasswordOkSet(true);
return C_IDLE;
}else
{
//密碼檢測失敗
GUI_DispStringAt("Passwd Error!",240+2,200+2);
}
}
//取消鍵
if(StateMsg1==0)
{
//獲取到的鍵值
}
}
}
return C_PASSWD;
//return C_IDLE;
}
/***************************************開機啟動*****************************************/
u32 StateSetUp(void)
{
//剛開始進本狀態
if (StatNum==0)
{
TouchcJpeg(j_log,0,0,0); //解碼前,只能用此函數顯示圖片
DBG_S("State = StateSetUp...\n");
JpegToBmpAtMem(); //圖片解碼到內存
//JpegToBmpTest(); //測試函數
}
//while(1)
//{
// dis_bmp_test();
// OSTimeDly(10);
//}
//2秒后退出本狀態
if(StatNum > 20)
{
return C_IDLE;
}
return C_SETUP_LOG;
}
//======================================狀態機的功能函數==================================
//**************************************是否需要聲音提示**********************************
void TouchcJpeg_beep(void)
{
if (BeepIsCloseGet())
{
TouchcBmp(&BMP.j_but_voice_yes, 360,226,7);
}else
{
TouchcBmp(&BMP.j_but_voice_no, 360,226,7);
}
}
//**************************************顯示主頁面左上角的瓶號****************************
void StateFun_j_jar_n(void)
{
switch(MainPageJarNum)
{
case 1:
TouchcBmp(&BMP.j_jar1,0,0,0);
break;
case 2:
TouchcBmp(&BMP.j_jar2,0,0,0);
break;
case 3:
TouchcBmp(&BMP.j_jar3,0,0,0);
break;
case 4:
TouchcBmp(&BMP.j_jar4,0,0,0);
break;
default:
break;
}
}
//**************************************主界面的指針 數組顯示*****************************
#define countofarry(arry) (sizeof(arry)/sizeof(arry[0])) //求數組的組數
#define ANGLE(C) (C*100*3.14159265/18000) //角度,與幅度的轉換
const GUI_POINT Points1[] = {{0,39},{-3,9},{0,10},{3,9}}; //主頁面,小圈儀表的指針. 0°時在6點鐘方向
GUI_POINT Points1c[countofarry(Points1)]; //副本,畫圖時使用
const GUI_POINT Points2[] = {{0,46},{-4,9},{0,10},{4,9}}; //主頁面,大圈儀表的指針. 0°時在6點鐘方向
GUI_POINT Points2c[countofarry(Points1)];
//將百分比轉換成可以顯示的角度
u32 StateFun_PreSent_Covert(u32 i)
{
//在圖形上顯示時 72 是滿的,287是空的 287-72=215
i = 100 - i;
i = (i*215 + 2)/100; //[0,100]=[0,215]
i += 72;
return i;
}
void StateFun_Press_n(void)
{
int i = 0;
//在圖形上顯示時 72 是滿的,287是空的 287-72=215
GUI_SetColor(GUI_RED); //設置顏色
GUI_SetDrawMode(GUI_DRAWMODE_TRANS); //這也是默認模式 異或模式 GUI_DRAWMODE_XOR
//----儀表盤指針繪制----
//瓶壓 指針
//GUI_MagnifyPolygon(MainLittlePointsCopy,MainLittlePoints,countof(MainLittlePoints),1);//對多邊形放大1倍 有復制作用
i = JarPressNowPerSentGet();
i = StateFun_PreSent_Covert(i);
GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i)); //旋轉多邊形,有數據復制作用
GUI_FillPolygon(Points1c,countofarry(Points1),102,126); //繪制一個填充多邊形
//緩沖壓 指針
i = JarBufferPressNowPerSentGet();
i = StateFun_PreSent_Covert(i);
GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i)); //旋轉多邊形,有數據復制作用
GUI_FillPolygon(Points1c,countofarry(Points1),375,126); //繪制一個填充多邊形
//液位 指針
i = JarGasNowPerSentGet();
i = StateFun_PreSent_Covert(i);
GUI_RotatePolygon(Points2c,Points2,countofarry(Points2),ANGLE(i)); //旋轉多邊形,有數據復制作用
GUI_FillPolygon(Points2c,countofarry(Points2),237,114); //繪制一個填充多邊形
//----顯示數值:罐體容量 瓶壓 緩沖壓----
//顯示文本
GUI_SetTextMode(GUI_TEXTMODE_TRANS); //文本模式==透明模式
GUI_SetBkColor((GUI_COLOR)-1); //設置背景色==白色
GUI_SetColor(GUI_GREEN); //設置前景色,即字體顏色
GUI_SetFont(&GUI_FontComic18B_ASCII); //GUI_FontComic24B_ASCII 大了 GUI_FontComic18B_1系統崩潰
GUI_GotoXY(220,158);
GUI_DispDec(JarGasNowGet(),3); //罐體容量
GUI_SetFont(&GUI_Font16B_ASCII); //GUI_FontComic24B_ASCII 大了 GUI_FontComic18B_1系統崩潰
GUI_GotoXY(85,160);
GUI_DispFloatFix(JarPressNowGet(),4,2); //瓶壓
GUI_GotoXY(360,160);
GUI_DispFloatFix(JarBufferPressNowGet(),4,2); //緩沖壓
}
//**************************************4個頁面時的指針 數值顯示**************************
void StateFun_Press_4page(void)
{
static int i = 90;
GUI_SetColor(GUI_RED); //設置顏色
GUI_SetDrawMode(GUI_DRAWMODE_TRANS); //這也是默認模式 異或模式 GUI_DRAWMODE_XOR
//----儀表盤指針繪制----
//瓶1 瓶壓 指針
JarSetnSet(1);
i = JarGasNowPerSentGet();
i = StateFun_PreSent_Covert(i);
GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));
GUI_FillPolygon(Points1c,countofarry(Points1),119,65); //中心點
//瓶2 瓶壓 指針
JarSetnSet(2);
i = JarGasNowPerSentGet();
i = StateFun_PreSent_Covert(i);
GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));
GUI_FillPolygon(Points1c,countofarry(Points1),360,65);
//瓶3 瓶壓 指針
JarSetnSet(3);
i = JarGasNowPerSentGet();
i = StateFun_PreSent_Covert(i);
GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));
GUI_FillPolygon(Points1c,countofarry(Points1),119,176);
//瓶4 瓶壓 指針
JarSetnSet(4);
i = JarGasNowPerSentGet();
i = StateFun_PreSent_Covert(i);
GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));
GUI_FillPolygon(Points1c,countofarry(Points1),360,176);
GUI_SetTextMode(GUI_TEXTMODE_TRANS); //文本模式==透明模式
GUI_SetBkColor((GUI_COLOR)-1); //設置背景色==白色
GUI_SetColor(GUI_GREEN); //設置前景色,即字體顏色
//罐體容量
GUI_SetFont(&GUI_FontComic18B_ASCII);
i = 6;
JarSetnSet(1);//設置將要取的瓶號
GUI_GotoXY(103,97);
GUI_DispDec(JarGasNowGet(),3); //罐1
JarSetnSet(2);
GUI_GotoXY(344,97);
GUI_DispDec(JarGasNowGet(),3); //罐2
JarSetnSet(3);
GUI_GotoXY(103,208);
GUI_DispDec(JarGasNowGet(),3); //罐3
JarSetnSet(4);
GUI_GotoXY(344,208);
GUI_DispDec(JarGasNowGet(),3); //罐4
//瓶壓
GUI_SetFont(&GUI_Font16B_ASCII);
JarSetnSet(1);
GUI_GotoXY(32,97);
GUI_DispFloatFix(JarPressNowGet(),4,2); //瓶壓1
JarSetnSet(2);
GUI_GotoXY(270,97);
GUI_DispFloatFix(JarPressNowGet(),4,2); //瓶壓2
JarSetnSet(3);
GUI_GotoXY(32,210);
GUI_DispFloatFix(JarPressNowGet(),4,2); //瓶壓3
JarSetnSet(4);
GUI_GotoXY(270,210);
GUI_DispFloatFix(JarPressNowGet(),4,2); //瓶壓4
//緩沖壓
JarSetnSet(1);
GUI_GotoXY(174,100);
GUI_DispFloatFix(JarBufferPressNowGet(),4,2); //瓶1
JarSetnSet(2);
GUI_GotoXY(413,100);
GUI_DispFloatFix(JarBufferPressNowGet(),4,2); //瓶2
JarSetnSet(3);
GUI_GotoXY(174,211);
GUI_DispFloatFix(JarBufferPressNowGet(),4,2); //瓶3
JarSetnSet(4);
GUI_GotoXY(413,211);
GUI_DispFloatFix(JarBufferPressNowGet(),4,2); //瓶4
}
//**************************************氣體檢測******************************************
void StateFun_GasCheck(void)
{
//可燃氣體濃度 0--100
u32 i;
GUI_SetFont(&GUI_Font16B_ASCII);
GUI_SetColor(GUI_GREEN); //設置前景色,即字體顏色
i = BurntGasCheckGet(1);
GUI_GotoXY(210,42);
GUI_DispDec(i,2); //罐1
i = BurntGasCheckGet(2);
GUI_GotoXY(428,42);
GUI_DispDec(i,2); //罐2
i = BurntGasCheckGet(3);
GUI_GotoXY(210,67);
GUI_DispDec(i,2); //罐3
i = BurntGasCheckGet(4);
GUI_GotoXY(428,67);
GUI_DispDec(i,2); //罐4
i = BurntGasCheckGet(5);
GUI_GotoXY(210,91);
GUI_DispDec(i,2); //罐5
}
//**************************************顯示功能按鍵***************************************
//僅進行位置
void StateFun_DisAllFunKey(u32 KeyIndex)
{
//顯示全部的功能按鍵
TouchcBmp(&BMP.j_but_forward_up, 0 ,226,0);
TouchcBmp(&BMP.j_but_back_up , 60 ,226,0);
TouchcBmp(&BMP.j_but_4page_up , 120,226,0);
TouchcBmp(&BMP.j_but_gas_up , 180,226,0);
TouchcJpeg( j_but_had_check_up, 240,226,0);
TouchcBmp(&BMP.j_but_alarm_up, 300,226,0);
TouchcJpeg_beep(); //顯示聲音是否關閉
TouchcBmp(&BMP.j_but_set_up, 420,226,0);
//綁定鍵號,使按下任意鍵,即可檢測到。
if(KeyIndex!= 0)
{
//綁定鍵號
TouchcSet(KeyIndex,0,226,480,272);
}
}