📄 keybox.c
字号:
/*********************************************************************************************************
* U_164 8_key drivers
* QZhao,2007
* All Rights Reserved
* File : keybox.c
* By : QZhao
* Contact : zq1987731@163.com
*********************************************************************************************************/
/*★★★可调用函数: U_164(x);->164控制 KEY_SCAN();->键盘扫描*/
/*********************************************************************************************************
*
* 74LS164服务子程序
* 入口参数:0~255中任意数
* 返回值:成功则返回TRUE
* 功能:将参数送入74LS164的Q7~Q0中
*
*********************************************************************************************************/
static bool U_164(uchar x)
{
uchar i;
CS_8255=0;
for(i=0;i<8;i++)
{
W_8255(x,2);
K_CLK=0;
K_CLK=1;
x>>=1;
}
CS_8255=1;
return TRUE;
}
/*********************************************************************************************************
*
* 键盘扫描服务函数
* 入口参数:无
* 返回值:KEY_CACHE,无按键则返回FALSE
* 功能:扫描键盘有无输入并以01H~08H为键值返回
*
*********************************************************************************************************/
uchar KEY_SCAN(void)
{
U_164(0x00);
if(K_SCAN==1)
return FALSE;
U_164(0x7F);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
while(K_SCAN==0)
delayms(10);
return 1;
}
}
}
U_164(0xBF);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
while(K_SCAN==0)
delayms(10);
return 2;
}
}
}
U_164(0xDF);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
while(K_SCAN==0)
delayms(10);
return 3;
}
}
}
U_164(0xEF);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
while(K_SCAN==0)
delayms(10);
return 4;
}
}
}
U_164(0xF7);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
while(K_SCAN==0)
delayms(10);
return 5;
}
}
}
U_164(0xFB);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
while(K_SCAN==0)
delayms(10);
return 6;
}
}
}
U_164(0xFD);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
while(K_SCAN==0)
delayms(10);
return 7;
}
}
}
U_164(0xFE);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
if(K_SCAN==0)
{
delayms(10);
while(K_SCAN==0)
delayms(10);
return 8;
}
}
}
return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -