STM32 4*4矩阵键盘程序

2019-08-16 19:08发布

u8 check_Key(void) {     u16 cord_h,cord_l;//行列值中间变量  高位为行 ,低位为列; u8 Val = 0xFF; //i=(GPIOG->ODR)&0xFFFF; GPIOG->CRL=0x33888844;  GPIOG->CRH=0x44444433;      Delay_1us(); GPIOG->ODR = 0xFC3F;            //行线输出全为0  //1111 1100 0011 1111 Delay_1us(); cord_h = GPIOG->IDR & 0x003C;     //读入列线值   //0000 0000 0011 1100 if(cord_h != 0x003C)    //先检测有无按键按下     //1111 1100 0011 1111 { Delay_Nms(100);        //去抖 if(cord_h != 0x003C)  // 0000 0000 0000 0000 //1111 1100 0011 1111 {                                               cord_h = GPIOG->IDR&0x003C;  //读入列线值// GPIOG->CRL=0x88333344;   GPIOG->CRH=0x44444488;   Delay_1us(); GPIOG->ODR = cord_h|0xFFC3;  //输出当前列线值1111 1111 1100 0011 Delay_Nms(2);// 此延时比不可少; cord_l = GPIOG->IDR&0x03C0;  //读入行线值    0000 0011 1100 0000 Delay_1us(); cord_h>>=2; cord_l>>=2; Val = (cord_h+cord_l)&0xff; return Val;                  //键盘最后组合码值  } } return 0xFF;     //返回该值
}

本人一行行写出来的.适用于寄存器写和库版本写都可以用,反转法循环扫描;由于本人接的是GPIOG PIN2 - PIN 9 所以字节都是左移了两位的 后面移回来了. 输出的时候要 推挽输出 输入的时候要上拉输入;如果直接从pin0-pin7 那就更容易了.
键盘直接接的IO口 没其他外拉了.







友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
9条回答
a18270826679
1楼-- · 2019-08-17 16:55
如果是使用PB3-PB10  你这个程序怎么改  而且我按照你的接口连接线  第三行没有用
还是看不穿
2楼-- · 2019-08-17 21:05
 精彩回答 2  元偷偷看……
MoiLollita
3楼-- · 2019-08-18 00:08
学习到啦 但为啥我的第四行不能用 而且返回的行值不对呢。。。一样的硬件 难道是状态翻转时的问题?

一周热门 更多>