51单片机矩阵键盘检测程序

原创 2013年12月05日 17:07:44
#include<reg52.h>  

#define uchar unsigned char
#define uint  unsigned int

uchar code table[]={
0xc0,0xf9,0xa4,0xb0, 
0x99,0x92,0x82,0xf8, 
0x80,0x90,0x88,0x83, 
0xc6,0xa1,0x86,0x8e};

void delayms(uint a)
{
uint x,y;
for(x=a;x>0;x--)
for(y=110;y>0;y--);
}

uchar keyscan()
{
uchar  temp;
static uchar keyvalue=0;   //定义静态按键值,否则每次进来会清零,也可以定义全局变量
P1=0xfe;   //清零P1口第0位,检测
temp=P1&0xf0;
if(temp!=0xf0)
{
delayms(5);  
temp=P1&0xf0;
if(temp!=0xf0)
{
if(temp==0xe0)
keyvalue=1;       //test
if(temp==0xd0)
keyvalue=2;
if(temp==0xb0)
keyvalue=3;
if(temp==0x70)
keyvalue=4;
}
while(temp!=0xf0)//等待松手,很重要
temp=P1&0xf0;//一直检测输入状态
}
P1=0xfd; //清零P1口第1位,检测
temp=P1&0xf0;
if(temp!=0xf0)
{
delayms(5);  
temp=P1&0xf0;
if(temp!=0xf0)
{
if(temp==0xe0)
keyvalue=5;       //test
if(temp==0xd0)
keyvalue=6;
if(temp==0xb0)
keyvalue=7;
if(temp==0x70)
keyvalue=8;
}
while(temp!=0xf0)//等待松手,很重要
temp=P1&0xf0;//一直检测输入状态
}
P1=0xfb;    //清零P1口第2位,检测
temp=P1&0xf0;
if(temp!=0xf0)
{
delayms(5);  
temp=P1&0xf0;
if(temp!=0xf0)
{
if(temp==0xe0)
keyvalue=9;       //test
if(temp==0xd0)
keyvalue=10;
if(temp==0xb0)
keyvalue=11;
if(temp==0x70)
keyvalue=12;
}
while(temp!=0xf0)//等待松手,很重要
temp=P1&0xf0;//一直检测输入状态
}
P1=0xf7;      //清零P1口第3位,检测
temp=P1&0xf0;
if(temp!=0xf0)
{
delayms(5);  
temp=P1&0xf0;
if(temp!=0xf0)
{
if(temp==0xe0)
keyvalue=13;       //test
if(temp==0xd0)
keyvalue=14;
if(temp==0xb0)
keyvalue=15;
if(temp==0x70)
keyvalue=16;
}
while(temp!=0xf0)//等待松手输入状态
temp=P1&0xf0;//一直检测输入状态
}

return (keyvalue);  //返回键值
}
int main(void)
{
uchar num=1;
P0=0xff;   //作外部输入时要初始化
while(1)
{
 num=keyscan();
 P0=table[num-1];
}
}

51单片机的4x4矩阵键盘扫描例程(C51)

//4x4矩阵键盘扫描例程(C51)//使用P0口上的LED灯显示4x4键盘扫描得到的键值////广西民大物电学院 李映超 2010.4.19#include                     ...
  • winmenaruto
  • winmenaruto
  • 2010年07月08日 14:58
  • 3893

51单片机—矩阵键盘-代码

#include #include "../delay/delay.h" #include "matrix.h" /*=======================================...
  • qq_31108501
  • qq_31108501
  • 2016年09月21日 21:23
  • 768

stc89c51单片机矩阵键盘扫描

c51单片机矩阵键盘扫描实现代码
  • ifreewolf_csdn
  • ifreewolf_csdn
  • 2016年10月07日 18:46
  • 1259

关于独立按键与矩阵按键的程序(51单片机)

发一个51单片机的键盘扫描程序,算法简单有效                                        再给大家分享一个不错按键程序(来自ourdev) /************...
  • yy105419
  • yy105419
  • 2016年03月08日 18:56
  • 229

51单片机矩阵键盘响应程序

51单片机矩阵键盘响应程序 #include // P0端口接LED // P0端口接数码管 // P3端口接矩阵键盘 #define LED P0 #define KEY ...
  • xiongjianjunCSND
  • xiongjianjunCSND
  • 2018年01月27日 18:33
  • 12

51单片机外设之——矩阵键盘(传统法一)

前面提到了独立按键,可见,独立按键是由矩阵键盘分离而来的。接下来看的是 4*4 的矩阵键盘,这里使用的还是上节所使用的,延时消抖检测。 先附上矩阵键盘的原理图: 在使用据矩阵键盘时,J5 排针...
  • xiaocheng_sky
  • xiaocheng_sky
  • 2016年08月06日 00:20
  • 3641

一个51单片机的键盘扫描程序,算法简单有效

一个51单片机的键盘扫描程序,算法简单有效  发一个51单片机的键盘扫描程序,算法简单有效                                        再给大家分享一个不...
  • phenixyf
  • phenixyf
  • 2016年12月25日 13:15
  • 4011

51单片机(AT89C52)矩阵键盘检测程序

矩阵键盘检测思路:行线设为输出、列线设为输入获得列码,行线设为输入、列线设为输出获得行码,由行列码确定键值。 本程序可改进的地方:按键状态机中,将等待按键释放语句移到第三个状态中,可进一步提高按键扫...
  • zhoukouguren
  • zhoukouguren
  • 2012年07月22日 12:32
  • 9328

51单片机实训-4×4矩阵键盘电子琴

51单片机实训-4×4矩阵键盘电子琴
  • myifeng1
  • myifeng1
  • 2016年12月17日 15:29
  • 299

单片机C语言实现独立按键检测与矩阵键盘操作

本文是笔者在学习51单片机的笔记心得。这篇着重介绍C51单片机是如何检测独立按键以及矩阵键盘操作。...
  • a514371309
  • a514371309
  • 2017年06月10日 10:44
  • 600
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:51单片机矩阵键盘检测程序
举报原因:
原因补充:

(最多只允许输入30个字)