📄 c51_menu.txt
字号:
}
if(b_ReceiveOver)
{
//
UartProcess();
//
b_ReceiveOver=0;
RxStep=0;
RxPos=0;
REN=1;
}
//
if(b_KeyInt)
{
switch(NowKey)
{
case KEY_OK://KEY_OK, KEY_UP, KEY_ESC,
if(KeyTab[iMenuID].KeyTab_PressOk!=999)
{
iMenuID=KeyTab[iMenuID].KeyTab_PressOk;
iMenuNextID=KeyTab[iMenuID].KeyTab_PressOk;
JudgeHLight();
}
KeyFuncPtr=KeyTab[iMenuID].CurrentOperate;
(*KeyFuncPtr)(); //执行当前按键的操作
break;
case KEY_UP:
if((KeyTab[iMenuID].KeyTab_PressUp!=999)&&(iMenuNextID!=999))
{
KeyTab[iMenuID].KeyTab_PressOk=KeyTab[iMenuNextID].KeyTab_PressUp;
iMenuNextID=KeyTab[iMenuNextID].KeyTab_PressUp;
JudgeHLight();
}
break;
case KEY_ESC:
//
if(KeyTab[iMenuID].KeyTab_PressEsc!=999)
{
iMenuID=KeyTab[iMenuID].KeyTab_PressEsc;
iMenuNextID=KeyTab[iMenuID].KeyTab_PressOk;
JudgeHLight();
KeyFuncPtr=KeyTab[iMenuID].CurrentOperate;
(*KeyFuncPtr)(); //执行当前按键的操作
}
break;
//
case KEY_LEFT://KEY_LEFT, KEY_DOWN, KEY_RIGHT,
if((KeyTab[iMenuID].KeyTab_PressUp!=999)&&(iMenuNextID!=999))
{
KeyTab[iMenuID].KeyTab_PressOk=KeyTab[iMenuNextID].KeyTab_PressUp;
iMenuNextID=KeyTab[iMenuNextID].KeyTab_PressUp;
JudgeHLight();
}
break;
case KEY_DOWN:
if((KeyTab[iMenuID].KeyTab_PressDown!=999)&&(iMenuNextID!=999))
{
KeyTab[iMenuID].KeyTab_PressOk=KeyTab[iMenuNextID].KeyTab_PressDown;
iMenuNextID=KeyTab[iMenuNextID].KeyTab_PressDown;
JudgeHLight();
}
break;
case KEY_RIGHT:
if((KeyTab[iMenuID].KeyTab_PressDown!=999)&&(iMenuNextID!=999))
{
KeyTab[iMenuID].KeyTab_PressOk=KeyTab[iMenuNextID].KeyTab_PressDown;
iMenuNextID=KeyTab[iMenuNextID].KeyTab_PressDown;
JudgeHLight();
}
break;
//
case KEY_1://KEY_1, KEY_2, KEY_3,
break;
case KEY_2:
break;
case KEY_3:
break;
case KEY_4://KEY_4, KEY_5, KEY_6,
break;
case KEY_5:
break;
case KEY_6:
break;
case KEY_7://KEY_7, KEY_8, KEY_9,
break;
case KEY_8:
break;
case KEY_9:
break;
case KEY_XING://KEY_XING, KEY_0, KEY_JING,
break;
case KEY_0:
break;
case KEY_JING:
break;
case KEY_POWER://KEY_POWER, KEY_NULL
break;
case KEY_NULL:
MakeBox(3,3,5,12);
break;
//
default:
break;
}
b_KeyInt=0;
}
if((b_Arrive1S==1)&&(iMenuID==MENU_FACE))
{
ReadTime();
//
ShowDesktopTime();
//
b_Arrive1S=0;
}
}
}
void isr_ex0(void) interrupt 0 using 1
{
b_KeyInt=1;
//
cTemp_ex0=0xff;
//
DelayMs(20);
ReadyForKey();
cTemp_ex0=XBYTE[Addr_Key];
//
cTemp_ex0=cTemp_ex0&0x3f;
switch(cTemp_ex0)
{
case 0x3e://第一行
NowKey=0x10;
break;
case 0x3d://第二行
NowKey=0x20;
break;
case 0x3b://第三行
NowKey=0x30;
break;
case 0x37://第四行
NowKey=0x40;
break;
case 0x2f://第五行
NowKey=0x50;
break;
case 0x1f://第六行
NowKey=0x60;
break;
default:
NowKey=0x00;
break;
}
//
KEYROW1=0;
KEYROW2=1;
KEYROW3=1;
cTemp_ex0=XBYTE[Addr_Key];
//
cTemp_ex0&=0x3f;
if(cTemp_ex0!=0x3f)
{
NowKey=NowKey 0x01;
}
else
{
KEYROW1=1;
KEYROW2=0;
KEYROW3=1;
cTemp_ex0=XBYTE[Addr_Key];
//
cTemp_ex0&=0x3f;
if(cTemp_ex0!=0x3f)
{
NowKey=NowKey 0x02;
}
else
{
KEYROW1=1;
KEYROW2=1;
KEYROW3=0;
cTemp_ex0=XBYTE[Addr_Key];
cTemp_ex0&=0x3f;
if(cTemp_ex0!=0x3f)
{
NowKey=NowKey 0x03;
}
else
{
BitValue=XBYTE[Addr_Key];
if(!bPowerOff)
{
NowKey=0x71;
}
else
{
NowKey=0x00;
}
}
}
}
//
do
{
DelayMs(100);
}while(!KEYINT);
//
IE0=0;//清外中断0请求
}
//
void isr_t0(void) interrupt 1 using 2
{
TL0=TL0data;
TH0=TH0data;
iT0_1S+=20;//因为定时器的定时为20Ms一次
if(iT0_1S>=1000)
{
iT0_1S=0;
b_Arrive1S=1;
}
}
//
void isr_ex1(void) interrupt 2 using 1
{
_nop_();
}
//
void isr_t1(void) interrupt 3 using 2
{
_nop_();
}
//
void isr_ser(void) interrupt 4 using 3
{
if(TI)
{
if((TxNum--)>0)
{
SBUF=Send232Buffer[TxPos++];
}
else
{
TxNum=0;
TxPos=0;
}
//
TI=0;
}
else
{
RI=0;
RxNow=SBUF;
Rev232Buffer[RxPos++]=RxNow;
if(RxPos>=255)
{
RxPos=0;
}
//
if(!b_ReceiveOver)
{
switch(RxStep)
{
case 0://帧头:55 55
if(RxNow==0x55)
{
if(RxPrev==0x55)
{
RxStep=1;
}
else
{
RxPrev=RxNow;
RxPos=0;
Rev232Buffer[RxPos++]=RxNow;
RxStep=0;
}
}
else
{
RxStep=0;
RxPos=0;
REN=1;
}
break;
case 1://命令帧和数据帧的判断
if((RxNow&0x80)==0)
{
RxStep=3;
}
else
{
RxPrev=RxNow;
RxStep=2;
}
break;
case 2://命令帧,第二个命令字(和第一个命令字相同)
if(RxNow==RxPrev)
{
RxStep=7;
}
else
{
RxStep=0;
RxPos=0;
REN=1;
}
break;
case 3://数据帧,帧长度
RxDataLenght=RxNow;
RxStep=4;
break;
case 4://数据帧,数据段
RxDataLenght--;
if(RxDataLenght==0)
{
RxStep=5;
}
break;
case 5://数据帧,累加和
RxStep=6;
break;
case 6://数据帧,异或和
RxStep=8;
break;
case 7://命令帧,累加和
RxStep=8;
break;
case 8://帧尾:aa aa
if(RxNow==0xaa)
{
if(RxPrev==0xaa)
{
b_ReceiveOver=1;
REN=0;
}
else
{
RxPrev=RxNow;
}
}
else
{
RxStep=0;
RxPos=0;
REN=1;
}
break;
default:
RxStep=0;
RxPos=0;
REN=1;
break;
}
}
}
}
//
void UartProcess()
{
//
cUartTemp1=0;
cUartTemp2=0;
cUartTemp3=0;
cUartFunSn=0xff;
//
cUartTemp1=Rev232Buffer[0];
cUartTemp2=Rev232Buffer[1];
if((cUartTemp1==0x55)&(cUartTemp2==0x55))
{
cUartTemp1=Rev232Buffer[2];
cUartTemp1&=0x80;
if(cUartTemp1!=0)
{//命令帧
cUartTemp1=Rev232Buffer[2];
cUartTemp2=Rev232Buffer[3];
if(cUartTemp1==cUartTemp2)
{
cUartTemp3=cUartTemp1+cUartTemp2;
cUartTemp1=Rev232Buffer[4];
if(cUartTemp1==cUartTemp3)
{
cUartTemp1=Rev232Buffer[5];
cUartTemp2=Rev232Buffer[6];
if((cUartTemp1==0xaa)&&(cUartTemp2=0xaa))
{
cUartFunSn=Rev232Buffer[2];
}
}
}
}
else
{//数据帧
cUartAddSum=Rev232Buffer[2]+Rev232Buffer[3];
cUartXorSum=Rev232Buffer[2]^Rev232Buffer[3];
cUartDataLenght=Rev232Buffer[3];
for(i_uart=4;i_uart<(cUartDataLenght+4);i_uart++)
{
cUartTemp1=Rev232Buffer[i_uart];
cUartAddSum+=cUartTemp1;
cUartXorSum^=cUartTemp1;
}
cUartTemp1=Rev232Buffer[cUartDataLenght+4];
cUartDataLenght++;
cUartTemp2=Rev232Buffer[cUartDataLenght+4];
cUartDataLenght++;
if((cUartTemp1==cUartAddSum)&&(cUartTemp2==cUartXorSum))
{
cUartTemp1=Rev232Buffer[cUartDataLenght+4];
cUartDataLenght++;
cUartTemp2=Rev232Buffer[cUartDataLenght+4];
cUartDataLenght++;
if((cUartTemp1==0xaa)&&(cUartTemp2==0xaa))
{
cUartFunSn=Rev232Buffer[6];
}
}
}
}
switch(cUartFunSn)
{
case 0xa5:
case 0xa6://我要伪装成座机0xa7
IAmZj();
break;
case 0xac:
case 0xad:
case 0xae:
IAmOk();
break;
case 5:
iFlashAddrH=Rev232Buffer[7];
iFlashAddrM=Rev232Buffer[8];
iFlashAddrL=Rev232Buffer[9];
iFlashRdWrNum=Rev232Buffer[10];
//
i_uart=iFlashAddrM;
i_uart=(i_uart<<8)&0xff00;
FlashSectorRd(i_uart,Addr_FlashReadBuffer1);
//
i_uart=iFlashAddrM+1;
i_uart=(i_uart<<8)&0xff00;
FlashSectorRd(i_uart,Addr_FlashReadBuffer2);
//
Make05Answer();
//
break;
case 6:
iFlashAddrH=Rev232Buffer[7];
iFlashAddrM=Rev232Buffer[8];
iFlashAddrL=Rev232Buffer[9];
iFlashRdWrNum=Rev232Buffer[10];
//
i_uart=iFlashAddrM;
i_uart=(i_uart<<8)&0xff00;
FlashSectorRd(i_uart,Addr_FlashWriteBuffer1);
//
i_uart=iFlashAddrM+1;
i_uart=(i_uart<<8)&0xff00;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -