【STC89C52】独立键盘和矩阵键盘

news/2024/11/18 9:32:17/

今天我分享的是基于STC89C52的独立键盘与矩阵键盘实验的学习笔记。希望对你有所帮助!

目录

一、原理图分析 

二、独立键盘

三、矩阵键盘


一、原理图分析 

键盘在现实生活中很常见,手机的虚拟键盘,电脑的实体键盘。

键盘是由一个个按键构成,按键常态下与两端触点断开,按下时与两端触点闭合。

键盘分为编码键盘和非编码键盘,电脑用的是编码键盘,单片机用的是非编码键盘。非编码键盘又分为矩阵键盘和独立键盘。

独立键盘与矩阵键盘共用P3口。

独立键盘按键一端接地,一端接I\O口。通过控制IO口输出高电平检测是否按下按键,按下按键为低电平,松开恢复高电平。

矩阵键盘用行扫描和列扫描。行扫描行高电平,列低电平,任意按下一个键对应的行线低电平。列扫描列高电平,行低电平,任意按下一个键对应的列线低电平。

二、独立键盘

效果:按S2数码管显示加一加到9,按S3数码管显示减1减到0。

#include<reg52.h>
sbit WE=P2^7;
sbit DU=P2^6;
sbit key_S2=P3^0;
sbit key_S3=P3^1;
#define uint unsigned int
#define uchar unsigned char
void delay(uint z){uint x=0;uint y=0;for(x=z;x>0;x--)for(y=114;y>0;y--);
}
uchar board[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//0-9
void main(){uint num=0;WE=1;P0=0xfe;//11111110WE=0;while(1){if(key_S2==0){delay(20);//按键消抖if(key_S2==0){if(num<9)num++;while(!key_S2);//松开按键			}}if(key_S3==0){delay(20);//按键消抖if(key_S3==0){			if(num>0)num--;while(!key_S3);//松开按键			}}DU=1;P0=board[num];DU=0;}
}

记得一定要按键消抖,不然数据是乱的。消抖完还要再次判断是否按下,来确定是人工按键还是机械抖动。按键消抖通过延时5-20毫秒解决。

还要再写一个确保按一次键只产生按一次键效果的代码,不会因为一直按着就产生按了很多次的效果,通常是用循环解决这个问题,按着进入循环,松开退出循环。

三、矩阵键盘

效果:按矩阵键盘显示0-9、A-F、H、L、-、清除。

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit WE=P2^7;
sbit DU=P2^6;
void delay(uint z){
uint x=0;
uint y=0;
for(x=z;x>0;x--)for(y=114;y>0;y--);
}
uint num=19;
uchar board[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,//0-9
0x77,0x7C,0x39,0x5E,0x79,0x71,//A-F
0x76,  //H
0x38,  //L
0x40,  //-
0x00};  //清除void keyscanf(){P3=0xf0;//矩阵键盘扫描//列扫描if(P3!=0xf0){delay(10);//按键消抖if(P3!=0xf0){switch(P3){case 0xe0:num=0;break;case 0xd0:num=1;break;case 0xb0:num=2;break;case 0x70:num=3;break;}P3=0x0f;//行扫描switch (P3){case 0x0e:num=num;break;case 0x0d:num=num+4;break;case 0x0b:num=num+8;break;case 0x07:num=num+12;break;}while(P3!=0x0f);//松开按键}}P3=0xff;//独立键盘扫描if(P3!=0xff){delay(10);//按键消抖if(P3!=0xff){switch(P3){case 0xfe:num=16;break;case 0xfd:num=17;break;case 0xfb:num=18;break;case 0xf7:num=19;break;}while(P3!=0xff);//松开按键}}
}
void main(){WE=1;P0=0xfe;//11111110WE=0;while(1){keyscanf();//扫描按键DU=1;P0=board[num];DU=0;}
}

松开按键的代码是与最近的赋给P3的值(松开之后默认是恢复成这样)进行比较。 

以上就是我今天的分享,如果有什么建议或补充欢迎评论区留言哟~


http://www.ppmy.cn/news/392971.html

相关文章

win10系统下载安装PS2015

知乎专栏&#xff1a;软件下载安装—win10下载安装photoshop_cc_2015 解压下载好的zip压缩包&#xff0c;再解压里面的Adobe_Photoshop_CC_2015_Win64.zip&#xff0c;切记不要直接打开压缩包。解压完成后&#xff0c;找到Set-up.exe文件&#xff0c;双击运行。 选择“忽略”…

全国计算机信息高新技术高级ps,图形图像处理(Photoshop平台)Photoshop CS5试题汇编(高级图像制作员级)...

第一单元 鼠绘模拟 1.1 第1题 1.2 第2题 1.3 第3题 1.4 第4题 1.5 第5题 1.6 第6题 1.7 第7题 1.8 第8题 1.9 第9题 1.10 第10题 1.11 第11题 1.12 第12题 1.13 第13题 1.14 第14题 1.15 第15题 1.16 第16题 1.17 第17题 1.18 第18题 1.19 第19题 1.20 第20题 第二单元 手工绘画…

分享几个在线生成头像的网站

&#x1f3a8;分享几个在线生成头像的网站 &#x1f517;Notion Svg Avatar Maker (https://cvbox.org/avatar) Color Avatar (https://vue-color-avatar.vercel.app/) (https://cvbox.org/avatar) avataaars generator (https://getavataaars.com/) &#x1f517; (https…

PS2015下载PSCC2015安装教程

PSCC2015&#xff08;64位&#xff09;下载链接&#xff1a;https://pan.baidu.com/s/1FTRjQmYaDgaJVQZtO7vT0w PSCC2015&#xff08;32位&#xff09;下载链接&#xff1a;https://pan.baidu.com/s/1FsJ8wq9tdcbjnjv55tqDaA PSCC2015.5&#xff08;64位&#xff09;下载链接&a…

平面设计素材免费下载,无套路

做为一名设计师每天接触最多的就是设计软件和素材网站&#xff0c;不得不说&#xff0c;找素材还真不是件简单的事&#xff0c;要不就是分辨率低&#xff0c;要不就是要花钱&#xff0c;太难了。 所以这么多年我自己收藏了一些免费还高质量的素材网站&#xff0c;有需要的朋友…

专用来处理图像的工具-Photoshop CS5 中文版提供下载

Adobe Photoshop是一款专用来处理图像的工具&#xff0c;小伙伴们可以使用这款工具针对图像进行各种修饰、美化已达到自己想要的效果。Adobe Photoshop CS5中文版也是一款被使用次数较多的版本&#xff0c;小伙伴们如果想制作出更美观的图片就下载体验吧。 Photoshop CS5下载地…

[杂]记一次买笔记本电脑

[杂]记一次买笔记本电脑 参考链接&#xff1a; https://www.zhihu.com/question/21366606 https://www.intel.cn/content/www/cn/zh/processors/processor-numbers.html http://mini.eastday.com/bdmip/180422212205733.html# https://www.pc841.com/article/20170702-82554.ht…

为电脑装windows7系统

参考链接&#xff1a; 重装系统 http://www.win10win7.com/windows/ghost/662.html http://www.win10win7.com/windows/ghost/663.html 我想知道MBR和GUID有什么区别&#xff1f; https://zhidao.baidu.com/question/263722347215121005.html 华硕笔记本怎么设置u盘启动&a…