4x4矩阵键盘扫描例程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(temp!=0xf0) { temp=key_4x4_port;
switch(temp) { case 0xe7:
key=12; break; case 0xd7:
key=13; break; case 0xb7:
key=14; break; case 0x77:
key=15; break; } while(temp!=0xf0) { temp=key_4x4_port;
//假如高 4 位不是全 1 //延时消抖再读
if(temp!=0xf0)
//消抖后如果再次确定高 4 位不是全 1
{ temp=key_4x4_port; //读出此次按键的值
switch(temp)
{ case 0xee:
key=0; break;
case 0xde:
key=1; break;
case 0xbe:
temp=temp&0xf0; } } } }
4x4 矩阵键盘扫描例程(C51)
//使用 P0 口上的 LED 灯显示 4x4 键盘扫描得到的键值
#include <reg52.h>
//52 系列单片机头文件
#define uchar unsigned char
#define uint unsigned int
#define key_4x4_port P3
key=2; break;
case 0x7e:
key=3; break;
}
while(temp!=0xf0)
//等待按键放开
{ temp=key_4x4_port;
temp=temp&0xf0;
}
}
}
/********************************4-7************************************/
//定义 4x4 键盘使用的单片机端口
//4x4 键盘扫描所得的键值保存到这里
void main()
{
P0=0xff; //P0 开机初始化
key=0xff; //键盘值开机初始化为 ff(检测到的键值应为 0----15)
while(1)
{
key_4x4_scan();//不停调用键盘扫描程序
P0=key;
{ case 0xed:
key=4; break;
case 0xdd:
源自文库
key=5; break;
case 0xbd:
key=6; break; case 0x7d:
key=7; break; } while(temp!=0xf0) { temp=key_4x4_port;
temp=temp&0xf0; } } } /**************************************8-11******************************************/ key_4x4_port=0xfb; temp=key_4x4_port; temp=temp&0xf0; if(temp!=0xf0) { delayms(10);
{
uchar temp ;
/*****************************0-3**********************************************/
key_4x4_port=0xfe;
//送出最高位 0 电平去扫描
if(temp!=0xf0) { delayms(10);
temp=key_4x4_port; temp=temp&0xf0; if(temp!=0xf0) { temp=key_4x4_port;
switch(temp) { case 0xeb:
key=8; break; case 0xdb:
key=9; break; case 0xbb:
key=10; break; case 0x7b:
key=11; break; } while(temp!=0xf0) { temp=key_4x4_port;
temp=temp&0xf0; } } } /***************************************12-15************************************/ key_4x4_port=0xf7; temp=key_4x4_port; temp=temp&0xf0; if(temp!=0xf0) { delayms(10); temp=key_4x4_port; temp=temp&0xf0;
//用 P0 来显示键值
}
}
void delayms(uint xms)
//延时子函数
{
uint i,j;
for(i=xms;i>0;i--)
//i=xms 即延时约 xms 毫秒
for( j=110;j>0;j--);
}
void key_4x4_scan()
//4x4 键盘扫描子函数,得到的键值送至全局变量 key
key_4x4_port=0xfd;
temp=key_4x4_port;
temp=temp&0xf0;
if(temp!=0xf0)
{ delayms(10);
temp=key_4x4_port;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=key_4x4_port;
switch(temp)