?? keytask.c
字號(hào):
/********************************************
公司名稱:
文 件 名:
版 本 號(hào):
程序設(shè)計(jì):
說 明:
完成日期:
修改日期:
功能摘要:
**********************************************/
#define _KeyTaskv20
#include "includes.h"
//---------------------------------------------------
#define Menu_set 0x10
const char *first_menu[] PROGMEM = {" pt "," ct ","h-alr","l-alr"," baud"," addr"," alr "};
//-----------------------------------------------------
//0 dn up u+d s s+d s+u
const uint8 KeyTask[3][7] PROGMEM = {
{0x00,0x00,0x00,0x00,0x00,0x00,0x11},
{0x10,0x23,0x23,0x10,0x12,0x10,0x10},
{0x20,0x26,0x25,0x20,0x14,0x28,0x27}
};
uint8 MenuID; //菜單項(xiàng),
uint8 TaskID = 0;
uint8 fDOKEY;
void KeyTask_MainLoop(void);
uint16 ValAdd(uint16 ValTemp,uint8 AddCount,uint16 MaxVal);
uint16 ValDec(uint16 ValTemp,uint8 DecCount,uint16 MaxVal);
void MenuDis(uint8 DisNum);
void Dis_info(uint8 *LedBuf,uint8 *pLed);
//---------------------------------------
void KeyTask_MainLoop(void)
{
uint8 TaskTemp;
uint8 m;
if (KeyVal > 0x06) return;
m = TaskID & 0xf0;
m >>= 4;
if (m > 3) return;
TaskTemp = pgm_read_byte(&KeyTask[m][KeyVal]);
TaskID = TaskTemp & 0xf0; //保存次態(tài)
switch (TaskTemp & 0x0f) //按任務(wù)號(hào)查詢
{
case 0: //無效鍵返回
return;
break;
case 1:
MenuID = Menu_set; //進(jìn)入?yún)?shù)設(shè)定初始化顯示
break;
case 2: //SET鍵一級(jí)菜單顯示項(xiàng)遞增
fDOKEY = 1; //防止連擊
MenuID++;
if ((MenuID & 0x0f) == MENU_MAX) //在功能參數(shù)設(shè)置狀態(tài)下
{ MenuID &= 0xf0; }
break;
case 3:
fDOKEY = 1;
MenuID += 0x10; //UP、DN鍵菜單級(jí)數(shù)跳轉(zhuǎn)
break;
case 4:
fDOKEY = 1;
MenuID -= 0x10; //SET鍵菜單級(jí)數(shù)遞減
break;
case 5:
switch (MenuID & 0x0f)
{
case 0x00:
PtVal = ValAdd(PtVal,STEP,PT_MAX_VAL);
break;
case 0x01:
CtVal = ValAdd(CtVal,STEP,CT_MAX_VAL);
break;
case 0x02:
H_Alarm = ValAdd(H_Alarm,STEP,PT_MAX_VAL);
break;
case 0x03:
L_Alarm = ValAdd(L_Alarm,STEP,PT_MAX_VAL);
break;
case 0x04:
fDOKEY = 1;
BaudAndData ^= 0x10;
break;
case 0x05:
AddrVal = ValAdd(AddrVal,STEP,ADDR_MAX_VAL);
break;
case 0x06:
fDOKEY = 1;
AlarmSwitch ^= 0x01;
break;
default:
break;
}
break;
case 6:
switch (MenuID & 0x0f) //DN鍵數(shù)值減一
{
case 0x00:
PtVal = ValDec(PtVal,STEP,PT_MAX_VAL);
break;
case 0x01:
CtVal = ValDec(CtVal,STEP,CT_MAX_VAL);
break;
case 0x02:
H_Alarm = ValDec(H_Alarm,STEP,PT_MAX_VAL);
break;
case 0x03:
L_Alarm = ValDec(L_Alarm,STEP,PT_MAX_VAL);
break;
case 0x04:
fDOKEY = 1;
BaudAndData ^= 0x10;
break;
case 0x05:
AddrVal = ValDec(AddrVal,STEP,ADDR_MAX_VAL);
break;
case 0x06:
fDOKEY = 1;
AlarmSwitch ^= 0x01;
break;
default:
break;
}
break;
case 7:
switch (MenuID & 0x0f)
{
case 0x00:
PtVal = ValAdd(PtVal,FAST_STEP,PT_MAX_VAL);
break;
case 0x01:
CtVal = ValAdd(CtVal,FAST_STEP,CT_MAX_VAL);
break;
case 0x02:
H_Alarm = ValAdd(H_Alarm,FAST_STEP,PT_MAX_VAL);
break;
case 0x03:
L_Alarm = ValAdd(L_Alarm,FAST_STEP,PT_MAX_VAL);
break;
case 0x04:
AddrVal = ValAdd(AddrVal,FAST_STEP,ADDR_MAX_VAL);
break;
default:
break;
}
break;
case 8:
switch (MenuID & 0x0f) //DN鍵數(shù)值減一
{
case 0x00:
PtVal = ValDec(PtVal,FAST_STEP,PT_MAX_VAL);
break;
case 0x01:
CtVal = ValDec(CtVal,FAST_STEP,CT_MAX_VAL);
break;
case 0x02:
H_Alarm = ValDec(H_Alarm,FAST_STEP,PT_MAX_VAL);
break;
case 0x03:
L_Alarm = ValDec(L_Alarm,FAST_STEP,PT_MAX_VAL);
break;
case 0x04:
AddrVal = ValDec(AddrVal,FAST_STEP,ADDR_MAX_VAL);
break;
default:
break;
}
break;
default:
return;
}
MenuDis(MenuID);
fDispNow = 1; //立即顯示
}
//------------------------------------------------------
uint16 ValAdd(uint16 ValTemp,uint8 ValCount,uint16 MaxVal)
{
if ((ValTemp += ValCount) >= MaxVal) //參數(shù)遞增函數(shù)
{ ValTemp = 1; }
return (ValTemp);
}
//---------------------------------------------------------
uint16 ValDec(uint16 ValTemp,uint8 ValCount,uint16 MaxVal)
{
if (((ValTemp -= ValCount) == 0) || (ValTemp < ValCount)) //參數(shù)遞減函數(shù)
{ ValTemp = MaxVal - 1; }
return (ValTemp);
}
//-----------------------------------------------------------
void MenuDis(uint8 DisNum) //菜單顯示函數(shù)
{
DispBuf[ROW_5] = HIDE;
switch (DisNum)
{
case 0x00:
/* DoPot(&DispBuf[ROW_1],Ps);
if (Ps_Neg == 1) DispBuf[ROW_5] = 0; */
break;
//----------------------------------------------------
case 0x10 ... 0x16:
Dis_info(&DispBuf[ROW_5],(char *)pgm_read_word(&first_menu[DisNum & 0x0f]));
break;
//---------------------------------------------------------
case 0x20: //系統(tǒng)菜單下的二級(jí)菜單
if (PtVal == 0)
{ PtVal = 1;}
HexToBcd(&DispBuf[ROW_1],PtVal);
DealZero(&DispBuf[ROW_1]);
break;
case 0x21: //系統(tǒng)菜單下的二級(jí)菜單
if (CtVal == 0)
{ CtVal = 1;}
HexToBcd(&DispBuf[ROW_1],CtVal);
DealZero(&DispBuf[ROW_1]);
break;
case 0x22:
if (H_Alarm == 0)
{ H_Alarm = 1;}
HexToBcd(&DispBuf[ROW_1],H_Alarm);
DealZero(&DispBuf[ROW_1]);
break;
case 0x23:
if (L_Alarm == 0)
{ L_Alarm = 1;}
HexToBcd(&DispBuf[ROW_1],L_Alarm);
DealZero(&DispBuf[ROW_1]);
break;
case 0x24: //波特率值顯示
if ((BaudAndData & 0x10) == 0x00)
{ Dis_info(&DispBuf[ROW_4],"4800"); }
else
{ Dis_info(&DispBuf[ROW_4],"9600"); }
break;
case 0x25:
if (AddrVal == 0)
{ AddrVal = 1; }
HexToBcd(&DispBuf[ROW_1],AddrVal);
DealZero(&DispBuf[ROW_1]);
break;
case 0x26:
if (AlarmSwitch & 0x01)
{ Dis_info(&DispBuf[ROW_4]," off"); }
else
{ Dis_info(&DispBuf[ROW_4]," on "); }
break;
default:
break;
}
}
//---------------------------------------------------------
void Dis_info(uint8 *LedBuf,uint8 *pLed)
{
for (;*pLed;LedBuf--,pLed++)
{
if ((*pLed) == 0x2d)
{ (*LedBuf) = 46; }
else if ((*pLed) >= 0x30&&0x39 >= (*pLed))
{ (*LedBuf) = (*pLed) - 0x30; }
else if ((*pLed) >= 0x61&&0x7A >=(*pLed))
{ (*LedBuf) = (*pLed) - 0x4d; }
else
{ (*LedBuf) = 47 ;}
}
}
//------------------------------------------------------
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -