• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

小虾虾子

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

sasasa

/*****************************************************************************************
文件: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"
#include "app_touch.h"
/*****************************************************************************************
触摸屏按下检测
*****************************************************************************************/
#define TOUCHC_NUM 17           //检测点数目
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);       //气体检测时要显示的数值
bool StateFun_GasCheck_isAlm(void);
bool StateHardErrCheck_fun_IsAnyErr(void);
bool StateSysAlarm_fun_IsAnyAlm(void);
void StateFun_DisAllFunKey(u32 KeyIndex);       //显示功能按键
void TouchcJpeg_LngChromaAlm(u32 Index);        //气体浓度报警图标,报警时显示红色图标
void TouchcJpeg_HardCheck(u32 KeyIndex);        //硬件故障,报警时显示红色图标
void TouchcBmp_SysAlm(u32 KeyIndex);            //系统报警,报警时显示红色图标
void TouchcJpeg_Red_bmp_alm(void);
void BeepForAllAlm(void);
/*****************************************************************************************
状态机
*****************************************************************************************/
//------------------状态定义------------
#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;
u32 refurbish1;                     //需要刷新的量
u32 refurbish2;
u32 refurbish3;
u32 refurbish4;
float refurbish1f;
float refurbish2f;
float refurbish3f;
float refurbish4f;
float refurbish5f;
float refurbish6f;
float refurbish7f;
float refurbish8f;
//**************************************状态机调度函数************************************
//调用总入口,每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);
        
        TouchcInput(StateMsg1+137,StateMsg2+0,StateMsg1+167,StateMsg2+22,16);//关闭
        
        //格子开始的相对位置
        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(16);      //返回原来的状态
    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;
        case C_MAIN_PAGE:
            StateChgReq = 0;
            return C_MAIN_PAGE;
        default:
            StateChgReq = 0;
            break;
        }
    }
    //显示主页面
    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);
        TouchcJpeg_LngChromaAlm(4);//TouchcBmp(&BMP.j_but_gas_up    ,    180,226,4);
        TouchcJpeg_HardCheck(5);//TouchcJpeg(    j_but_had_check_up,  240,226,5);
        TouchcBmp_SysAlm(6);//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");

    }
    //界面刷新
    if (StatNum%25==10)
    {
        StateFun_Press_n();
        //是否显示红色图标刷新
        //TouchcJpeg_Red_bmp_alm();
        TouchcJpeg_LngChromaAlm(0);
        TouchcJpeg_HardCheck(0);
        TouchcBmp_SysAlm(0);
        
        //检测是否有异常,然后蜂鸣器报警
        BeepForAllAlm();
    }
    //根据按键号,检测每个按键的按下、放开状态
    //【按键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++;                       //MainPageJarNum=[1 4]
        if(MainPageJarNum > JarNumberGet())     //根据设置,最多显示不同的号
        {
            MainPageJarNum = 1;
        }
        StatNum = (u32)-1;           //如此,会刷新本界面
    }
    //【按键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 = JarNumberGet();
        }
        StatNum = (u32)-1;           //如此,会刷新本界面
    }
    //【按键3】显示4个页面
    Click = TouchcClickUpDown(3);
    if(Click==1)    //按下
    {
        TouchcBmp(&BMP.j_but_4page_down  ,  120,226,0);
    }
    if(Click==2)    //放开
    {
        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 (BeepIsOnGet())
        {
            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_PASSWD;
    }
    return C_IDLE;
}
//**************************************系统设置******************************************
#define CC 3
//是否显示指针
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 (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(IsGasLowAlarmGet());             //键号 = 9 10
        //复选框:是否进行气体浓度监测
        StateSysSet_IsGasCkeck(IsGasCkeckGet());                //键号 = 11 12
        //复选框:是否显示指针
        StateSysSet_IsDisplayPointer(IsDisplayPointerGet());    //键号 = 13 14

        TouchcBmp(&BMP.j_but_enter_up,195,188,15);                //确定键

        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)
    {
        IsGasLowAlarmSet(true);
        StateSysSet_IsLowAlarm(IsGasLowAlarmGet());
    }
    Click = TouchcClickUpDown(10);
    if(Click == 1)
    {
        IsGasLowAlarmSet(false);
        StateSysSet_IsLowAlarm(IsGasLowAlarmGet());
    }
    //复选框:是否进行气体浓度监测
    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;
    }

    //【按键15】 确定
    Click = TouchcClickUpDown(15);
    if(Click==1)
    {
        //将设置写入到EE
        SysSet_ee();

        TouchcBmp(&BMP.j_but_enter_down  ,195,188,0);
    }
    if(Click==2)
    {
        TouchcBmp(&BMP.j_but_enter_up  ,195,188,0);
        return C_SYS_SET;
    }
    return C_SYS_SET;
}
//**************************************更改密码******************************************
#define SUPER_PASSWD 10086            //超级密码
u32 StatePasswdSet(void)
{
    int static newpasd;
    int static newpasdstat = 0;
    u32 Click;
    u32 i;
    //显示主页面
    if (StatNum==0)
    {
        if(StateMsgForm!=C_KEYBORD)
        {
            //刚进入界面,当然全屏刷新
            newpasdstat = 0;
            TouchcBmp(&BMP.j_passwd_set,0,0,0);
        }else
        {
            //从键盘返回,只能部分刷新了
            GUI_DrawBitmap_area(&BMP.j_passwd_set,0,0,168,220,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);
        //确定取消键
        TouchcBmp(&BMP.j_but_enter_up,  192,180,6);
        TouchcBmp(&BMP.j_but_cancel_up, 280,180,7);

        ///输入框位置检测
        TouchcInput(181,42 ,285,61,3);      //源密码
        TouchcInput(181,80 ,285,98,4);      //新密码
        TouchcInput(181,118,285,137,5);     //新密码
        
        GUI_SetColor(GUI_BLACK);
        GUI_SetTextMode(GUI_TEXTMODE_TRANS);    //文本模式==透明模式
        //GUI_SetTextMode(GUI_TEXTMODE_NORMAL); //不透明
        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);
                GUI_DrawBitmap_area(&BMP.j_passwd_set,290,40,290+40,40+24,290,40);
                if(PasswordGet()==keyvaule || keyvaule == SUPER_PASSWD)
                {
                    //密码通过
                    GUI_DispStringAt("ok ",295,46);
                    newpasdstat |= 1;
                }else
                {
                    //密码检测失败
                    GUI_DispStringAt("err",295,46);
                    newpasdstat &= ~1;
                }
            }
            //取消键
            if(StateMsg1==0)
            {
                //获取到的键值
            }
        }
        //新密码
        if(StateMsg3==4)
        {
            //确定键
            if(StateMsg1==1)
            {
                GUI_DispStringAt("******",183,84);
                GUI_DrawBitmap_area(&BMP.j_passwd_set,295,80,295+24*3,80+24,295,80);
                //if(newpasd==-2)               //判断旧密码检验通过才行
                //{
                    newpasd = keyvaule;
                    GUI_DispStringAt("ok ",295,80);
                    newpasdstat |= (1<<1);
                //}else
                //{
                //  GUI_DispStringAt("err",295,80);
                //}
            }
            //取消键
            if(StateMsg1==0)
            {
                //获取到的键值
            }
        }
        //新密码
        if(StateMsg3==5)
        {
            //确定键
            if(StateMsg1==1)
            {
                GUI_DispStringAt("******",183,122);
                GUI_DrawBitmap_area(&BMP.j_passwd_set,295,118,295+12*3,118+24,295,118);
                //新密码设置成功
                if(newpasd == keyvaule)
                {
                    //PasswordSet(keyvaule);
                    GUI_DispStringAt("ok ",295,118);
                    newpasdstat |= (1<<2);
                }else
                {
                    GUI_DispStringAt("err",295,118);
                    newpasdstat &= ~(1<<2);
                }
            }
            //取消键
            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;
    }
    //【按键6】 确定
    Click = TouchcClickUpDown(6);
    if(Click==1)
    {
        TouchcBmp(&BMP.j_but_enter_down,192,180,0);
    }
    if(Click==2)
    {
        TouchcBmp(&BMP.j_but_enter_up,192,180,0);

        GUI_DrawBitmap_area(&BMP.j_passwd_set,347,121,347+8*10,121+16,347,121);
        if(newpasdstat==7)   //可能会多次进入到此
        {
            //设置新密码
            PasswordSet(newpasd);        //保存到内存
            PasswordSet_ee(newpasd);    //保存到EE
            GUI_SetColor(2660184);    //绿色
            GUI_DispStringAt("Succeed!",347,121);
            //保持密码到EE
        }else
        {
            GUI_SetColor(GUI_RED);
            GUI_DispStringAt("Fail !  ",347,121);
        }
    }
    //【按键7】取消
    Click = TouchcClickUpDown(7);
    if(Click==1)
    {
        TouchcBmp(&BMP.j_but_cancel_down,   280,180,0);
    }
    if(Click==2)
    {
        TouchcBmp(&BMP.j_but_cancel_up, 280,180,0);
        //刷新整个界面,需要重新输入旧新密码
        StatNum = (u32)-1;
    }
    //【按键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;
    //显示主页面        当少于4个屏时,显示多余的瓶 其参数为0即可。
    if (StatNum==0)
    {
        GUI_SetTextMode(GUI_TEXTMODE_TRANS);
        //主页面 可以设置的主页面
        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);
        
        //确定按钮
        TouchcBmp(&BMP.j_but_enter_up,210,190,10);

        //气瓶容量设置
        TouchcInput(385, 53,450,69,5);
        TouchcInput(385, 79,450,95,6);
        TouchcInput(385,132,450,148,7);
        //本状态字体颜色
        GUI_SetColor(GUI_RED);
        GUI_SetFont(&GUI_Font8x12_ASCII);
        //显示
        GUI_GotoXY(390, 57);GUI_DispDecMin(JarMaxGasGet());             //最大气罐容量
        GUI_GotoXY(390, 83);GUI_DispDecMin(JarGasLowPfGet());           //最小电容值
        GUI_GotoXY(390, 136);GUI_DispDecMin(JarGasHigPfGet());          //最大电容值
        //显示实时值
        GUI_GotoXY(166, 57);GUI_DispDecMin(JarGasNowPfGet());           //实时电容
        GUI_GotoXY(166, 83);GUI_DispDecMin(JarGasNowGet());             //实时液位
        GUI_GotoXY(166, 108);GUI_DispFloatFix(JarPressNowGet(),4,2);    //实时瓶压
        GUI_GotoXY(166, 136);GUI_DispFloatFix(JarBufferPressNowGet(),4,2);  //实时缓冲压
        GUI_GotoXY(166, 164);GUI_DispDecMin(JarTemperatureNowGet());    //实时温度
        //
        DBG_S("State = State4pageSet :");DBG_U32N(JarSetnGet());
    }
    //实时刷新
    if (StatNum%25==10)
    {
        //本状态字体颜色
        GUI_SetTextMode(GUI_TEXTMODE_TRANS);
        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_DrawBitmap_area(&BMP.j_4page_set,161,57,161+8*8,57+12,161,57);
        GUI_GotoXY(166, 57);GUI_DispDecMin(JarGasNowPfGet());           //实时电容
        GUI_DrawBitmap_area(&BMP.j_4page_set,161,83,161+8*8,83+12,161,83);
        GUI_GotoXY(166, 83);GUI_DispDecMin(JarGasNowGet());             //实时液位
        GUI_DrawBitmap_area(&BMP.j_4page_set,161,108,161+8*8,108+12,161,108);
        GUI_GotoXY(166, 108);GUI_DispFloatFix(JarPressNowGet(),4,2);    //实时瓶压
        GUI_DrawBitmap_area(&BMP.j_4page_set,161,136,161+8*8,136+12,161,136);
        GUI_GotoXY(166, 136);GUI_DispFloatFix(JarBufferPressNowGet(),4,2);  //实时缓冲压
        GUI_DrawBitmap_area(&BMP.j_4page_set,161,164,161+8*8,164+12,161,164);
        GUI_GotoXY(166, 164);GUI_DispDecMin(JarTemperatureNowGet());    //实时温度
    }
    //【按键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_SetTextMode(GUI_TEXTMODE_NORMAL);
                GUI_DispStringAt("      ",385, 57);
                GUI_GotoXY(385, 57);
                GUI_DispDecMin(keyvaule);
                JarMaxGasSet(keyvaule);
            }
        }
        if(StateMsg3==6)    //空瓶设置
        {
            //确定键
            if(StateMsg1==1)
            {
                //获取到的键值 keyvaule
                GUI_SetTextMode(GUI_TEXTMODE_NORMAL);
                GUI_DispStringAt("      ",385, 83);
                GUI_GotoXY(385, 83);
                //不能大于最大值
                if (keyvaule + 50 > (int)JarGasHigPfGet())
                {
                    keyvaule = (int)JarGasHigPfGet() - 50;
                }
                GUI_DispDecMin(keyvaule);
                JarGasLowPfSet(keyvaule);
            }
        }
        if(StateMsg3==7)    //满屏设置
        {
            //确定键
            if(StateMsg1==1)
            {
                //获取到的键值 keyvaule
                GUI_SetTextMode(GUI_TEXTMODE_NORMAL);
                GUI_DispStringAt("      ",385, 136);
                GUI_GotoXY(385, 136);
                
                //最大值不能小于最小值+50pF
                if(keyvaule < (int)(JarGasLowPfGet() + 50))
                {
                    keyvaule = (int)JarGasLowPfGet() + 50;
                }

                GUI_DispDecMin(keyvaule);
                JarGasHigPfSet(keyvaule);
            }
        }
    }

        
    //【按键10】确定
    Click = TouchcClickUpDown(10);
    if(Click==1)
    {
        TouchcBmp(&BMP.j_but_enter_down,210,190,0);
    }
    if(Click==2)
    {
        TouchcBmp(&BMP.j_but_enter_up,210,190,0);
        //保存数据到ee
        JarGasSet_ee(JarSetnGet());
    }

    //【按键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;
    int jarn = JarNumberGet();
    for(i=0;i < jarn;i++)
    {
        //液位高报警
        if(IsLngHig(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,232+i*48,60,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_sys_alarm,232+i*48,60,232+12+i*48,60+12,232+i*48,60);
        }
        //液位低报警
        if(IsLngLow(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,232 + i*48,60+26,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_sys_alarm,232 + i*48,60+26,232+12 + i*48,60+12+26,232 + i*48,60+26);
        }
        //气瓶压力高报警
        if(IsPressHig(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,232 + i*48,60+26*2,0);;
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_sys_alarm,232 + i*48,60+26*2,232+12 + i*48,60+12+26*2,232 + i*48,60+26*2);
        }
        //气瓶压力低报警
        if(IsPressLow(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,232 + i*48,60+26*3,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_sys_alarm,232 + i*48,60+26*3,232+12 + i*48,60+12+26*3,232 + i*48,60+26*3);
        }
        //缓冲压高报警
        if(IsPressBufferHig(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,232 + i*48,60+26*4,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_sys_alarm,232 + i*48,60+26*4,232+12 + i*48,60+12+26*4,232 + i*48,60+26*4);
        }
        //缓冲压低报警
        if(IsPressBufferLow(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,232 + i*48,60+26*5,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_sys_alarm,232 + i*48,60+26*5,232+12 + i*48,60+12+26*5,232 + i*48,60+26*5);
        }
    }
}
bool StateSysAlarm_fun_IsAnyAlm(void)
{
    int i;
    int jarn = JarNumberGet();
    for(i=0;i < jarn;i++)
    {
        //液位高报警
        if(IsLngHig(i+1))
        {
            return true;
        }
        //液位低报警
        if(IsLngLow(i+1))
        {
            return true;
        }
        //气瓶压力高报警
        if(IsPressHig(i+1))
        {
            return true;
        }
        //气瓶压力低报警
        if(IsPressLow(i+1))
        {
            return true;
        }
        //缓冲压高报警
        if(IsPressBufferHig(i+1))
        {
            return true;
        }
        //缓冲压低报警
        if(IsPressBufferLow(i+1))
        {
            return true;
        }
    }
    return false;
}
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);//显示按下的功能键
    }

    if (StatNum%25==10)
    {
        //刷新
        StateSysAlarm_fun();

        //三个红色按钮的刷新
        TouchcJpeg_LngChromaAlm(0);
        TouchcJpeg_HardCheck(0);
        //TouchcBmp_SysAlm(0);
        
        //检测是否有异常,然后蜂鸣器报警
        BeepForAllAlm();
    }
    //按键8
    Click = TouchcClickUpDown(1);
    if(Click==1)    //按下
    {
        TouchcBmp_SysAlm(0);//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;
    int jarn = JarNumberGet();
    //没有使用的瓶子则不检测
    for(i=0;i< jarn ;i++)
    {
        //通信检测
        if(IsTranFault(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,235+i*48,77,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_hard_err_check,235+i*48,77,235+12+i*48,77+12,235+i*48,77);
        }
        //短路检测
        if(IsJarCapShort(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,235+i*48,77+26,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_hard_err_check,235+i*48,77+26,235+12+i*48,77+12+26,235+i*48,77+26);
        }
        //断路检测
        if(IsJarCapBreak(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,235 + i*48,77+26*2,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_hard_err_check,235+i*48,77+26*2 ,235+12 + i*48,77+12+26*2,  235 + i*48,77+26*2);
        }
        
        //气瓶压力检测
        if(IsPressFault(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,235+i*48,77+26*3,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_hard_err_check,235+i*48,77+26*3,235+12+i*48,77+12+26*3,235+i*48,77+26*3);
        }
        //缓冲压检测
        if(IsPressBufferFault(i+1))
        {
            TouchcBmp(&BMP.j_alarm_yes,235+i*48,77+26*4,0);
        }else
        {
            GUI_DrawBitmap_area(&BMP.j_hard_err_check,235+i*48,77+26*4,235+12+i*48,77+12+26*4,235+i*48,77+26*4);
        }
    }
}
////故障检测,只要有任一个故障都返回true
bool StateHardErrCheck_fun_IsAnyErr(void)
{
    int i;
    int jarn = JarNumberGet();
    //bool b = false;
    //没有使用的瓶子则不检测
    for(i=0;i< jarn ;i++)
    {
        //通信检测
        if(IsTranFault(i+1))
        {
            return true;//b = true;
        }
        //短路检测
        if(IsJarCapShort(i+1))
        {
            return true;//b = true;
        }
        //断路检测
        if(IsJarCapBreak(i+1))
        {
            return true;//b = true;
        }
        //气瓶压力检测
        if(IsPressFault(i+1))
        {
            return true;//b = true;
        }
        //缓冲压检测
        if(IsPressBufferFault(i+1))
        {
            return true;//b = true;
        }
    }
    return false;
}
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); //显示按下的功能键
    }

    //界面刷新
    if (StatNum%25==10)
    {
        //显示是否故障刷新
        StateHardErrCheck_fun();

        //三个可能出现红色的图标
        TouchcJpeg_LngChromaAlm(0);  
        //TouchcJpeg_HardCheck(0);        自身是按下的,不改变图标
        TouchcBmp_SysAlm(0);
        
        //检测是否有异常,然后蜂鸣器报警
        BeepForAllAlm();
    }


    //按键8
    Click = TouchcClickUpDown(1);
    if(Click==1)    //按下
    {
        TouchcJpeg_HardCheck(0);//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();                            //气体检测,并报警
    }
    
    //界面刷新
    if (StatNum%25==10)
    {
        //显示的文字刷新
        StateFun_GasCheck();                            //气体检测,并报警

        //三个可能出现红色的图标
        //TouchcJpeg_LngChromaAlm(0);  自身是按下的,不改变图标
        TouchcJpeg_HardCheck(0);
        TouchcBmp_SysAlm(0);
    }

    //按键1
    Click = TouchcClickUpDown(1);
    if(Click==1)    //按下
    {
        //TouchcBmp(&BMP.j_but_gas_up     , 180,226,0);
        TouchcJpeg_LngChromaAlm(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();                         //指针显示
    }
    //界面刷新
    if (StatNum%25==10)
    {
        //TouchcBmp(&BMP.j_4page,0,0,0);
        StateFun_Press_4page();                         //指针显示
        
        //三个可能出现红色的图标
        TouchcJpeg_LngChromaAlm(0);
        TouchcJpeg_HardCheck(0);
        TouchcBmp_SysAlm(0);
        
        //检测是否有异常,然后蜂鸣器报警
        BeepForAllAlm();
    }




    //按键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)
{
    u32 Click;
    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_SetTextMode(GUI_TEXTMODE_TRANS);                //文本模式==透明模式
        GUI_SetColor(GUI_RED);
        GUI_SetFont(&GUI_FontComic18B_ASCII);
        DBG_S("State = StatePassWd...\n");
    }
    //确定
    Click = TouchcClickUpDown(1);
    if(Click==1)
    {
        TouchcBmp(&BMP.j_but_enter_down,165,165,1);
    }
    if(Click==2)
    {
        //密码检测通过 keyvaule是静态变量,由键盘输入
        if(PasswordGet()==keyvaule || keyvaule == SUPER_PASSWD)
        {
            StateChgReq = C_SYS_SET;        //通过密码检测即可进入系统设置界面
            keyvaule = PasswordGet() + 1;   //改变键值,防止碰巧
            return C_IDLE;
        }else
        {
            TouchcBmp(&BMP.j_but_enter_up,165,165,1);
            GUI_DispStringAt("Err",367+2,128+2);
        }
    }
    //取消
    Click = TouchcClickUpDown(2);
    if(Click==1)
    {
        TouchcBmp(&BMP.j_but_cancel_down,265,165,2);
    }
    if(Click==2)
    {
        //清除底部图像残留
        TouchcBmp(&BMP.j_back_480x60,0,272-60,0);
        return C_IDLE;
    }
    //请求键盘输入
    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 || keyvaule == SUPER_PASSWD)
                {
                    //密码检测通过
                    //PasswordOkSet(true);
                    GUI_DispStringAt("OK!",367+2,128+2);
                    //return C_IDLE;
                }else
                {
                    //密码检测失败
                    GUI_DispStringAt("Err",367+2,128+2);
                }
            }
            //取消键
            if(StateMsg1==0)
            {
                //获取到的键值
            }
        }
    }
    return C_PASSWD;
}
/***************************************开机启动*****************************************/
void FunInit(void);
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)
    {
        //清除底部的图像。因为其他状态的图片不够大,否则有残留图像。
        TouchcBmp(&BMP.j_back_480x60,0,272-60,0);
        return C_IDLE;
    }
    return C_SETUP_LOG;
}
//======================================状态机的功能函数==================================
//**************************************是否需要声音提示**********************************

void TouchcJpeg_beep(void)
{
    if (BeepIsOnGet())
    {
        TouchcBmp(&BMP.j_but_voice_yes,     360,226,7);
    }else
    {
        TouchcBmp(&BMP.j_but_voice_no,      360,226,7);
    }
}
//根据本应用,只要在主页面、4个页面显示时刷新此3个按钮就可。因为其他的状态没有显示此3按钮
//当坐台有变化时,更新图标
void TouchcJpeg_Red_bmp_alm(void)
{
    static bool isalm1;
    static bool isalm2;
    static bool isalm3;
    if(isalm1 != StateFun_GasCheck_isAlm())
    {
        isalm1 = StateFun_GasCheck_isAlm();
        if(chd[4].beIsin==0)
        {   //按键没有按下时才可以改变图标
            TouchcJpeg_LngChromaAlm(0);
        }
    }
    if (isalm2 != StateHardErrCheck_fun_IsAnyErr())
    {
        isalm2 = StateHardErrCheck_fun_IsAnyErr();
        if(chd[5].beIsin==0)
        {   //按键没有按下时才可以改变图标
            TouchcJpeg_HardCheck(0);
        }
    }
    if (isalm3 != StateSysAlarm_fun_IsAnyAlm())
    {
        isalm3 = StateSysAlarm_fun_IsAnyAlm();
        if(chd[5].beIsin==0)
        {   //按键没有按下时才可以改变图标
            TouchcBmp_SysAlm(0);
        }
    }
}
//只要有如何异常,都蜂鸣器报警
void BeepForAllAlm(void)
{
    //如果蜂鸣器关闭则不名叫
    if(BeepIsOnGet()==false)
    {
        return;
    }
    //主要是3个红色按钮所表示的项
    if(StateFun_GasCheck_isAlm())
    {
        BspBeepAlm();
        return;
    }
    if(StateHardErrCheck_fun_IsAnyErr())
    {
        BspBeepAlm();
        return;
    }

    //是否液位BEEP告警 == 不告警即所有的液位、压力高低都不报警
    if(IsGasLowAlarmGet()==false)
    {
        return;
    }
    if(StateSysAlarm_fun_IsAnyAlm())
    {
        BspBeepAlm();
        return;
    }
}

