【51单片机】矩阵键盘 线反转法程序

按照我们电子协会的接法:

 

 3/72/B1/D0/E
7/7777B7D7E
6/BB7BBBDBE
5/DD7DBDDDE
4/EE7EBEDEE
void display0(uchar temp){
        uchar k=0;
        switch(temp){
            case 0xe7:k=0;break;
            case 0xeb:k=1;break;
            case 0xed:k=2;break;
            case 0xee:k=3;break;
            case 0xd7:k=4;break;
            case 0xdb:k=5;break;
            case 0xdd:k=6;break;
            case 0xde:k=7;break;
            case 0xb7:k=8;break;
            case 0xbb:k=9;break;
            case 0xbd:k=10;break;
            case 0xbe:k=11;break;
            case 0x77:k=12;break;
            case 0x7b:k=13;break;
            case 0x7d:k=14;break;
            case 0x7e:k=15;break;
            default:k=0xff;
        }
        smg4 = 0;
        if(k == 0xff)
            P0 = 0xff;
        else
            P0 = table[k];
        delayms(5);
        smg4 = 1;
}
uchar keysscan(){
        uchar i,j;
        P1 = 0x0F;
        i = P1&0x0F;
        if(i != 0x0F){
            delayms(10);
            if(i != 0x0F){
                    i = P1&0x0F;
                    P1 = 0xF0;
                    j = P1&0xF0;
                    return (i+j);
            }
        }
        return 0xFF;
}

 

转载于:https://www.cnblogs.com/tao-zhu-forever/p/9621946.html

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个基于51单片机矩阵键盘反转行列扫描的代码示例: ```c #include <reg51.h> // 定义矩阵键盘的行和列的引脚号 sbit ROW_1 = P1^0; sbit ROW_2 = P1^1; sbit ROW_3 = P1^2; sbit ROW_4 = P1^3; sbit COL_1 = P1^4; sbit COL_2 = P1^5; sbit COL_3 = P1^6; sbit COL_4 = P1^7; // 定义矩阵键盘的按键对应的键值 unsigned char KeyTable[4][4] = { {'1', '2', '3', 'A'}, {'4', '5', '6', 'B'}, {'7', '8', '9', 'C'}, {'*', '0', '#', 'D'} }; // 等待键盘扫描完成的函数 void Delay10ms() { unsigned char i, j; for (i = 0; i < 10; i++) { for (j = 0; j < 110; j++); } } // 读取矩阵键盘的行状态 unsigned char Read_Row() { unsigned char row; P1 = 0x0F; // 将列设置为高电平,行设置为低电平 if (ROW_1 == 0) { row = 0; } else if (ROW_2 == 0) { row = 1; } else if (ROW_3 == 0) { row = 2; } else if (ROW_4 == 0) { row = 3; } return row; } // 读取矩阵键盘的列状态 unsigned char Read_Col() { unsigned char col; P1 = 0xF0; // 将行设置为高电平,列设置为低电平 if (COL_1 == 0) { col = 0; } else if (COL_2 == 0) { col = 1; } else if (COL_3 == 0) { col = 2; } else if (COL_4 == 0) { col = 3; } return col; } // 读取按键的键值 unsigned char KeyScan() { unsigned char row, col; P1 = 0xFF; // 将行和列都设置为高电平 while (1) { row = Read_Row(); if (row != 0xFF) { // 如果有行状态变为低电平,说明该行对应的按键被按下 Delay10ms(); // 延时一段时间等待按键稳定 if (Read_Row() == row) { break; } } } P1 = 0x00; // 将行和列都设置为低电平 while (1) { col = Read_Col(); if (col != 0xFF) { // 如果有列状态变为低电平,说明该列对应的按键被按下 Delay10ms(); // 延时一段时间等待按键稳定 if (Read_Col() == col) { break; } } } return KeyTable[row][col]; // 返回按键对应的键值 } void main() { unsigned char key; while (1) { key = KeyScan(); // 读取按键的键值 // 处理按键的键值 // ... } } ``` 该代码中使用了51单片机的GPIO来实现矩阵键盘反转行列扫描。在代码中,将矩阵键盘的行和列的引脚号定义为GPIO的输入输出引脚,通过设置引脚的电平状态来实现对矩阵键盘的扫描。同时,使用了延时函数来等待按键稳定,确保可以正确地检测到按键的按下和释放。在实际应用中,可以根据需要对代码进行修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值