https://static.assets-stash.eet-china.com/album/old-resources/2009/3/25/82b14816-dce4-40df-812a-ca8837f7b8e2.zip优化算法
//4*4矩阵键盘的设计
#include <reg52.h>
#define key_port P1 //键盘接口定义
//延时5000+0us 函数定义
static void delay5ms(void)
{
unsigned char i,j;
for(i=185;i>0;i--)
for(j=12;j>0;j--);
}
//col对应key_port的高四位,row对应key_port的低四位
//按键ID号如下:
/*
┏━┳━┳━┳━┓ ┳
┃0 ┃1 ┃2 ┃3 ┃ ┃R0
┣━╋━╋━╋━┫ ╋
┃4 ┃5 ┃6 ┃7 ┃ ┃R1
┣━╋━╋━╋━┫ ╋
┃8 ┃9 ┃10┃11┃ ┃R2
┣━╋━╋━╋━┫ ╋
┃12┃13┃14┃15┃ ┃R3
┗━┻━┻━┻━┛ ┻
┣━╋━╋━╋━┫
C0 C1 C2 C3
*/
unsigned char key_scan(void)
{
unsigned char row, col, ok, key_code;
key_port = 0x0f;
if(key_port != 0x0f)
{
for(row = 0; row < 4; row++)
{
key_port = ~(0x10 << row);
for(col = 0; col < 4; col++)
{
ok = !(key_port & (0x01 << col));
if(ok)
{
delay5ms();
if(ok) key_code = 4*col + row;
}
}
}
return (key_code);
}
}
void main(void)
{
while(1)
{
P2 = key_scan(); //显示按键键值
}
}
用户518079 2009-3-28 11:01