📄 key.c
字号:
//**************************************************************************************************************************
#include <c8051F020.h>
#include "HEAD.H"
//**************************************************************************************************************************
xdata unsigned char con_press_mark;
//**************************************************************************************************************************
bit key_line_in(void)
{
IN_KEY_ROW = 1;
return ( IN_KEY_ROW ) ;
}
//**************************************************************************************************************************
void key_line_out(unsigned char out_data)
{
xdata unsigned char i;
KEY_CLK_0
for (i = 0 ; i< 8 ; i ++)
{
out_data <<= 1;
if(CY)
KEY_DATA_1
else
KEY_DATA_0
KEY_CLK_1
KEY_CLK_0
}
KEY_DATA_1
}
//**************************************************************************************************************************
unsigned char get_key( unsigned char countinue_dir )
{
key_line_out(0);
if(key_line_in())
{
IN_KEY_ROW = 0;
Delay_ms( 100 ) ;
return (0);//判断无键输入
}
Delay_ms( 10 ) ;
if(key_line_in()) return (0);
//有键输入
key_line_out(0xfe) ;
if(!key_line_in())
{
KEYLED=1;
while(!key_line_in() && countinue_dir);// WDTCR = 0x37;
KEYLED=0;
if(!countinue_dir)
{
if(con_press_mark < 4)
{
countinue_dir = 10;
while(!key_line_in() )
{
Delay_ms((5 - con_press_mark) * 20);
if(!countinue_dir-- ) {con_press_mark++; break;}
}
}
}
else con_press_mark = 0;
return (UP_ARROW_KEY);
}
key_line_out(0xfd) ;
if(!key_line_in())
{
KEYLED=1;
while(!key_line_in() && countinue_dir);// WDTCR = 0x37;
KEYLED=0;
if(!countinue_dir)
{
if(con_press_mark < 4)
{
countinue_dir = 10;
while(!key_line_in() )
{
Delay_ms((5 - con_press_mark) * 20);
if(!countinue_dir-- ) {con_press_mark++; break;}
}
}
}
else con_press_mark = 0;
return (LEFT_ARROW_KEY);
}
key_line_out(0xfb) ;
if(!key_line_in())
{
KEYLED=1;
while(!key_line_in() && countinue_dir);// WDTCR = 0x37;
KEYLED=0;
if(!countinue_dir)
{
if(con_press_mark < 4)
{
countinue_dir = 10;
while(!key_line_in() )
{
Delay_ms((5 - con_press_mark) * 20);
if(!countinue_dir-- ) {con_press_mark++; break;}
}
}
}
else con_press_mark = 0;
return (DOWN_ARROW_KEY);
}
key_line_out(0xf7) ;
if(!key_line_in())
{
KEYLED=1;
while(!key_line_in() && countinue_dir);// WDTCR = 0x37;
KEYLED=0;
if(!countinue_dir)
{
if(con_press_mark < 4)
{
countinue_dir = 10;
while(!key_line_in() )
{
Delay_ms((5 - con_press_mark) * 20);
if(!countinue_dir-- ) {con_press_mark++; break;}
}
}
}
else con_press_mark = 0;
return (RIGHT_ARROW_KEY);
}
key_line_out(0xef) ;
if(!key_line_in())
{
KEYLED=1;
while(!key_line_in());
KEYLED=0;
return (RETURN_KEY);
}
return(0);
}
//**************************************************************************************************************************
// The End
//**************************************************************************************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -