key.c
来自「一个基于C51开发的计价秤」· C语言 代码 · 共 148 行
C
148 行
/*********************************************/
// File Name: key.c
// Author: henny
// Date: 2006/3/1
/*********************************************/
#include <SST89x5xxRD2.h>
#include <intrins.h>
#include "Public.h"
#include "KeyBoard.h"
#define SHIFT_KEY P3_2
extern BYTE mode;
extern BOOL keydone;
extern BOOL keyprocess;
extern BOOL memory_key_hold;
extern BYTE keypre[4];
BOOL Key_Short_Test()
{
BYTE data row=0xfe;
SHIFT_KEY=1;
P2=0xff;
while(row>0x7f)
{
P0=row;
if((P2&0x7f)!=0x7f)
return FALSE;
row=_crol_(row,1);
}
return TRUE;
}
VOID Keyscan(KEYRET *kpd) using 2
{
BYTE data x,y;
BYTE data row=0xfe,col;
SHIFT_KEY=1;
P2=0xff;
_nop_();
_nop_();
_nop_();
for(x=0;x<8;x++)
{
P0=row;
if(!SHIFT_KEY&&(row==0x7f))
{
kpd->funcnt++;
kpd->funval=0x43;
}
if(!SHIFT_KEY&&(row==0xfb))
{
kpd->shiftcnt++;
kpd->modeval=1;
}
if(!SHIFT_KEY&&(row==0xfd))
{
kpd->shiftcnt++;
kpd->memval=1;
}
if(!SHIFT_KEY&&(row==0xfe))
{
kpd->shiftcnt++;
kpd->shiftval=1;
}
y=1;
col=0xfe;
while(col>0x7f)
{
if(P2==col)
{
kpd->funcnt++;
kpd->funval=x*7+y;
}
y++;
col=_crol_(col,1);
}
row=_crol_(row,1);
}
}
VOID Key() using 2
{
static BYTE data keycnt;
static BOOL keysec;
KEYRET keytemp={0x00,0x00,0x00,0x00,0x00,0x00};
if(keydone)
{
Keyscan(&keytemp);
if(!keytemp.funcnt&&!keytemp.shiftcnt)
{
keypre[0]=0x00;
keypre[1]=0x00;
keypre[2]=0x00;
keypre[3]=0x00;
keysec=FALSE;
memory_key_hold=FALSE;
keycnt=0x00;
}
else if((keytemp.memval==keypre[2])&&!keytemp.funcnt&&keypre[2]&&!keypre[3])
{
keysec=FALSE;
}
else if(!keysec)
{
if(keytemp.funcnt>1)
keysec=TRUE;
if(keypre[1]!=keytemp.shiftval)
{
keypre[1]=keytemp.shiftval;
}
if(keypre[2]!=keytemp.memval)
{
keypre[2]=keytemp.memval;
}
if(keypre[3]!=keytemp.modeval)
{
keypre[3]=keytemp.modeval;
}
if(keytemp.funval!=keypre[0])
{
keypre[0]=keytemp.funval;
keycnt=0x00;
}
if(keypre[3]&&keypre[1])
keypre[0]=0x41;
if(keypre[3]&&keypre[2])
keypre[0]=0x42;
keycnt++;
if(keycnt==N)
{
keycnt=0;
if(!keytemp.shiftcnt&&keytemp.funcnt||
keypre[1]&&keytemp.funcnt||
keypre[2]&&keytemp.funcnt||
keypre[3]&&keytemp.funcnt||
keypre[1]&&keypre[3]||
keypre[2]&&keypre[3]||
keypre[1]&&(mode==Calculator_mode)||
keypre[3]&&(mode!=Sales_mode))
{
keysec=TRUE;
keyprocess=TRUE;
}
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?