📄 keyprocess.c
字号:
#include"reg52.h"
#include"main.h"
bit fgkey=0;
bit fgkey_on=0;
bit IRI_Flag=0;
bit Aux_Flag=0;
bit Lock_Flag=0;
bit Protocol=0;
bit DisableKey=0;
bit PreSet=0;
bit BautSet=0;
bit SoundFlag=0;
unsigned char data keybuffer;
unsigned char scankeycounter;
unsigned char data KeyTemp;
unsigned char data j;
Uchar KeyCounter=0;
Uchar MonAddress=1;
Uchar CamAddress=1;
Uchar DisplayTemp[4];
Uchar AuxNumb;
extern Uchar NumbProtocol;
Uint LockBuffer=1234;
Uchar IRINumb;
Uchar KeyValue;
Uchar TimeValue;
//extern unsigned int TimeCounter;
extern Uchar SoundCounter;
extern unsigned char data keydata;
extern bit BUFlag;
extern bit TimerFlag;
extern void keyscan(void);
extern void delay1ms(unsigned char count);
extern void ePutstr(Uchar x,Uchar y, Uchar *ptr);
extern void DispOneChar(Uchar x,Uchar y,Uchar Wdata);
extern void Ptz(Uchar i);
extern void LcdWriteCommand( Uchar CMD,Uchar AttribC );
extern void LocateXY( char posx,char posy);
extern void LcdReset( void );
extern void x24c02_write(unsigned char address,unsigned char info);
void keyprocess(void);
/*--------------------------------------------------------------------------------------------
数字键处理程序
--------------------------------------------------------------------------------------------*/
void NumbProcess(Uchar Numb)
{
Uchar i;
Uchar Temp;
if(KeyCounter<=3)
{
Temp=18-KeyCounter;
if(!Lock_Flag)
DispOneChar(Temp,2,'*');
KeyCounter++;
for(i=3;i>=1;i--)
DisplayTemp[i]=DisplayTemp[i-1];
DisplayTemp[0]=Numb;
}
else
{
for(i=0;i<4;i++)
{
KeyCounter=1;
DisplayTemp[i]=0;
}
DisplayTemp[0]=Numb;
if(!Lock_Flag)
DispOneChar(18,2,'*');
}
if(Lock_Flag)
{
for(i=0;i<4;i++)
{
Temp=DisplayTemp[i]+48; //转换成ASCII 码
DispOneChar(18-i,2,Temp);
}
}
}
/*----------------------------------------------------------------------------------------------
数字键暂存区清零
----------------------------------------------------------------------------------------------*/
void DispTempClear(void)
{
Uchar i;
KeyCounter=0;
for(i=0;i<4;i++)
{
KeyCounter=0;
DisplayTemp[i]=0;
}
ePutstr(14,2,"[0000]");
}
/*----------------------------------------------------------------------------------------------
选择界面显示
----------------------------------------------------------------------------------------------*/
void DispProtocol(void)
{
LcdWriteCommand( 0x01, 1); // 显示清屏
ePutstr(0,0,"Selecting Protocol");
ePutstr(0,1,"1:PELCO_D");
ePutstr(11,1,"2:PELCO_P");
ePutstr(0,2,"3:YAAN");
ePutstr(11,2,"4:PD_2400");
ePutstr(0,3,"Select:");
LcdWriteCommand( 0x0f, 1);
LocateXY(7,3);
}
/*----------------------------------------------------------------------------------------------
通讯协议选择
----------------------------------------------------------------------------------------------*/
void SetProtocol(void)
{
while(Protocol)
keyprocess();
DisableKey=0;
LcdReset();
MonAddress=1;
CamAddress=1;
ePutstr(0,3,"MON[0001]"); // 上面一行显示一个预定字符
ePutstr(11,3,"CAM[0001]");
ePutstr(11,2,"ENT[0000]");
}
void SetBaut(void)
{
LcdWriteCommand( 0x01, 1); // 显示清屏
ePutstr(0,0,"Selecting Baut");
ePutstr(0,1,"1:9600");
ePutstr(11,1,"2:4800");
ePutstr(0,2,"3:2400");
ePutstr(11,2,"4:1200");
ePutstr(0,3,"Select:");
LcdWriteCommand( 0x0f, 1);
LocateXY(7,3);
while(BautSet)
keyprocess();
DisableKey=0;
LcdReset();
MonAddress=1;
CamAddress=1;
ePutstr(0,3,"MON[0001]"); // 上面一行显示一个预定字符
ePutstr(11,3,"CAM[0001]");
ePutstr(11,2,"ENT[0000]");
}
/*-----------------------------------------------------------------------------------------------
键盘处理程序
-----------------------------------------------------------------------------------------------*/
void keyprocess(void)
{
Uint Temp;
keyscan();
if(SoundFlag)
{
EA=1;
ET0=1;
TR0=1;
}
/*--------------------------------------------------------------------------------------------*/
if(keybuffer != keydata)
{
keybuffer = keydata;
scankeycounter = 20;
}
/*---------------------------------------------------------------*/
else if(scankeycounter!=0)
{
scankeycounter--;
delay1ms(1);
}
/*--------------------------------------------------------------*/
else if (keybuffer!=no_key)
{
if(DisableKey)
{
if(keybuffer>K_4 & keybuffer!=K_lock)
fgkey_on=1;
}
if(!fgkey_on)
{
fgkey_on=1;
if(BUFlag)
{
SoundFlag=1;
SoundCounter=2;
EA=1;
ET0=1;
TR0=1;
BU=1;
}
switch (keybuffer)
{
case K_0:
if(Protocol || BautSet)
;
else
NumbProcess(0);
break;
case K_1:
if(Protocol || BautSet)
{
DispOneChar(7,3,'1');
LocateXY(7,3);
if(Protocol)
{
NumbProtocol=1;
x24c02_write(0x00,0x01);
}
else
{
TH1=0xFD;
x24c02_write(0x01,0xFD);
}
}
else
NumbProcess(1);
break;
case K_2:
if(Protocol || BautSet)
{
DispOneChar(7,3,'2');
LocateXY(7,3);
if(Protocol)
{
NumbProtocol=2;
x24c02_write(0x00,0x02);
}
else
{
TH1=0xFA;
x24c02_write(0x01,0xFA);
}
}
else
NumbProcess(2);
break;
case K_3:
if(Protocol || BautSet)
{
DispOneChar(7,3,'3');
LocateXY(7,3);
if(Protocol)
{
NumbProtocol=3;
x24c02_write(0x00,0x03);
}
else
{
TH1=0xF4;
x24c02_write(0x01,0xF4);
}
}
else
NumbProcess(3);
break;
case K_4:
if(Protocol || BautSet)
{
DispOneChar(7,3,'4');
LocateXY(7,3);
if(Protocol)
{
NumbProtocol=4;
x24c02_write(0x00,0x04);
}
else
{
TH1=0xE8;
x24c02_write(0x01,0xE8);
}
}
else
NumbProcess(4);
break;
case K_5:
NumbProcess(5);
break;
case K_6:
NumbProcess(6);
break;
case K_7:
NumbProcess(7);
break;
case K_8:
NumbProcess(8);
break;
case K_9:
NumbProcess(9);
break;
case K_close:
if(Lock_Flag)
{
ePutstr(14,2,"[clos]");
if(IRI_Flag==0)
{
TimerFlag=0;
IRI_Flag=1;
IRINumb=5;
//Ptz(5);
}
}
break;
case K_open:
if(Lock_Flag)
{
ePutstr(14,2,"[open]");
if(IRI_Flag==0)
{
IRI_Flag=1;
IRINumb=4;
TimerFlag=0;
//Ptz(4);
}
}
break;
case K_near:
if(Lock_Flag)
{
ePutstr(14,2,"[near]");
if(IRI_Flag==0)
{
IRI_Flag=1;
IRINumb=7;
TimerFlag=0;
// Ptz(7);
}
}
break;
case K_far:
if(Lock_Flag)
{
ePutstr(14,2,"[ far]");
if(IRI_Flag==0)
{
IRI_Flag=1;
IRINumb=6;
TimerFlag=0;
// Ptz(6);
}
}
break;
case K_wide:
if(Lock_Flag)
{
ePutstr(14,2,"[wide]");
if(IRI_Flag==0)
{
TimerFlag=0;
IRI_Flag=1;
IRINumb=9;
//Ptz(9);
}
}
break;
case K_tele:
if(Lock_Flag)
{
ePutstr(14,2,"[tele]");
if(IRI_Flag==0)
{
TimerFlag=0;
IRI_Flag=1;
IRINumb=8;
//Ptz(8);
}
}
break;
case K_mon:
if(Lock_Flag)
{
MonAddress=DisplayTemp[2]*100 + DisplayTemp[1]*10 + DisplayTemp[0];
for(j=0;j<4;j++)
{
KeyTemp=DisplayTemp[j]+48; //转换成ASCII 码
DispOneChar(7-j,3,KeyTemp);
}
DispTempClear();
}
break;
case K_cam:
if(Lock_Flag)
{
CamAddress=DisplayTemp[2]*100 + DisplayTemp[1]*10 + DisplayTemp[0];
for(j=0;j<4;j++)
{
KeyTemp=DisplayTemp[j]+48; //转换成ASCII 码
DispOneChar(18-j,3,KeyTemp);
}
DispTempClear();
}
break;
case K_on:
if(Lock_Flag)
{
ePutstr(14,2,"[ on]");
if(BautSet)
{
DisableKey=1;
DispTempClear();
SetBaut();
}
/*-------------选择通讯协议-----------------*/
if(Protocol)
{
DisableKey=1;
DispTempClear();
DispProtocol();
SetProtocol();
}
/*--------------辅助功能开-------------------*/
if(Aux_Flag)
{
switch(AuxNumb)
{
case 1:Ptz(10); //辅助1开
break;
case 2:Ptz(12); //辅助2开
break;
case 3:Ptz(14); //辅助3开
break;
case 4:Ptz(16); //云台自动开
break;
case 5:BUFlag=1;
x24c02_write(0x02,0x01);
break;
case 10:Ptz(30); //设定左边界
break;
case 11:Ptz(26); //自动巡航
break;
case 12:Ptz(27); //添加巡航点
break;
case 13:Ptz(28); //巡航时间
break;
default:break;
}
Aux_Flag=0;
}
/*--------------调用预置点-------------------*/
if(PreSet)
{
Ptz(24);
PreSet=0;
}
DispTempClear();
}
break;
case K_off:
if(Lock_Flag)
{
ePutstr(14,2,"[ off]");
/*-----------------辅助功能关-----------------*/
if(Aux_Flag)
{
switch(AuxNumb)
{
case 1:Ptz(11); //辅助1关
break;
case 2:Ptz(13); //辅助2关
break;
case 3:Ptz(15); //辅助3关
break;
case 4:Ptz(17); //云台自动关
break;
case 5:BUFlag=0;
x24c02_write(0x02,0x00);
break;
case 10:Ptz(31); //设定右边界
default:break;
}
Aux_Flag=0;
}
/*---------------清除预置点-------------------*/
if(PreSet)
{
Ptz(25);
PreSet=0;
}
DispTempClear();
}
break;
case K_shot:
/*--------------预置点功能标志----------------*/
ePutstr(14,2,"[shot]");
if(Lock_Flag)
{
KeyValue=DisplayTemp[2]*100+DisplayTemp[1]*10+DisplayTemp[0];
PreSet=1;
DispTempClear();
}
break;
case K_patran:
ePutstr(14,2,"[patr]");
break;
case K_aux:
/*--------------辅助功能标志-------------------*/
if(Lock_Flag)
{
PreSet=0;
ePutstr(14,2,"[ aux]");
Aux_Flag=1;
AuxNumb=DisplayTemp[1]*10+DisplayTemp[0];
}
break;
case K_clear:
DispTempClear();
break;
case K_salvo:
ePutstr(14,2,"[salv]");
break;
case K_run:
ePutstr(14,2,"[ run]");
break;
case K_hold:
ePutstr(14,2,"[hold]");
break;
case K_b:
ePutstr(14,2,"[ b]");
break;
case K_time:
ePutstr(14,2,"[time]");
if(Lock_Flag)
{
TimeValue=DisplayTemp[2]*100+DisplayTemp[1]*10+DisplayTemp[0];
DispTempClear();
}
break;
case K_a:
ePutstr(14,2,"[ a]");
break;
case K_ack:
ePutstr(14,2,"[ ack]");
break;
case K_lock:
Temp=DisplayTemp[3]*1000 + DisplayTemp[2]*100 + DisplayTemp[1]*10 +DisplayTemp[0];
Protocol=0;
BautSet=0;
/*--------------键盘锁定功能-------------------*/
if(Temp==LockBuffer)
{
Lock_Flag=~Lock_Flag;
if(Lock_Flag)
ePutstr(0,2," ");
else
ePutstr(0,2,"lock");
}
/*----------------设定预置点-------------------*/
if(PreSet && Lock_Flag)
{
PreSet=0;
Ptz(23);
}
DispTempClear();
break;
case K_f1:
ePutstr(14,2,"[ f1]");
break;
case K_f2:
ePutstr(14,2,"[ f2]");
break;
case K_prog:
ePutstr(14,2,"[prog]");
break;
case K_arm:
ePutstr(14,2,"[ arm]");
break;
case K_last:
ePutstr(14,2,"[last]");
break;
case K_next:
ePutstr(14,2,"[next]");
break;
case K_vcr:
ePutstr(14,2,"[ vcr]");
break;
case K_user:
/*--------------选择通讯协议-------------------*/
if(DisplayTemp[0]==1)
Protocol=1;
if(DisplayTemp[0]==2)
BautSet=1;
ePutstr(14,2,"[user]");
break;
default:
break;
}
}
else //等待按键释放
;
}
else
{
keybuffer = no_key;
fgkey_on=0;
if(IRI_Flag&&Lock_Flag)
{
IRI_Flag=0;
IRINumb=0;
TimerFlag=0;
TR0=0;
Ptz(22);
DispTempClear();
}
}
/*---------------------------------------------------------------------------------*/
if(IRI_Flag)
Ptz(IRINumb);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -