单片机矩阵键盘扫描
本讲任务:
了解矩阵键盘检测原理及如何获得键盘扫描值。
逐行扫描:
我们可以通过高四位轮流输出低电平来对矩阵键盘进行逐行扫描,当低四位接收到的数据不全为1的时候,说明有按键按下,然后通过接收到的数据是哪一位为0来判断是哪一个按键被按下。
例程:
/*************************矩阵键盘扫描**************************
*单片机型号:STC89C52RC
*开发环境:KEIL
*功能:当按下一个按键后,在数码管进行数值的显示
******************************************************************/
#include<reg51.h>
sbit BEEP=P2^3;
sbit LE1=P2^6;
sbit LE2=P2^7;
void delay(int In,int Out);
unsigned char buffer,key_num;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void delay(int In,int Out) //定义延时函数
{
int i,j;
for(i=0;i<In;i )
{for(j=0;j<Out;j ){;}}
}
void display(unsigned char num) //数码管显示
{
P0=table[num]; LE1=1;LE1=0;
P0=0x00; LE2=1;LE2=0;
}
void main()
{
LE1=0;LE2=0;
while(1)
{
/**************************************************************/
P3=0xfe; //扫描S3,S4,S5,S6;
buffer=P3;
buffer=buffer&0xf0;
if(buffer!=0xf0)
{
delay(5,10);
if(buffer!=0xf0)
{
buffer=P3;
switch(buffer)
{
case 0xee:{key_num=0;}break;
case 0xde:{key_num=1;}break;
case 0xbe:{key_num=2;}break;
case 0x7e:{key_num=3;}break;
}
while(buffer!=0xf0)
{
buffer=P3;
buffer=buffer&0xf0;
BEEP=0;
}
BEEP=1;
display(key_num);
}
}
/**************************************************************/
P3=0xfd; //扫描S8,S9,S10,S11
buffer=P3;
buffer=buffer&0xf0;
if(buffer!=0xf0)
{
delay(5,10);
if(buffer!=0xf0)
{
buffer=P3;
switch(buffer)
{
case 0xed:{key_num=4;}break;
case 0xdd:{key_num=5;}break;
case 0xbd:{key_num=6;}break;
case 0x7d:{key_num=7;}break;
}
while(buffer!=0xf0)
{
buffer=P3;
buffer=buffer&0xf0;
BEEP=0;
}
BEEP=1;
display(key_num);
}
}
/**************************************************************/
P3=0xfb; //扫描S13,S14,S15,S16
buffer=P3;
buffer=buffer&0xf0;
if(buffer!=0xf0)
{
delay(5,10);
if(buffer!=0xf0)
{
buffer=P3;
switch(buffer)
{
case 0xeb:{key_num=8;}break;
case 0xdb:{key_num=9;}break;
case 0xbb:{key_num=10;}break;
case 0x7b:{key_num=11;}break;
}
while(buffer!=0xf0)
{
buffer=P3;
buffer=buffer&0xf0;
BEEP=0;
}
BEEP=1;
display(key_num);
}
}
/***************************************************************/
P3=0xf7; //扫描S18,S19,S20,S21
buffer=P3;
buffer=buffer&0xf0;
if(buffer!=0xf0)
{
delay(5,10);
if(buffer!=0xf0)
{
buffer=P3;
switch(buffer)
{
case 0xe7:{key_num=12;}break;
case 0xd7:{key_num=13;}break;
case 0xb7:{key_num=14;}break;
case 0x77:{key_num=15;}break;
}
while(buffer!=0xf0)
{
buffer=P3;
buffer=buffer&0xf0;
BEEP=0;
}
BEEP=1;
display(key_num);
}
}
}
}
对应电路图:
最后,求求看到的此文的小伙伴点赞和关注支持一下下哦。毕竟,码字不容易哦,您的支持是我最大的动力呀!!!呜呜呜~~~
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhhaeekf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13