原创 矩阵按键

2009-3-25 08:28 3472 5 6 分类: MCU/ 嵌入式

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();     //显示按键键值
 }
}

文章评论1条评论)

登录后参与讨论

用户518079 2009-3-28 11:01

好东西!
相关推荐阅读
用户149863 2010-05-22 22:40
LCD简单菜单显示
LCD简单菜单显示显示器件为图形型LCD12864(主控芯片KS0108)什么都不带!包含以下文件:LCD菜单(测试)LCD菜单(简单)LCD菜单(界面)LCD菜单(遥控器)希望对大家有用^_^感兴趣...
用户149863 2010-05-22 14:33
LCD12864(KS0108)液晶演示程序
LCD12864(KS0108)液晶演示程序LCD12864(KS0108)液晶演示程序视频: LCD12864演示程序(什么都不带的液晶) 视频演示网址:http://v.youku.com/v_s...
用户149863 2009-10-22 18:27
AVR代码
AVR单片机程序代码集,给需要的朋友们参考呵呵,都是自己一边学一边写的,一个一个字符从键盘敲出来的^_^希望对大家有用:-)呵呵,编译软件为:  ICCAVR V6.31A版本一共七个压缩包,呵呵,分...
用户149863 2009-10-22 15:18
VGA相关资料
VGA相关资料呵呵^_^如果你想玩的就请下载,有很多东西,都是花了我好几个夜晚才搜到的都是网上的资料:-)有兴趣的可以做做哦 包含以下文件夹:├─VGA+2051│  │  共享-----国外优秀电子...
用户149863 2009-10-10 14:46
PS/2 键盘与单片机
程序打包PS/2 键盘与单片机接口用LCD1602显示调试成功所以拿出来给大家分享,希望对大家有用,呵呵^_^用PS/2键盘做系统输入部分蛮方便的哦!可以使用Backspace/Esc/Tab/Cap...
用户149863 2009-08-17 19:54
AVR端口操作宏定义,便于移植
AVR端口操作宏定义头文件(ICCAVRIO.H),便于移植(ICCAVR编译环境) 压缩包里面有网上的相关资料,把它看完,相信你会更加了解红宏定义的^_^还有头文件在ICCAVRIO.H在Inclu...
我要评论
1
5
关闭 站长推荐上一条 /2 下一条