//TouchcJpeg_LngChromaAlm();
//TouchcJpeg_HardCheck();
//TouchcBmp_SysAlm();
void TouchcJpeg_LngChromaAlm(u32 KeyIndex)
{
    //气体超标则使用红色图标
    if(StateFun_GasCheck_isAlm())
    {
        TouchcBmp(&BMP.j_but_gas_alm   ,    180,226,KeyIndex);
    }else
    {
        TouchcBmp(&BMP.j_but_gas_up    ,    180,226,KeyIndex);
    }
}
//硬件检测,是否使用红色图标
void TouchcJpeg_HardCheck(u32 KeyIndex)
{
    if(StateHardErrCheck_fun_IsAnyErr())
    {
        TouchcJpeg(    j_but_had_check,     240,226,KeyIndex);
    }else
    {   //任一硬件问题都用红色图标
        TouchcJpeg(    j_but_had_check_up,  240,226,KeyIndex);
    }
}
//系统检测,决定是否使用红色图标
void TouchcBmp_SysAlm(u32 KeyIndex)
{
    if(StateSysAlarm_fun_IsAnyAlm())
    {
        TouchcBmp(&BMP.j_but_alarm,      300,226,KeyIndex);
    }else
    {
        TouchcBmp(&BMP.j_but_alarm_up,      300,226,KeyIndex);
    }
}
 
