十分好用的单片机4*4矩阵键盘扫描代码,送给初学单片机的你

十分好用的单片机4*4矩阵键盘扫描代码,送给初学单片机的你
2020年02月25日 00:46 麻薯母婴

volatile unsigned char CF[4]; //按键触发标志(表示4列,每一列同一行的

//值是一样的但列标不一样来区分不同列的键)

volatile unsigned char KeyVal; //键值

code unsigned char KeyOut[4] = {0xef,0xdf,0xbf,0x7f}; //4X4按输出端控制

#define KEY P2 //P2口作为4*4矩阵键盘输入

/*

**描述:新型4X4按键扫描程序 放在1ms-10ms中断内使用(十分稳定不需要再写消抖程序)

**备注:按键弹起时 keyVal = 0 单键按下 keyVal 有16个值,你自己程序可以针对不同值

**进行不同程序操作 keyVal单键值分别为

**0x11,0x12,0x14,0x18,

**0x21,0x22,0x24,0x28,

**0x31,0x32,0x34,0x38,

**0x41,0x42,0x44,0x48,

*/

void Key_Head()

{

unsigned char ReadData[4];

static unsigned char i;

if(++i>=4)i=0;

KEY = KeyOut[i]|0x0f; //忽略低4位

ReadData[i] = (KEY|0xf0)^0xff; //忽略高4位 取反

CF[i] = ReadData[i] & (ReadData[i] ^ Cont[i]);

Cont[i] = ReadData[i];

//输出键值

switch(CF[i])//第i列

{

case 0x08: KeyVal = (i

case 0x04: KeyVal = (i

case 0x02: KeyVal = (i

case 0x01: KeyVal = (i

default:KeyVal = 0;break;

}

}

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部