矩阵键

矩阵键盘是用四条I/O线作为行线,四条I/O线作为列线组成的键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4*4个。这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。矩阵键盘,按键的位置由行号和列号唯一确定,因此可以分别对行号和列号进行二进制编码,然后两值合成一个字节,高4位是行号,低4位是列号。
<span style="font-family:宋体;">unsigned char key_scan(void)   //物理键值
{
    unsigned char keyvalue;
    KEYPORT  =0xf0;
    if(0xf0 != KEYPORT)
    {
        delay_ms(10);
	if(0xf0 != KEYPORT)    //有按键按下
	{
	    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)    //确实</span><span style="font-family: 宋体;">有按键按下</span><span style="font-family:宋体;">
	    {
	        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;
}</span>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Arduino 可以通过矩阵按键来扩展数字输入口的数量。矩阵按键通常由行和列组成,每个按键位于一个行和一个列的交叉点上。通过将行和列连接到 Arduino 的数字输入口,可以检测按键是否被按下。以下是矩阵按键的基本连接方式: ![矩阵按键连接图](https://cdn.learnku.com/uploads/images/202106/22/37540/3rGjOY0JlC.png!large) 例如,对于上图中的 4x4 矩阵按键,可以连接 8 个数字输入口(4 行 x 2 列)。下面是一个简单的示例代码,用于检测 4x4 矩阵按键的输入: ```c const int ROWS = 4; const int COLS = 4; int rowPins[ROWS] = {2, 3, 4, 5}; int colPins[COLS] = {6, 7, 8, 9}; char keys[ROWS][COLS] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; void setup() { Serial.begin(9600); for (int i = 0; i < ROWS; i++) { pinMode(rowPins[i], OUTPUT); digitalWrite(rowPins[i], HIGH); } for (int i = 0; i < COLS; i++) { pinMode(colPins[i], INPUT_PULLUP); } } void loop() { for (int i = 0; i < ROWS; i++) { digitalWrite(rowPins[i], LOW); for (int j = 0; j < COLS; j++) { if (digitalRead(colPins[j]) == LOW) { Serial.print(keys[i][j]); } } digitalWrite(rowPins[i], HIGH); } } ``` 该代码将矩阵按键连接到 Arduino 的数字输入口,并在串行监视器上显示按下的按键。该程序通过轮询每个行和列的交叉点来检测按键是否被按下。如果按键被按下,它将在串行监视器上显示相应的字符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值