51单片机4×4矩阵按键扫描方法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void Check_Row()
{
uchar j;
key=0xf0; //低4位置0
for(j=0;j<4;j++)
{
if(key==Row[j])
{
row_num=j;//取出检测值
break;//结束行检测
}
}
}
/*******按键松开检测*********/
uchar Check_Release()
for(i=0;i<4;i++)
{
if(key==Line[i])
{
line_num=i;//取出检测值
break;//结束行检测
}
}
}
//********列检测*********//
uchar Row[]={0xe0,0xd0,0xb0,0x70};//那个按键按下,检测出的状态则对应数组中的第几个数
//送至led显示
/*
eg:如果是第三行第二列按键按下
则第3个、第6(2列+4)个LED灯亮
如下图所示(Proteus仿真电路图)
*/
}
}
while(1)
{
while(!Check_Button());//若无按键按下,则等待,若有继续下一步
Check_Line();//行检测
Check_Row();//列检测
while(Check_Release());//检测按键是否松开
led=led_arry[line_num]&led_arry[row_num+4];
/*****4×4按键扫描******/
/***编程要点
1.首先检测是否有按键按下
2.若有按键按下,即进行行检测,列检测
3.行检测:高4位设为0,低4位为1,进行检测0x0f
4.列检测:低4位设为0,高4位为1,进行检测0xf0
5.检测按键是否松开
6.送至LED显示,前四个代表第几行
后四个代表第几列
return 0;//返回0
else//否则
return 1;//返回1
}
//********行检测********//
uchar Line[]={0x0e,0x0d,0x0b,0x07}; //那个按键按下,检测出的状态则对应数组中的第几个数
void Check_Line()
{
uchar i;
key=0x0f;//高四位为0
led_arry[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数组定义,便于显示
//******检测是否有按键按下*****//
uchar Check_Button()
{
key=0x0f;//高四位为0
if(key==0x0f)//若无变化,证明无按键按下
{
key=0xf0;//低四位为0
if(key==0xf0)//若无变化,证明按键松开
return 0;//返回0
else//否则,按键未松开
return 1;//返回1
}
//*********主函数*********//
int main()
{
key=0xff;//按键初始化
led=0xff;//关闭LED灯
P0为led灯口wenku.baidu.com
P2为按键接口
****///
#include<reg51.h>
#define uchar unsigned char
#define key P2//P2口定义,便于调用
#define led P0//P0口定义,便于调用
unsigned char line_num,row_num;//行列定义
{
uchar j;
key=0xf0; //低4位置0
for(j=0;j<4;j++)
{
if(key==Row[j])
{
row_num=j;//取出检测值
break;//结束行检测
}
}
}
/*******按键松开检测*********/
uchar Check_Release()
for(i=0;i<4;i++)
{
if(key==Line[i])
{
line_num=i;//取出检测值
break;//结束行检测
}
}
}
//********列检测*********//
uchar Row[]={0xe0,0xd0,0xb0,0x70};//那个按键按下,检测出的状态则对应数组中的第几个数
//送至led显示
/*
eg:如果是第三行第二列按键按下
则第3个、第6(2列+4)个LED灯亮
如下图所示(Proteus仿真电路图)
*/
}
}
while(1)
{
while(!Check_Button());//若无按键按下,则等待,若有继续下一步
Check_Line();//行检测
Check_Row();//列检测
while(Check_Release());//检测按键是否松开
led=led_arry[line_num]&led_arry[row_num+4];
/*****4×4按键扫描******/
/***编程要点
1.首先检测是否有按键按下
2.若有按键按下,即进行行检测,列检测
3.行检测:高4位设为0,低4位为1,进行检测0x0f
4.列检测:低4位设为0,高4位为1,进行检测0xf0
5.检测按键是否松开
6.送至LED显示,前四个代表第几行
后四个代表第几列
return 0;//返回0
else//否则
return 1;//返回1
}
//********行检测********//
uchar Line[]={0x0e,0x0d,0x0b,0x07}; //那个按键按下,检测出的状态则对应数组中的第几个数
void Check_Line()
{
uchar i;
key=0x0f;//高四位为0
led_arry[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数组定义,便于显示
//******检测是否有按键按下*****//
uchar Check_Button()
{
key=0x0f;//高四位为0
if(key==0x0f)//若无变化,证明无按键按下
{
key=0xf0;//低四位为0
if(key==0xf0)//若无变化,证明按键松开
return 0;//返回0
else//否则,按键未松开
return 1;//返回1
}
//*********主函数*********//
int main()
{
key=0xff;//按键初始化
led=0xff;//关闭LED灯
P0为led灯口wenku.baidu.com
P2为按键接口
****///
#include<reg51.h>
#define uchar unsigned char
#define key P2//P2口定义,便于调用
#define led P0//P0口定义,便于调用
unsigned char line_num,row_num;//行列定义