//**************************************显示主页面左上角的瓶号****************************
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;
    if (StatNum==0)
    {
        //以下函数时全刷新
        refurbish1 = (U32)-1;
        refurbish2 = (U32)-1;
        refurbish3 = (U32)-1;
    }
    if (refurbish1 != JarGasNowGet())
    {
        refurbish1 = JarGasNowGet();
        //区域覆盖
        GUI_DrawBitmap_area(&BMP.j_manpage,173,59,294,174,173,59);
        //在图形上显示时 72 是满的,287是空的  287-72=215
        GUI_SetColor(GUI_RED);                              //设置颜色
        GUI_SetDrawMode(GUI_DRAWMODE_TRANS);                //这也是默认模式   异或模式 GUI_DRAWMODE_XOR
        //液位 指针
        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);          //罐体液位
    }
    if(refurbish2 != JarPressNowGet())
    {
        refurbish2 = JarPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_manpage,53,80,164,174,53,80);
        //液位 指针
        GUI_SetColor(GUI_RED);                              //设置颜色
        GUI_SetDrawMode(GUI_DRAWMODE_TRANS);                //这也是默认模式   异或模式 GUI_DRAWMODE_XOR
        i = JarPressNowPerSentGet();
        i = StateFun_PreSent_Covert(i);
        GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));  //旋转多边形,有数据复制作用
        GUI_FillPolygon(Points1c,countofarry(Points1),102,126);             //绘制一个填充多边形
        //显示文本
        GUI_SetTextMode(GUI_TEXTMODE_TRANS);    //文本模式==透明模式
        GUI_SetBkColor((GUI_COLOR)-1);          //设置背景色==白色
        GUI_SetColor(GUI_GREEN);                //设置前景色,即字体颜色
        GUI_SetFont(&GUI_Font16B_ASCII);        //GUI_FontComic24B_ASCII 大了   GUI_FontComic18B_1系统崩溃
        GUI_GotoXY(85,160);
        GUI_DispFloatFix(JarPressNowGet(),4,2); //瓶压
    }
    if (refurbish3 != JarBufferPressNowGet())
    {
        refurbish3 = JarBufferPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_manpage,330,71,421,174,330,71);
        //液位 指针
        GUI_SetColor(GUI_RED);                              //设置颜色
        GUI_SetDrawMode(GUI_DRAWMODE_TRANS);                //这也是默认模式   异或模式 GUI_DRAWMODE_XOR
        i = JarBufferPressNowPerSentGet();
        i = StateFun_PreSent_Covert(i);
        GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));  //旋转多边形,有数据复制作用
        GUI_FillPolygon(Points1c,countofarry(Points1),375,126);             //绘制一个填充多边形
        //显示文本
        GUI_SetTextMode(GUI_TEXTMODE_TRANS);    //文本模式==透明模式
        GUI_SetBkColor((GUI_COLOR)-1);          //设置背景色==白色
        GUI_SetColor(GUI_GREEN);                //设置前景色,即字体颜色
        GUI_SetFont(&GUI_Font16B_ASCII);        //GUI_FontComic24B_ASCII 大了   GUI_FontComic18B_1系统崩溃
        GUI_GotoXY(360,160);
        GUI_DispFloatFix(JarBufferPressNowGet(),4,2);      //缓冲压
    }
    /*  静态时的方法:
    //在图形上显示时 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
    GUI_SetTextMode(GUI_TEXTMODE_TRANS);
    if(StatNum==0)
    {
        refurbish1 = (u32)-1;
        refurbish2 = (u32)-1;
        refurbish3 = (u32)-1;
        refurbish4 = (u32)-1;
        refurbish1f = (float)213.1;
        refurbish2f = (float)213.1;
        refurbish3f = (float)213.1;
        refurbish4f = (float)213.1;
        refurbish5f = (float)213.1;
        refurbish6f = (float)213.1;
        refurbish7f = (float)213.1;
        refurbish8f = (float)213.1;
    }
    //--------------指针和液位值------------------
    GUI_SetColor(GUI_RED);                      //设置颜色
    JarSetnSet(1);                              //罐1
    if (refurbish1 != JarGasNowPerSentGet())
    {
        refurbish1 = JarGasNowPerSentGet();
        //覆盖
        GUI_DrawBitmap_area(&BMP.j_4page,71,25,162,115,71,25);
        //指针
        i = JarGasNowPerSentGet();
        i = StateFun_PreSent_Covert(i);
        GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));
        GUI_FillPolygon(Points1c,countofarry(Points1),119,65);//中心点
        //液位
        GUI_SetColor(GUI_GREEN);                //设置颜色
        GUI_SetFont(&GUI_FontComic18B_ASCII);
        GUI_GotoXY(103,97);
        GUI_DispDec(JarGasNowGet(),3);
    }
    JarSetnSet(2);                              //罐2
    if (refurbish2 != JarGasNowPerSentGet())
    {
        refurbish2 = JarGasNowPerSentGet();
        //覆盖
        GUI_DrawBitmap_area(&BMP.j_4page,312,25,405,115,312,25);
        //指针
        GUI_SetColor(GUI_RED);
        i = JarGasNowPerSentGet();
        i = StateFun_PreSent_Covert(i);
        GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));
        GUI_FillPolygon(Points1c,countofarry(Points1),360,65);
        //液位
        GUI_SetColor(GUI_GREEN);
        GUI_SetFont(&GUI_FontComic18B_ASCII);
        GUI_GotoXY(344,97);
        GUI_DispDec(JarGasNowGet(),3);
    }
    JarSetnSet(3);                              //罐3
    if (refurbish3 != JarGasNowPerSentGet())
    {
        refurbish3 = JarGasNowPerSentGet();
        //覆盖
        GUI_DrawBitmap_area(&BMP.j_4page,71,132,164,225,71,132);
        //指针
        GUI_SetColor(GUI_RED);
        i = JarGasNowPerSentGet();
        i = StateFun_PreSent_Covert(i);
        GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));
        GUI_FillPolygon(Points1c,countofarry(Points1),119,176);
        //液位
        GUI_SetColor(GUI_GREEN);
        GUI_SetFont(&GUI_FontComic18B_ASCII);
        GUI_GotoXY(103,208);
        GUI_DispDec(JarGasNowGet(),3);
    }
    JarSetnSet(4);                              //罐4
    if (refurbish4 != JarGasNowPerSentGet())
    {
        refurbish4 = JarGasNowPerSentGet();
        //覆盖
        GUI_DrawBitmap_area(&BMP.j_4page,312,132,405,225,312,132);
        //指针
        GUI_SetColor(GUI_RED);
        i = JarGasNowPerSentGet();
        i = StateFun_PreSent_Covert(i);
        GUI_RotatePolygon(Points1c,Points1,countofarry(Points1),ANGLE(i));
        GUI_FillPolygon(Points1c,countofarry(Points1),360,176);
        //液位
        GUI_SetColor(GUI_GREEN);
        GUI_SetFont(&GUI_FontComic18B_ASCII);
        GUI_GotoXY(344,208);
        GUI_DispDec(JarGasNowGet(),3);
    }
    //-------------------瓶压---------------------
    GUI_SetColor(GUI_GREEN);
    GUI_SetFont(&GUI_Font16B_ASCII);
    JarSetnSet(1);
    if (refurbish1f != JarPressNowGet())
    {
        refurbish1f = JarPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_4page,32,97,32+16*4,97+16,32,97);
        GUI_GotoXY(32,97);
        GUI_DispFloatFix(refurbish1f,4,2);          //瓶压1
    }
    JarSetnSet(2);
    if (refurbish2f != JarPressNowGet())
    {
        refurbish2f = JarPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_4page,270,97,270+16*4,97+16,270,97);
        GUI_GotoXY(270,97);
        GUI_DispFloatFix(refurbish2f,4,2);          //瓶压2
    }
    JarSetnSet(3);
    if (refurbish3f != JarPressNowGet())
    {
        refurbish3f = JarPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_4page,32,210,32+16*4,210+16,32,210);
        GUI_GotoXY(32,210);
        GUI_DispFloatFix(refurbish3f,4,2);          //瓶压3
    }
    JarSetnSet(4);
    if (refurbish4f != JarPressNowGet())
    {
        refurbish4f = JarPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_4page,270,210,270+16*4,210+16,270,210);
        GUI_GotoXY(270,210);
        GUI_DispFloatFix(refurbish4f,4,2);          //瓶压4
    }
    //---------------缓冲压-----------------------
    JarSetnSet(1);
    if (refurbish5f != JarBufferPressNowGet())
    {
        refurbish5f = JarBufferPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_4page,174,100,174+16*4,100+16,174,100);
        GUI_GotoXY(174,100);
        GUI_DispFloatFix(refurbish5f,4,2);
    }
    JarSetnSet(2);
    if (refurbish6f != JarBufferPressNowGet())
    {
        refurbish6f = JarBufferPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_4page,413,100,413+16*4,100+16,413,100);
        GUI_GotoXY(413,100);
        GUI_DispFloatFix(refurbish6f,4,2);          //瓶2
    }
    JarSetnSet(3);
    if (refurbish7f != JarBufferPressNowGet())
    {
        refurbish7f = JarBufferPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_4page,174,211,174+16*4,211+16,174,211);
        GUI_GotoXY(174,211);
        GUI_DispFloatFix(refurbish7f,4,2);          //瓶3
    }
    JarSetnSet(4);
    if (refurbish8f != JarBufferPressNowGet())
    {
        refurbish8f = JarBufferPressNowGet();
        GUI_DrawBitmap_area(&BMP.j_4page,413,211,413+16*4,211+16,413,211);
        GUI_GotoXY(413,211);
        GUI_DispFloatFix(refurbish8f,4,2);       //瓶4
    }
    /* 之前的静态方式
    //----仪表盘指针绘制----
    //瓶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_SetTextMode(GUI_TEXTMODE_NORMAL);
    //GUI_SetFont(&GUI_Font16B_ASCII);
    GUI_SetFont(&GUI_Font8x12_ASCII);
    GUI_SetColor(GUI_GREEN);                //设置前景色,即字体颜色

    //有报警则用红色字体,否则用绿色字体
    if(IsBurntGasAlarm(1))                  //1
    {
        GUI_SetColor(GUI_RED);
    }else
    {
        GUI_SetColor(GUI_GREEN);
    }
    i = BurntGasCheckGet(1);
    GUI_GotoXY(210,42+2);
    GUI_DispDec(i,2);

    if(IsBurntGasAlarm(2))              //2
    {
        GUI_SetColor(GUI_RED);
    }else
    {
        GUI_SetColor(GUI_GREEN);
    }
    i = BurntGasCheckGet(2);
    GUI_GotoXY(428,42+2);
    GUI_DispDec(i,2);

    if(IsBurntGasAlarm(3))              //3
    {
        GUI_SetColor(GUI_RED);
    }else
    {
        GUI_SetColor(GUI_GREEN);
    }
    i = BurntGasCheckGet(3);
    GUI_GotoXY(210,67+2);
    GUI_DispDec(i,2);
    
    if(IsBurntGasAlarm(4))              //4
    {
        GUI_SetColor(GUI_RED);
    }else
    {
        GUI_SetColor(GUI_GREEN);
    }
    i = BurntGasCheckGet(4);
    GUI_GotoXY(428,67+2);
    GUI_DispDec(i,2);
    
    if(IsBurntGasAlarm(5))              //5
    {
        GUI_SetColor(GUI_RED);
    }else
    {
        GUI_SetColor(GUI_GREEN);
    }
    i = BurntGasCheckGet(5);
    GUI_GotoXY(210,91+2);
    GUI_DispDec(i,2);
}
//检测是否有气体浓度超标。只有一个超,则认为是超标
bool StateFun_GasCheck_isAlm(void)
{
    //bool fl = false;
    u32 i;
    for(i = 1;i<=5 ;i++)
    {
        if(IsBurntGasAlarm(i))
        {
            return true;//fl = true;
        }
    }
    return false;
}
//**************************************显示功能按键***************************************
//仅进行位置
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_LngChromaAlm(0);
    TouchcJpeg_HardCheck(0);//TouchcJpeg(    j_but_had_check_up,  240,226,0);
    TouchcBmp_SysAlm(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);
    }
}
View Code

 

三个文件

posted on 2013-07-19 12:53  小虾虾子  阅读(589)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3