导航:首页 > 操作系统 > 51单片机矩阵键盘程序

51单片机矩阵键盘程序

发布时间:2025-06-12 20:46:38

❶ 51单片机矩阵4*4键盘程序,P0口接一个数码管,P2口接矩阵键盘

////给你一个例子,自己再改改:
/*-----------------------------------------------
名称:矩阵键盘
论坛:www.doflye.net
编写:shifang
日期:2009.5
修改:无
内容:
------------------------------------------------*/
#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
#include"keyboard.h"
#include"delay.h"

#define KeyPort P1

/*------------------------------------------------
按键扫描函数,返回扫描键值
------------------------------------------------*/
unsigned char KeyScan(void) //键盘扫描函数,使用行列反转扫描法
{
unsigned char cord_h,cord_l;//行列值中间变量
KeyPort=0x0f; //行线输出全为0
cord_h=KeyPort&0x0f; //读入列线值
if(cord_h!=0x0f) //先检测有无按键按下
{
DelayMs(10); //去抖
if((KeyPort&0x0f)!=0x0f)
{
cord_h=KeyPort&0x0f; //读入列线值
KeyPort=cord_h|0xf0; //输出当前列线值
cord_l=KeyPort&0xf0; //读入行线值

while((KeyPort&0xf0)!=0xf0);//等待松开并输出

return(cord_h+cord_l);//键盘最后组合码值
}
}return(0xff); //返回该值
}
/*------------------------------------------------
按键值处理函数,返回扫键值
可以根据需要改变返回值

| 1 | 2 | 3 | + |
| 4 | 5 | 6 | - |
| 7 | 8 | 9 | * |
| 0 | . | = | / |
------------------------------------------------*/
unsigned char KeyPro(void)
{
switch(KeyScan())
{
case 0x7e:return 1 ;break;//0 按下相应的键显示相对应的码值
case 0x7d:return 2 ;break;//1
case 0x7b:return 3 ;break;//2
case 0x77:return '+';break;//3

case 0xbe:return 4 ;break;//4
case 0xbd:return 5 ;break;//5
case 0xbb:return 6 ;break;//6
case 0xb7:return '-';break;//7

case 0xde:return 7 ;break;//8
case 0xdd:return 8 ;break;//9
case 0xdb:return 9 ;break;//a
case 0xd7:return 'x';break;//b

case 0xee:return 0 ;break;//c
case 0xed:return '.';break;//d
case 0xeb:return '=';break;//e
case 0xe7:return '/';break;//f
default:return 0xff;break;
}
}

❷ 51单片机矩阵键盘程序:想把按键的值一一存到数组里,最后按下某个按键时,把数组里的某个数显示出来,

给一个键盘扫描程序参考:
voiddelay(unsignedinta)
{
unsignedinti,j;
for(i=0;i<a;i++)
for(j=0;j<120;j++);
}
ucharkbscan(void)
{
unsignedcharsccode,recode;
P1=0x0f;//发0扫描,列线输入
if((P2&0x0f)!=0x0f)//有键按下
{
delay(20);//延时去抖动
if((P1&0x0f)!=0x0f)
{
sccode=0xef;//逐行扫描初值
while((sccode&0x01)!=0)
{
P1=sccode;
if((P1&0x0f)!=0x0f)
{
recode=(P1&0x0f)|0xf0;
while((P1&0x0f)!=0x0f);//等待键抬起
return((~sccode)+(~recode));
}
else
sccode=(sccode<<1)|0x01;
}
}
}
return0;//无键按下,返回0
}

uchargetkey(void)
{
unsignedcharkey,keyval=0xff;
key=kbscan();
switch(key)
{
case0x11:keyval=1;break;
case0x12:keyval=2;break;
case0x14:keyval=3;break;
case0x18:keyval=10;break; //+
case0x21:keyval=4;break;
case0x22:keyval=5;break;
case0x24:keyval=6;break;
case0x28:keyval=11;break; //-
case0x41:keyval=7;break;
case0x42:keyval=8;break;
case0x44:keyval=9;break;
case0x48:keyval=12;break; //清除
case0x81:keyval=13;break;
case0x82:keyval=0;break;
case0x84:keyval=14;break; //小数点
case0x88:keyval=15;break; //确认
default:keyval=16;break;
}
return(keyval);
}

❸ 求大神,51单片机矩阵键盘问题!!!

我给个程序你参考一下

程序:

#include<reg52.h>

#include<intrins.h>

#defineucharunsignedchar

#defineuintunsignedint

ucharkey=16,key_t=16;

sbitan=P2^0;

sbitwei=P2^1;

ucharcodetable[]={

0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,//共阴数码管段选码表,无小数点

0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};

voiddelay(uintms)

{

uchari;

while(ms--)

for(i=0;i<110;i++);

}

voidkey_tst()

{

ucharkess;

if(P1!=0xf0)

delay(5);

if(P1!=0xf0)

{

P1=0x0f;

delay(3);

kess=P1^0x0f; //P1口的状态导或上0x0f,如果下了高4位不管,看低4位是多少

switch(kess)

{

case1:key=0;break;

case2:key=1;break;

case4:key=2;break;

case8:key=3;break;

default:key=16;

}

P1=0xf0;

delay(1);

kess=P1>>4^0x0f;

switch(kess)

{

case1:key+=12;break;

case2:key+=8;break;

case4:key+=4;break;

case8:key+=0;break;

default:key=16;

}

}

}

voidmain()

{

P0=0x00;

while(1)

{

key_tst();

P0=table[key];

an=1;

an=0;

P0=0x7f;

wei=1;

wei=0;

delay(2);

}

}

阅读全文

与51单片机矩阵键盘程序相关的资料

热点内容
python适用于什么 浏览:521
app畅读模式怎么开 浏览:907
plc编程笔记本电脑 浏览:809
专业程序员招聘网站 浏览:475
安卓如何微信置顶文案 浏览:815
linuxsocket文件描述符 浏览:494
java中的model 浏览:864
海康威视手机客户端显示加密 浏览:29
阿里云服务器地区选错了有影响吗 浏览:16
重庆空气压缩机 浏览:205
邮政银行app怎么交小儿医保 浏览:82
函数式编程优势 浏览:647
qt使用yasm编译 浏览:681
黄金指标源码怎么用 浏览:495
怎么用vim运行python 浏览:681
3d命令面板在哪里找 浏览:894
java递归菜单 浏览:921
linux查看硬盘io 浏览:265
sql引入了什么存储加密 浏览:813
圣诞头像生成小程序源码 浏览:618