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

这篇具有很好参考价值的文章主要介绍了【STC89C52】独立键盘和矩阵键盘。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

目录

一、原理图分析 

二、独立键盘

三、矩阵键盘


一、原理图分析 

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

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

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

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

【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;//11111110
	WE=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毫秒解决。

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

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

三、矩阵键盘

效果:按矩阵键盘显示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;//11111110
	WE=0;
	while(1){
		keyscanf();//扫描按键
		DU=1;
		P0=board[num];
		DU=0;
	}
}

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

以上就是我今天的分享,如果有什么建议或补充欢迎评论区留言哟~文章来源地址https://www.toymoban.com/news/detail-411317.html

到了这里,关于【STC89C52】独立键盘和矩阵键盘的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [stc89c52] DS18B20基于单总线协议的温度测量

    1.定义:主机和从机用一根总线进行通信,是一种半双工的通信方式,单线=时钟线+数据线+控制线( +电源线)。理想状况下一条总线上的从器件数量几乎不受数量限制。 2.特点:这是由达拉斯半导体公司推出的一项通信技术。它采用单根信号线,既可传输时钟,又能传输数据

    2024年02月10日
    浏览(50)
  • 基于STC89C52单片机的温度控制系统设计方案与软硬件实现

    目录 摘要 I Abstract II 第一章 前言 1 1.1 温度控制系统设计发展历史及意义 1.2 温度控制系统的目的 1.3 温度控制系统完成的功能 第二章 总体设计方案 2.1 方案一 2.2 方案二 3.1 DS18B20简介 3.1.1DS18B20封装与引脚 3.1.2 DS18B20的简单性能 3.2 DS18B20的工作原理 3.3 DS18B20的测温原理 3.3.1 测

    2024年02月12日
    浏览(41)
  • STC89C52定时器的简介

    针对于STC89C52RC而言,这个芯片内部包含了三个定时器——T0、T1和T2,他们的中断优先级分别是1、3和5。 怎么还有一个定时器2呢?博主也是今天整理这篇博客的时候,翻阅芯片手册才发现的。如果说,我们经常用的T0和T1叫做通用定时器的话,那么T2我愿称之为高级定时器。今

    2024年02月05日
    浏览(44)
  • 什么是STC89C52单片机

    STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写10000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构[1],芯片内集成了通用8位中央处理器和ISP Flash存储单元,功

    2024年02月13日
    浏览(44)
  • STC89C52RC最小系统板

    Author:Once Day “漫漫长路,有人对你微笑过嘛…” Solemnly declare:知识产权、正确性等皆未明确,因此仅且只能供学习交流之用,切莫他用!!!本文章所有者不对任何人因使用本文章内容引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即

    2023年04月19日
    浏览(44)
  • 免费开源51单片机个人课程设计--基于stc89c52及红外遥控的测温智能电风扇

    51单片机个人课程设计–基于stc89c52及红外遥控的测温智能电风扇 个人学校的课程设计-智能电风扇,包含proteus原理图与源代码。 代码部分由我个人写的也有普中实验中的代码块。 3.1 硬件设计 主要器件: 单片机 AT89C52 红外接收 HS0038 LCD1602 温度测量 DS18B20 驱动集成芯片 L298

    2023年04月10日
    浏览(55)
  • 你知道什么是STC89C52RC吗?

    目录 一、什么是STC89C52RC 二、STC89C52RC由什么构成 三、STC89C52RC各部分如何使用 四、STC89C52RC如何进行编程 五、怎么使用STC89C52RC 六、为何使用STC89C52RC STC89C52RC是一种基于8051架构的单片机芯片,由中国的STC公司生产。它包含52KB的闪存程序存储器,1KB的RAM数据存储器,以及一系列

    2024年02月04日
    浏览(51)
  • STC89C52的四个 外部中断 基本使用方法

    中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。STC89C52系列单片机提供了8个中断请求源,它们分别是: 外部中断0(NT0); 对应I/O :P32 定时器0中断; 外部中断1(INT1); 对应I/O :P33 定时器1中断; 串口(UART)中断; 定时器2中断; 外部中断2(INT2); 对应I/O :P43 外部

    2024年02月04日
    浏览(132)
  • 第七章、stc89c52中的串行口通信

    串口是一种应用十分广泛的通讯接口,串口成本低、容易使用、通信线路简单,可实现两个设备的互相通信。 STC89C52系列单片机内部集成有一个功能很强的全双工串行通信口 UART (Universal Asynchronous Receiver Transmitter,通用异步收发器),与传统8051单片机的串口完全兼容。设有

    2024年02月07日
    浏览(35)
  • 【STC89C52】外部中断与定时/计数器中断

    目录 一、中断系统 二、外部中断 一)配置外部中断的三个步骤 1)中断允许 (2)中断方式配置 3)中断处理函数 二)实验代码  三、定时器/计数器 一)使用定时器/计数器的三个步骤 1)启动定时/计数器 2)设置工作模式​编辑  3)查询定时/计数器是否溢出  二)实验代

    2024年02月08日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包