QX----mini51单片机学习---(7)矩阵键盘

目录

1矩阵键盘的识别

2相关c语言

3实践编程

1矩阵键盘的识别

假设按列扫描按下S6P30:0P34:1然后高流向低,P34:0,刚开始是0xf0:1111 0000

后面是0xe0:1110 0000  ,当是0xe0能确定是第一列被按下,再按行扫描,S6:0x0e

综合:0xee

2相关c语言

3实践编程

#include<reg52.h>
#include<intrins.h>

#define uint unsigned int 
#define uchar unsigned char
	
sbit DU = P2^6;
sbit WE = P2^7;

uchar num;//数码管的值
uchar KeyValue = 20;//按键值,初始值是-
//code固定table的值,code很大8k,ram区小
//共阴数码管段选值
uchar code table[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
0x77,0x7c,0x39,0x5e,0x79,0x71,0x76,0x38,0x37,0x3e,0x40,0x00};
void delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
	}
}

void KeyScan()
{
	//4*4
	//列扫描
	P3=0xf0;
	if(P3!=0xf0)
	{
		//消抖
			delay(10);
			if(P3!=0)
			{
				switch(P3)//判断哪一列
			{
				case 0xe0: KeyValue = 0; break;
				case 0xd0: KeyValue = 1; break;
				case 0xb0: KeyValue = 2; break;
				case 0x70: KeyValue = 3; break;
					
			}
			//行扫描
			P3=0x0f;
			switch(P3)//判断哪一行
			{
				case 0x0e: KeyValue = KeyValue; break;
				case 0x0d: KeyValue = KeyValue + 4; break;
				case 0x0b: KeyValue = KeyValue + 8; break;
				case 0x07: KeyValue = KeyValue + 12; break;
					
			}
			//松手(当我们松手后,电流无法流到地,通过上拉电阻回到初始状态
			while(P3 != 0x0f);
			}
			//独立按键
			P3=0xff;
			if(P3!=0xff)
			{
				delay(10);
				if(P3!=0xff)
				{
					switch(P3)//判断哪一行
			{
				case 0xfe: KeyValue = 16; break;
				case 0xfd: KeyValue = 17; break;
				case 0xfb: KeyValue = 18; break;
				case 0xf7: KeyValue = 19; break;
					
			}
			//松手(当我们松手后,电流无法流到地,通过上拉电阻回到初始状态
			while(P3 != 0xff);
			}
				
				}
			}
			
	}
	
	
}
void main()
{
	WE = 1;
	P0=0xfb;//位选给0
	WE = 0;//锁存器锁存
	while(1)
	{
		KeyScan();
			DU = 1;
			P0 = table[KeyValue];//0000 0110 共阴极给1亮
			DU = 0;
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/614957.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何通过AI技术实现员工培训的革命性变革

AI个性化培训&#xff1a;开启员工潜力的新篇章 在当今这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术的影响力已经渗透到社会的各个层面&#xff0c;包括教育与培训行业。AI技术正在彻底改变我们获取知识与技能的方式&#xff0c;特别是在员工培训领域…

Offline: Overcoming Model Bias for Robust Offline Deep Reinforcement Learning

EAAI 2023 paper Intro model-free的离线强化学习由于价值函数估计问题存在训练的稳定性以及鲁棒性较低。本文提出基于模型的方法&#xff0c;同构构建稳定的动力学模型帮助策略的稳定训练。 method 本文基于模型的方法&#xff0c;所构造的转移模型输入状态动作&#xff0…

【python】python中的argparse模块,教你如何自定义命令行参数

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

C++容器——list

目录 list容器 list容器使用流程 加入头文件 定义 list容器的使用 添加元素&#xff1a; 删除元素&#xff1a; 访问元素&#xff1a; 容器大小&#xff1a; 迭代器操作&#xff1a; 其他操作&#xff1a; list容器 功能&#xff1a;将数据进行链式存储 链表(list…

数据结构--队列

一、认识队列 队列&#xff08;Queue&#xff09;是一种 受限的线性数据结构&#xff0c;具有 先进先出&#xff08;FIFO&#xff0c;First In First Out&#xff09;的特点。 受限之处&#xff1a; 只允许在表的前端&#xff08;front&#xff09;进行删除操作。只允许在表…

《Decoupled Optimisation for Long-Tailed Visual Recognition》阅读笔记

论文标题 《Decoupled Optimisation for Long-Tailed Visual Recognition》 长尾视觉识别的解耦优化 作者 Cong Cong、Shiyu Xuan、Sidong Liu、Shiliang Zhang、Maurice Pagnucco 和 Yang Song、 来自新南威尔士大学计算机科学与工程学院、北京大学计算机学院多媒体信息处…

乡村振兴与乡村振兴战略的深度融合:落实乡村振兴战略,推动乡村全面发展,打造富强民主文明和谐美丽的社会主义现代化新农村

一、引言 在全面建设社会主义现代化国家的新征程中&#xff0c;乡村振兴战略承载着推动乡村全面发展、实现农业农村现代化的重大使命。乡村振兴战略的实施&#xff0c;不仅关系到亿万农民的福祉&#xff0c;也关系到国家整体发展的质量和水平。因此&#xff0c;深化乡村振兴与…

YOLOv8项目使用说明

1. 下载群公告中的百度云连接&#xff0c;得到一个压缩文件 2. 解压并使用相关软件&#xff08;如pycharm、VSCode等&#xff09;打开 3. 选择一个合适的模型yaml文件&#xff0c;及数据集yaml文件进行训练 4. 配置并填入数据集yaml文件 5. 运行即可

MyCat实现分库分表

两个集群 两个库 两个表 搭建数据库服务使用docker启动两个mysql 3506 3507连接MyCat创建两个数据源连接MyCat创建集群 mycat创建逻辑库MyCat创建全局表广播表创建分片表mycat逻辑库MyCat插入数据mycat查看数据物理库3506查看数据物理库3507查看数据 ER表创建ER表mycat插入数据…

【Linux:lesson1】的基本指令

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 &#x1f697;打开Xshell&#xff0c;登陆root…

Python | Leetcode Python题解之第76题最小覆盖子串

题目&#xff1a; 题解&#xff1a; class Solution:def minWindow(self, s: str, t: str) -> str:ans_left, ans_right -1, len(s)left 0cnt_s Counter() # s 子串字母的出现次数cnt_t Counter(t) # t 中字母的出现次数less len(cnt_t) # 有 less 种字母的出现次数…

【Vue基础】Vue在组件数据传递详解

Vue核心基础-CSDN博客 先回顾Vue特性&#xff1a; Vue.js 是一个用于构建用户界面的渐进式框架&#xff0c;具有许多强大的特性。以下是一些主要的 Vue 特性&#xff1a; 响应式数据&#xff1a;Vue 使用双向绑定来实现数据的响应式更新。当数据发生变化时&#xff0c;视图会自…

系统重构思路

系统重构之道 现在是进行重构的恰当时机吗&#xff1f;重构前需要做什么准备&#xff1f;如何保障重构工作顺利完成并达成预期目标&#xff1f;从这几个大家都关心的问题&#xff0c;来谈谈重构工作遵循的基本思路和原则。 从实际问题出发 “不能解决实际问题的重构就是耍流…

详解:ic网站建设开发需要注意什么?

IC网站建设开发需注重专业内容的呈现、强大的产品检索功能、全面的技术支持、严格的合规性展示、便捷的采购工具、良好的用户账户管理、移动适应性和多语言支持&#xff0c;以及高性能与高安全性&#xff0c;以满足行业用户的专业需求&#xff0c;提升网站的实用性和吸引力。 …

winhex工具,将文件转换为16进制数据放入代码。

今天介绍winhex工具&#xff0c;可以将任何内容读取读取为16进制数据。下面看下效果。 下载链接&#xff1a; WinHex: Hex Editor & Disk Editor, Computer Forensics & Data Recovery Software 一、WinHex打开文件 我们要打开的文件&#xff1a; 打开后&#xff1a; 我…

数据结构--单链表 详解(附代码

目录&#xff1a; 1&#xff1a;链表的概念及结构 2&#xff1a;实现单链表 3&#xff1a;常见疑问 解答 &#xff08;看到最后&#xff01;&#xff01;&#xff09; 一&#xff1a;链表的概念及结构 1.1 概念&#xff1a; 链表是⼀种 物理存储结构上非连续、非顺序的 存储结…

Qt | QSpinBox 类 QDoubleSpinBox 类(微调框)

01、QSpinBox 类 1、QSpinBox类是 QAbstractSpinBox 类的直接子类和具体实现, 2、QSpinBox 类被设计用于处理整数和离散值集合,对于浮点值使用 QDoubleSpinBox 类实现。 3、QSpinBox 默认只支持整数值,但可通过其内部的成员函数进行扩展,以支持使用不同的 字符串。 02…

Web数字孪生引擎

Web数字孪生引擎是指用于在Web上创建和运行数字孪生的软件平台。它们通常提供一组API和工具&#xff0c;用于连接到实时数据源、可视化数据并创建交互式体验。Web数字孪生引擎被广泛应用于各种应用&#xff0c;例如工业物联网、智能建筑、城市管理和公共安全等。北京木奇移动技…

stata空间计量模型基础+检验命令LM检验、sem、门槛+arcgis画图

目录 怎么安装stata命令 3怎么使用已有的数据 4数据编辑器中查看数据 4怎么删除不要的列 4直接将字符型变量转化为数值型的命令 4改变字符长度 4描述分析 4取对数 5相关性分析 5单位根检验 5权重矩阵标准化 6计算泰尔指数 6做核密度图 7Moran’s I 指数 8空间计量模型 9LM检验…

基于Huffman编码的字符串统计及WPL计算

一、问题描述 问题概括&#xff1a; 给定一个字符串或文件&#xff0c;基于Huffman编码方法&#xff0c;实现以下功能&#xff1a; 1.统计每个字符的频率。 2.输出每个字符的Huffman编码。 3.计算并输出WPL&#xff08;加权路径长度&#xff09;。 这个问题要求对Huffman编码算…