//p1口外接3*4矩阵键盘,其中p1^0不用置1,常用读出键值方法有
//“查表法”和“反转法”。查表法程序最为简短,但是稍多占用
//一点存储空间;反转法的程序执行速度最快,只是要求接口是
//双向的。
#include
#include
#define uint unsigned int
#define uchar unsigned char
uchar code table[]={
~0x3F,~0x06,~0x5B,~0x4F,~0x66,
~0x6D,~0x7D,~0x07,~0x7F,~0x6F,
~0x77,~0x7C,~0x39,~0x5E,~0x79,~0x71};//共阳极LED代码与共阴极正好相反,所以阴极码取反
uchar num;
uchar keyscan();
/*void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}*/
void main()
{
P0=table[0];
while(1)
{
num=keyscan();
if(num!=16)
P0=table[num];
}
}
uchar keyscan()
{
uchar code table1[3][4]=
{//0xee,0xde,0xbe,0x7e,
0xed,0xdd,0xbd,0x7d,
0xeb,0xdb,0xbb,0x7b,
0xe7,0xd7,0xb7,0x77};
uchar temp1=0xfd,temp2,i,j; //如果是3*4则只需将初值temp1改变p1^0不用置1并改变表值
for(i=0;i<4;i++)//扫描低四位//如果3*4键盘i<3也可
{ P1=temp1; //输出一行0
temp2=P1; //马上读入P1口状态
if((temp2&0xf0)!=0xf0)//如果有键按下
{
for(j=0;j<4;j++)//就扫描高四位 j=0 j=1 j=2 j=3
{
if(temp2==table1[i][j])//查表 i=0 0 1 2 3
return i*4+j; //查到了就返回键的值 i=1 4 5 6 7
} // i=2 8 9 10 11
} // i=3 12 13 14 15
else temp1=_crol_(temp1,1); //
// i*4+j
}
return 16; //没有查到,返回键松开的代码
}
关键字:查表法 矩阵键盘
引用地址:
查表法矩阵键盘
推荐阅读最新更新时间:2024-03-16 14:25
单片机学习记录——矩阵键盘
硬件连接 如图,4*4矩阵键盘需要接8个IO引脚。 通过行列分别扫描的方法,得出键值。 软件设计 /******************************************************* * 函 数 名 : key_scan * 函数功能 : 返回矩阵键盘被按下的键值 * 输 入 : 无 * 输 出 : 键值(1~16),无键按下时返回0 ********************************************************/ unsigned char key_scan(void) { unsigned char hang
[单片机]
矩阵键盘的51程序
// P1口扩展4*4矩阵键盘,P1.7-P1.4作为行线,P1.3-P1.0作为列线。 // 数码管显示按键值,P0提供段码,P2.7-2.5通过74ls138,作为位码,片选数码管。 #include reg52.h void leddisplay(); // 数码管显示 unsigned char keyscan(); //键盘扫描 unsigned char keyin(); //按键值读取 void delayms(unsigned int k); unsigned char data ledxs ={16,16,16,16,16,16,0,0}; // 数码管显示缓冲区 unsigned char code
[单片机]
基于RS232行列式矩阵键盘接口的设计方案
一、引言
本方案是用VHDL语言来实现的基于RS232按位串行通信总线的行列式矩阵键盘接口电路,具有复位和串行数据的接收与发送功能,根据发光二极管led0-led2的显示状态可判断芯片的工作情况;实现所有电路功能的程序均是在美国ALTERA公司生产的具有现场可编程功能的芯片EPM7128SLC84-15上调试通过的。能通过动态扫描来判有键按下、将键值转换成对应的ASCII码值,在时钟脉冲的作用实现串行数据的接收与发送。
二、设计方案
1.芯片引脚定义
reset复位输入端;clk时钟输入端;rxd串行数据接收端;retn0-retn7键盘扫描行输入线;txd串行数据发送端;scan0-
[嵌入式]
51单片机(二十九)—— 矩阵键盘输入实验
一、矩阵键盘原理介绍 在之前的文章中,我们介绍过独立按键的使用,独立按键需要每个按键使用一个IO口进行读取,如果按键比较多,对IO资源的占用比较多。使用矩阵键盘,并采用扫描的方式对按键进行读取是解决按键多的一个有效办法。采用矩阵按键的方式就可以有效的节省I/O资源。4*4的矩阵键盘只需要8个I/O口进行采集。6*6的矩阵键盘只需要12个I/O口就可以采集。 本实验的硬件电路是一个4X4的矩阵键盘。矩阵键盘的原理图如下图所示。 由原理图可以看出J23的1~4与矩阵键盘的每一行相连。5~8与矩阵键盘的每一列相连。每一列上设置了上拉电阻。矩阵键盘扫描时,令J23的1~4中的一个为低电平,如果相应的行有按键按下,则J23的5~8中
[单片机]
4×4矩阵键盘的工作原理与编程
本文介绍如何在ME300B型51/AVR单片机学习开发系统上使用数码管显示4 4矩阵键盘的键值。 一、硬件工作原理的简单介绍 该实验使用ME300B上的8位数码管显示电路和4 4矩阵键盘电路。现将这二部分的电路工作原理进行简单的介绍: 1、4 4矩阵键盘的工作原理 矩阵键盘又称为行列式键盘,它是用4条I/O线作为行线,4条I/O线作为列线组成的键盘。在行线和列线的每一个交叉点上,设置一个按键。这样键盘中按键的个数是4 4个。这种行列式键盘结构能够有效地提高单片机系统中I/O口的利用率。 图1为ME300B矩阵键盘电路图,行线接P1.4-P1.7,列线接P1.0-P1.3。 图1 矩阵键盘电路
[单片机]
stm32F103状态机矩阵键盘
矩阵键盘程序,作为麦知club小车项目的一部分,从IAR状态机应用修改而来。 IAR7.4+STM32CUBEMX调试通过。 键盘行4,列3,每条线都有10K上拉电阻。改到4×4矩阵也很容易。 行线设置为 输入,针脚为浮空; 列线设置为开漏输出。 不支持长按和组合键,主要是我不会改。 在OS中使用20ms任务周期调用。 以下贴出代码。 keypad.h /* * * Name: keypad.h */ #ifndef KEYPAD_H #define KEYPAD_H #include stm32f1xx_hal.h #include pinname.h #define PORT_KEY GPI
[单片机]
4x4矩阵键盘 扫描程序
一:不排除第四位异常处理 uchar JuzhenkeyScan() { // P3=0xfe; // temp=P3; // while(temp!=0xfe) // { // temp=P3; // switch(temp) // { // case 0xee:num=10; // break; // case 0xde:num=3; // break; // case 0xbe:num=2; // break; // case 0x7e:num=1; // break; // } // delayms(10); // } P3=0xfd;//
[单片机]