没有合适的资源?快使用搜索试试~ 我知道了~
矩阵键盘扫描c程序
需积分: 9 4 下载量 30 浏览量
2013-12-10
22:40:19
上传
评论
收藏 89KB DOC 举报
温馨提示
试读
19页
矩阵键盘扫描c程序,教你如何编写矩阵键盘扫描c程序,简单易学
资源推荐
资源详情
资源评论
经典的矩阵键盘扫描程序
查找哪个按键被按下的方法为:一个一个地查找。
先第一行输出 ,检查列线是否非全高;
否则第二行输出 ,检查列线是否非全高;
否则第三行输出 ,检查列线是否非全高;
如果某行输出 时,查到列线非全高,则该行有按键按下;
根据第几行线输出 与第几列线读入为 ,即可判断在具体什么位置的按
键按下。
下面是具体程序:
!
"#!$$ 用来设置 % 口的输出,取反后使
%&'(%&) 中有一个为
*"!+'!,,$$行检测
%"#*!$$先将 &'(%&) 置高
%"(!$$使 %&'(&) 中有一个为
-" !$$ 左移一位
*%.#*+#*$$检测 %&(%&/ 中是否有一位为 ,只要
有,则说明此行有键按下,进入列检测
"#!$$ 用于检测出哪一列为
*"!+'!,,$$列检测
*%. ""#$$该列如果为低电平则可以判定为该列
"01-',2!$$获取键值,识别按键;0
为按键的定义表
!$$退出循环
3
-" !$$ 左移一位
3
3
3
3$$结束
这是一种比较经典的矩阵键盘识别方法,实现起来较为简单,程序短小精
炼。
4*4 矩阵键盘扫描程序
/*
设置行线为输入线,列线为输出线
*/
uchar KeyScan(); //按键扫描子程序
void delay10ms(); //延时程序
uchar key_free(); //等待按键释放程序
void key_deal(); //键处理程序
//主程序
void main()
{
while(1)
{
KeyScan();
key_free();
key_deal();
}
}
//按键扫描子程序
uchar KyeScan()
{
unsigned char key,temp;
P1=0xF0;
if(P1&0xF0!=0xF0)
{
delay10ms(); //延时去抖动
if(P1&0xF0!=0xF0)
{
P1=0xFE; //扫描第一列
temp=P1;
temp=temp&0xF0;
if(temp!=0xF0) //如果本列有键按下
{
switch(temp)
{
case 0xE0: //第一行有键按下
key=0;break;
case 0xD0: //第二行有键按下
key=4;break;
case 0xB0: //第三行有键按下
key=8;break;
case 0x70: //第四行有键按下
key=12;break;
}
}
P1=0xFD; //扫描第二列
temp=P1;
temp&=0xF0;
if(temp!=0xF0)
{
switch(temp)
{
case 0xE0: //第一行有键按下
key=1;break;
case 0xD0: //第二行有键按下
key=5;break;
case 0xB0: //第三行有键按下
key=9;break;
case 0x70: //第四行有键按下
key=13;break;
}
}
P1=0xFb; //扫描第三列
temp=P1;
temp&=0xF0;
if(temp!=0xF0)
{
switch(temp)
{
case 0xE0: //第一行有键按下
key=2;break;
case 0xD0: //第二行有键按下
key=6;break;
case 0xB0: //第三行有键按下
key=10;break;
case 0x70: //第四行有键按下
key=14;break;
}
}
P1=0xF7; //扫描第四列
temp=P1;
temp&=0xF0;
if(temp!=0xF0)
{
switch(temp)
{
case 0xE0: //第一行有键按下
key=3;break;
case 0xD0: //第二行有键按下
key=7;break;
case 0xB0: //第三行有键按下
key=11;break;
case 0x70: //第四行有键按下
key=15;break;
}
}
}
return(key);
}
}
//延时程序
void delay10ms()
{
unsigned char i,j;
for(i=0;i<10;b++)
for(j=0;j<120;j++)//延时 1ms
{
}
}
//等待按键释放程序
uchar key_free()
{
key=key_scan(); //取扫描到的键值
P1=0xF0;//置行线全为高电平,列线全为低电平
wheile(P1&0xF0!=0xF0) //如果仍有键按下
剩余18页未读,继续阅读
资源评论
gliang188
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功