历史上的今天
今天是:2025年06月22日(星期日)
2018年06月22日 | 51单片机矩阵键盘响应程序
2018-06-22 来源:eefocus
51单片机矩阵键盘响应程序
#include
// P0端口接LED
// P0端口接数码管
// P3端口接矩阵键盘
#define LED P0
#define KEY P3
#define DIG P0
unsigned char GetKey(void);
void delay10ms(void);
// 独立数码管的段码表
unsigned char val[16] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e};
void main(void)
{
unsigned char key = 0;
while (1)
{
key = GetKey();
if (key != 0)
{
DIG = val[key];
}
}
}
unsigned char GetKey(void)
{
unsigned char hang = 0, lie = 0;
unsigned char keyvalue = 0;
// 第1回合第1步
KEY = 0x0f; // 从IO口输出,写IO口
if (KEY != 0x0f)// 从IO口输入,读IO口
{
// 读出的不是0x0f说明有按键被按下
// 第1回合第2步:读出端口从读出值来判断是哪一行
delay10ms();
// 第一回合中算出行号
switch (KEY)
{
case 0x0e:hang = 1;break;
case 0x0d: hang = 2; break;
case 0x0b: hang = 3; break;
case 0x07: hang = 4; break;
default: break;
}
// 第2回合第1步
KEY = 0xf0;
if (KEY != 0xf0)
{
switch (KEY)
{
case 0xe0:lie = 1;break;
case 0xd0: lie = 2; break;
case 0xb0: lie = 3; break;
case 0x70: lie = 4; break;
default: break;
}
// 经过2个回合后hang和lie都知道了,然后根据hang和lie去计算键值即可
keyvalue = (hang - 1) * 4 + lie;
return keyvalue;
}
}
return 0;
}
void delay10ms(void) //误差 0us
{
unsigned char a,b,c;
for(c=5;c>0;c--)
for(b=4;b>0;b--)
for(a=248;a>0;a--);
}

下一篇:51单片机—矩阵键盘-代码
史海拾趣
|
使用altera cycloneIII, 外接20M晶振,接内部一个1:1的PLL(PLL输入20M, 输出也是20M), 在许多引脚上都感应出40M的脉冲波形,是什么原因啊? … 查看全部问答> |
|
有这样一个语句:PieVectTable.T1PINT=&tim_isr//将中断的入口地址写到向量表的起始位置 也就是说tim_isr()成了中断服务程序。 我有个疑问:PieVectTable是PIE_VECT_TABLE的结构体变量,他要对PIE_VECT_TABLE结构体中定义的T1PINT成员进行访问 ...… 查看全部问答> |
|
#include #define uchar unsigned char #define uint unsigned long int #define RS RB4 #define E RE2 #define UPKEY RB1 #define DOWNKEY RB2 #define CLRKEY RB5 uchar table[]=\" 000:000:000 ...… 查看全部问答> |
|
手持设备,操作系统为WINCE,当USB接口接上电脑的时候为手持设备为disk mode,而接上带USB接口的充电器就充电, 现在的问题是:我怎样区分插上的另一头连接计算机的USB线,还是另一头个就是AC供电器的线。wince usb驱动里面 怎样标志他们的不同呢 ...… 查看全部问答> |
|
Microsoft ActiveSync 方式复制文档到wince与通过SD Card复制到wince有区别吗? Microsoft ActiveSync 方式复制文档到wince与通过SD Card复制到wince有区别吗? 问题正如标题! 我今天才发现的,我通过SD CARD复制一个应用程序文档到winCE,发现不能运行,提示错误,具体内容忘记了,类似不可以识别之类。 后来我通过Microsof ...… 查看全部问答> |
|
如题,9B96的EPI模块能用于访问并行接口的AD吗? EPI模块为什么要强调地址总线,还有EPI时钟,这些好像不是为AD这样的东西准备的吧,那是不是说EPI模块就不能用于访问并行接口的AD呢? 完全不懂,请大家不要见笑,多多指教我哦……… 查看全部问答> |




