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 + -
显示快捷键?