历史上的今天
今天是:2025年06月25日(星期三)
2018年06月25日 | 51单片机—矩阵键盘-代码
2018-06-25 来源:eefocus
#include
#include "../delay/delay.h"
#include "matrix.h"
/*=====================================================
按键扫描函数,返回扫描键值
======================================================*/
unsigned char key_scan(void)
{
unsigned char keyvalue;
KEYPORT = 0xf0; //高四位置高,低四位拉低
if(0xf0 != keyvalue)
{
delay_ms(10); //去抖
if(0xf0 != keyvalue) //有按键按下
{
KEYPORT = 0xfe; //检测第一行
if(0xfe != KEYPORT)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0; //过滤干扰
keyvalue += 0x0e; //过滤干扰
while(0xfe != KEYPORT);
delay_ms(10); //去抖
while(0xfe != KEYPORT);
return keyvalue;
}
KEYPORT = 0xfd; //检测第二行
if(0xfd != KEYPORT)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0; //过滤干扰
keyvalue += 0x0d; //过滤干扰
while(0xfd != KEYPORT);
delay_ms(10); //去抖
while(0xfd != KEYPORT);
return keyvalue;
}
KEYPORT = 0xfb; //检测第三行
if(0xfb != KEYPORT)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0; //过滤干扰
keyvalue += 0x0b; //过滤干扰
while(0xfb != KEYPORT);
delay_ms(10); //去抖
while(0xfb != KEYPORT);
return keyvalue;
}
KEYPORT = 0xf7; //检测第四行
if(0xf7 != KEYPORT)
{
keyvalue = KEYPORT;
keyvalue &= 0xf0; //过滤干扰
keyvalue += 0x07; //过滤干扰
while(0xf7 != KEYPORT);
delay_ms(10); //去抖
while(0xf7 != KEYPORT);
return keyvalue;
}
}
}
return 0xff;
}
/*=====================================================
按键值处理函数,返回扫描键值
======================================================*/
unsigned char key_pro(void)
{
unsigned char keynum;
keynum = key_scan();
/*按下相应的键显示相对应的码值*/
switch(keynum)
{
case 0x7e:
{
return 0; //0
break;
}
case 0xbe:
{
return 1; //1
break;
}
case 0xde:
{
return 2; //2
break;
}
case 0xee:
{
return 3; //3
break;
}
case 0x7d:
{
return 4; //4
break;
}
case 0xbd:
{
return 5; //5
break;
}
case 0xdd:
{
return 6; //6
break;
}
case 0xed:
{
return 7; //7
break;
}
case 0x7b:
{
return 8; //8
break;
}
case 0xbb:
{
return 9; //9
break;
}
case 0xdb:
{
return 10; //10
break;
}
case 0xeb:
{
return 11; //11
break;
}
case 0x77:
{
return 12; //12
break;
}
case 0xb7:
{
return 13; //13
break;
}
case 0xd7:
{
return 14; //14
break;
}
case 0xe7:
{
return 15; //15
break;
}
default:
{
return 0xff;
break;
}
}
}
上一篇:单片机—串口—代码
下一篇:51单片机lcd代码
史海拾趣
|
来源: 天极网 张鸣鸣,现为艺酷网创始人,曾有数次创业经历。她可以在重重压力之下依然按照自己的个性来选择生活方式。从北影到麻省理工大学、从演艺圈到IT圈、从留学生到创业者,她数次变换着自己的角色和人生定位,而每次都向外界兑现了当初对 ...… 查看全部问答> |
|
本信息来自合作QQ群:AVR单片机学习与交流群(17727270) 群管理员在坛子里的ID:铜河 100M、4通道,2G采样,25k记录 据说,这个虽然是100M,但实测是200M… 查看全部问答> |
|
最近遇到一个问题: 环境如下 wince下串口每秒发送15K数据,我的串口读写缓冲区设置4K,全局数据设置为20K 现在有两个解决办法 请大家分析一下那个更好 1.wince socket同步发送 ...… 查看全部问答> |
|
我现在用一个运算放大器调整单片机的采样信号.放大器的型号为LF412,资料里电源连接方式是双电源供电,如接+/-15v,由于我现在的输入信号只有正的.我把负电源接地,正电源接+15v,请问这样做行吗?… 查看全部问答> |
|
LED护栏管(数码管)现今已是非常普遍、流行的夜景照明亮化产品,因此,各个行业及酒店KTV、事业单位纷纷安装,用于展示自我形象、产品及服务。 一、考虑价格 商家常用招数之一。当然是越便宜客户越高兴;不过,羊毛出在羊身上,太便宜肯 ...… 查看全部问答> |
|
06.23【每周讨论】我们年轻,富有正义。对于社会中的不文明现象该怎样看待呢? 06.23【每周讨论】年轻的我们,富有正义、满怀激情。对于社会中的不文明现象该怎样看待呢?我们年轻人,富有正义、满怀激情,眼里容不下一粒沙。社会中那些不文明的现象经常在我们的周围发生,却让我们感到无可奈何。若为此感到懊恼的话,那你永远 ...… 查看全部问答> |
|
【M4 开发板入门】EKK-LM4F232 开发起步摘要(README FIRST ABSTRACT) EEWORLD 的朋友,当拿到 LM4F232 的评估板后,可以先看看我的 README FIRST 摘要,希望能有些帮助。 一、开发板简介 1.板上主要资源:三轴加速度测量器,OLED 屏,Stellaris ICDI 仿真器,温度传感器,具备 USB Host,Device 和 OTG 功能。 2.打 ...… 查看全部问答> |




