预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

矩阵键盘扫描原理 方法一: 逐行扫描:我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。 方法二: 行列扫描:我们可以通过高四位全部输出低电平,低四位输出高电平。当接收到的数据,低四位不全为高电平时,说明有按键按下,然后通过接收的数据值,判断是哪一列有按键按下,然后再反过来,高四位输出高电平,低四位输出低电平,然后根据接收到的高四位的值判断是那一行有按键按下,这样就能够确定是哪一个按键按下了。 //行列扫描 #include<reg51.h> #defineGPIO_KEYP0 #defineGPIO_LCDP2 unsignedcharcodea[17]= {~0xfc,~0x60,~0xda,~0xf2,~0x66,~0xb6,~0xbe,~0xe0, ~0xfe,~0xf6,~0xee,~0x3e,~0x9c,~0x7a,~0xde,~0x8e,~0x00}; //按位取反的用法 voiddelay10ms(); voidkeydown();//要与下面的定义一致 voidmain() { GPIO_LCD=a[16];//初始化数码管 while(1) { keydown(); } } voiddelay10ms() { unsignedchara,b; for(a=38;a>0;a--) for(b=130;b>0;b--); } voidkeydown() //检测按下,按下时需要消抖,检测松开,返回按键值 //没有按键时保持 { unsignedcharn=0,key; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)//读取按键是否按下 { delay10ms();//延时10ms消抖 if(GPIO_KEY!=0x0f)//再次检测按键是否按下 { GPIO_KEY=0x0f;//测试列 switch(GPIO_KEY) { case0x07:key=0;break; case0x0b:key=1;break; case0x0d:key=2;break; case0x0e:key=3;break; default:GPIO_LCD=a[16]; } GPIO_KEY=0xf0;//测试行 switch(GPIO_KEY) { case0x70:key=key;break; case0xb0:key=key+4;break; case0xd0:key=key+8;break; case0xe0:key=key+12;break; default:GPIO_LCD=a[16]; } GPIO_LCD=a[key]; while(++n<5&&GPIO_KEY!=0xf0)//检测按键是否松开 { delay10ms(); } } } } //逐行扫描 #include<reg51.h> #defineGPIO_KEYP0 #defineGPIO_LEDP2 unsignedcharcodea[17]= {~0xfc,~0x60,~0xda,~0xf2,~0x66,~0xb6,~0xbe,~0xe0, ~0xfe,~0xf6,~0xee,~0x3e,~0x9c,~0x7a,~0xde,~0x8e,~0x00}; //按位取反的用法 voiddelay10ms(); voidkeydown1();//要与下面的定义一致 voidmain() { GPIO_LED=a[16];//初始化数码管 while(1) { keydown1(); } } voidkeydown1() { unsignedcharn=0,key; GPIO_KEY=0x0f; if(GPIO_KEY!=0x0f)//检测按键是否按下 { delay10ms();//延时10ms消抖 if(GPIO_KEY!=0x0f)//再次检测 { GPIO_KEY=0x7f;//高四位轮流输出低电平 if(GPIO_KEY!=0x7f) { switch(GPIO_KEY) { case0x77:key=0;gotoAA; case0x7b:key=1;gotoAA; case0x7d:key=2;gotoAA; case0x7e:key=3;gotoAA; } } GPIO_KEY=0xbf; if(GPIO_KEY!=0xbf) { switch(GPIO_KEY) { case0xb7:key=4;gotoAA; case0xbb:key=5;gotoAA; case0xbd:key=6;gotoAA; case0xbe:key=7;gotoAA; } } GPIO_KEY=0xdf; if(