原创 单片机学习日记4 矩阵键盘

2010-12-30 10:55 2353 15 17 分类: 消费电子

终于把实习答辩搞完了,又可以安心的学习俺的单片机了,呵呵,今天就搞矩阵键盘了。键盘的识别方法有行扫描法和行反转法,今天就学用行反转法写吧。

行扫描法 行扫描法又称为逐行(或列)扫描查询法,是一种最常用的按键识别方法。

判断键盘中有无键按下: 将全部行线置低电平,然后检测列线的状态。只要有一列的电平为低,则表示键盘中有键被按下,而且闭合的键位于低电平线与4根行线相交叉的4个按键之中。若所有列线均为高电平,则键盘中无键按下。

判断闭合键所在的位置: 在确认有键按下后,即可进入确定具体闭合键的过程。其方法是:依次将行线置为低电平,即在置某根行线为低电平时,其它线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按键就是闭合的按键。

反转法:

用反转法识别闭合键时,要将行线接一个并行口,先让它工作在输出方式,将列线也接到一个并行口,先让它工作在输入方式。程序使单片机通过输出端口往各行线 上全部送低电平,然后读入列线的值,如此时有某个键按下,则必这定会使某一列线值为0 。这时程序再对两个并行口进行方式设置,使接线的并行端口输出,再读取行线的输入值,那么,在闭合键所在的行线的值必定为0 。这样当一个键按下时,必定可读得一对唯一的行值和列值。

下面是俺的小程序眨眼

#include

#define uchar unsigned char

#define uint unsigned int

uchar code seg7code[]={0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; //段码

uchar k; //记录key值

void delay10ms(void) //延时程序

{

unsigned char i,j;

for(i=20;i>0;i--)

for(j=248;j>0;j--);

}

void Getch ( ) //key scan function

{

unsigned char X,Y,Z;

P2=0xff;

P2=0x0f; //先对 P2置数 行扫描

if(P2!=0x0f) //判断是否有键按下

{

delay10ms(); //延时,软件去干扰

if(P2!=0x0f) //确认按键按下;

{

X="P2"; //保存行扫描时有键按下时状态

P2=0xf0; //列扫描

Y="P2"; //保存列扫描时有键按下时状态

Z="X|Y"; //取出键值

switch ( Z ) //判断键值(那一个键按下)

{

case 0x77: k="0"; break; //对键值赋值

case 0x7b: k="1"; break;

case 0x7d: k="2"; break;

case 0x7e: k="3"; break;

case 0xb7: k="4"; break;

case 0xbb: k="5"; break;

case 0xbd: k="6"; break;

case 0xbe: k="7"; break;

case 0xd7: k="8"; break;

case 0xdb: k="9"; break;

case 0xdd: k="10";break;

case 0xde: k="11";break;

case 0xe7: k="12";break;

case 0xeb: k="13";break;

case 0xed: k="14";break;

case 0xee: k="15";break;

default:break;

}

}

}

}

void main(void)

{

while(1)

{

P2=0xff;

Getch();

P0=seg7code[k]; //查表 LED 输出

P1=0xf0; //输出相同的四位数据。

}

}

下面是俺的电路图微笑;点击下图可放大看

tu.jpg



呵呵,这个也参考别人的了,我想把它改进一下,让它显示四位不同的四位数,不过还没想好,怎么设置绶冲数组,好了,先去把肚子填一填,再回来搞!

PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户1588142 2011-9-25 12:50

路过mark!

用户1181185 2011-9-23 11:58

学习了,谢谢。。

用户1010725 2011-5-27 13:39

事情越来越明朗。Windows尽管支持ARM,可惜在ARM上面的Windows竟然不能运行原来Windows在X86里面的程序。这种对ARM的支持会让大多数人失望而归。

用户1557273 2011-1-14 20:08

就它那个不开源的样谁愿意用它

用户1071866 2011-1-11 16:16

等在平板电脑上使用office,会发现恨不得装个键盘才好

用户1048913 2011-1-11 15:01

微軟支持ARM之後,ARM-based的平版電腦,就可以堂堂皇皇的進入辦公室(因為可以執行Office應用軟件)。應該憂心的反而是像蘋果iPad這般不方便執行Office的平板電腦。

用户1587941 2011-1-10 09:36

如此看來,Intel大限不遠了.

用户1378393 2011-1-10 09:18

在商用领域,还是WINDOWS靠谱.

用户1010725 2011-1-10 08:51

中国人跨越数字鸿沟,靠ARM来完成了,X86只能退居二线。QQ 406886133

image031.jpg

用户1277994 2011-1-6 17:01

好文,大力地顶起!
相关推荐阅读
xucun915_925777961 2013-04-28 11:31
毕业后的五年拉开大家差距的原因在哪里?【转】
  有人工作,有人继续上学,大家千万不要错过这篇文章,能看到这篇文章也是一种幸运,真的受益匪浅,对我有很大启迪,这篇文章将会改变我的一生,真的太好了,希望与有缘人分享,也希望对有缘人有所帮助!...
xucun915_925777961 2013-03-31 20:28
职场大牛精彩总结:职场上,如何做人做事做管理【转】(文/张子阳)
      大道至简,越是根源和基本的问题,道理实际上越简单。关于如何做人、做事、做管理的书很多,我看得不多,但是我觉得这些书更多是侧重技术和实现细节上的,而很少从人的思想和观念去讲。实际...
xucun915_925777961 2013-03-28 14:03
介绍几种优秀的UML工具
统一建模语言(UML是 Unified Modeling Language的缩写)是用来对软件密集系统进行可视化建模的一种语言。UML为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言...
xucun915_925777961 2013-03-27 18:05
IAR EW FOR 8051 修改工程名称的方法
        近段时间一直在搞蓝牙4.0的开发任务,所以用到了IAR编译器,话说IAR编译器用途蛮广,可以编译MSP430,ARM,还有TI的51核芯片,当然,这要不同的版本,我现在用的是for...
xucun915_925777961 2013-03-26 16:40
Cortex-M3学习日志(八)-- TFT实验Part(a)
    自己用的LPC1768的开板带有一块2.4寸的TFT彩色液晶屏,虽然自己工作中还用不过显示屏,但是晚上闲着也是闲着,于是继续玩咱的LPC1768吧。 我的开发板上的液晶屏的用的是SPI接口,当...
xucun915_925777961 2013-03-25 20:48
说说那几款查看源代码的工具
说说那几款查看代码的工具 今天给大家介绍几款单片机工程师所喜欢的几款查看源代码的工具,这几款工具在懒猫的日常工作中可是帮了不少忙。 一、 Source Insight     Source Insig...
EE直播间
更多
我要评论
2
15
关闭 站长推荐上一条 /1 下一条