📄 keyboard.c
字号:
//Line P1.0-P1.2
//Row P0.1-P0.4
#include <reg51.h>
#include <intrins.h>
#include <stdio.h>
sbit v0 = P1^0;
sbit v1 = P1^1;
sbit v2 = P1^2;
//---------------------------------
// Functions
unsigned char scan(void);
unsigned char log2(unsigned char power);
void delay(void);
//----------------------------------------
void delay(void)
{
unsigned int count;
for (count = 0;count <5000;count++)
{
_nop_();
}
}
//----------------------------------------
unsigned char log2(unsigned char Power)
{
unsigned char Index = 0;
while (Power)
{
Power >>= 1;
Index ++;
}
return (Index-1);
}
//---------------------------------------
unsigned char scan(void)
{
unsigned char row,list,num,temp;
P1 &= 0xF8; // 1111 1000
temp = P0;
if ((temp &= 0x1F) != 0x1F) // Key press
{
delay(); //
v0 = 0; // List 0 1111 1110
v1 = 1;
v2 = 1;
temp = P0;
if ((temp |= 0xE0) != 0xFF) // At the list 0
{
}
else
{
v0 = 1; // List 1 1111 1101
v1 = 0;
v2 = 1;
temp = P0;
if ((temp |= 0xE0) != 0xFF) // At the list 1
{
}
else
{
v0 = 1; // List 2 1111 1011
v1 = 1;
v2 = 0;
temp = P0;
if ((temp |= 0xE0) != 0xFF) // At the list 2
{
}
else
return (0xFF); // No key was pressed
}
}
temp = P0;
row = (temp |= 0xE0); // 1110 0000
temp = P1;
list = (temp |= 0xF8); // 1111 1000
row = log2(~row);
list = log2(~list);
num = list * 5 + row;
return (num); // Return serial number of key
}
return (0xFF); // No key was pressed
}
/*
main()
{
while(1)
{
unsigned char keynum;
keynum = scan();
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -