单片机c51中断 — 中断扫描法行列式键盘

项目文件

文件

关于项目的内容知识点可以见专栏单片机原理及应用 的第五章,中断

 


在第4章中已介绍过行列式键盘的工作原理,并编写了相应的键盘扫描程序。但应注意的是,在单片机应用系统中,键盘扫描只是 CPU 工作的内容之一。CPU 在忙于各项工作任务时,需要兼顾键盘扫描,既保证不失时机地响应键操作,又不过多地占用CPU 时间。因此,可以采用中断扫描方式来提高CPU的效率,即只有在键盘有键按下时,才执行键盘扫描程序如果无键按下,则将键盘视为不存在。

首先改写硬件:

在这里插入图片描述当各列电平都为0时,无论压下哪个按键,对应的行线和列线会产生逻辑与运算的结果,与门的输出端都可形成INTO的中断请求信号。这样便可将按键的扫描查询工作放在中断函数中进行,从而就能达到既快速响应按键动作,又提高CPU工作效率的目的。

当按键被按下时,按键所在的行线和列线之间就会产生一个电压差,从而触发行列式键盘电路中的4与门集成元件进行逻辑与运算。具体来说,按键所在的行线会被拉低至地电位,而按键所在的列线则会被拉高至高电位。这样,行线和列线之间就会产生一个电压差,从而触发4与门集成元件的输出端输出一个低电平信号,即INTO引脚的中断请求信号。处理器通过检测INTO引脚的电平变化来判断是否有按键被按下,如果有按键被按下,处理器就会进入中断函数进行按键扫描查询工作,从而快速响应按键动作。

 

解释一下:U3的4个输入端与行线像并联 (20-23)行线初始为1,输入端为1
设置列电平刚开始为0,如果有按键按下其中一个行线变为0
那么与U3进行与传给INT0非,1*0=0
脉冲触发
然后为1变为0,负跳变脉冲,可以中断IE0=1

在这里插入图片描述


  • 主函数:
void main(void) {
   P0 = 0x00; 			 //开机黑屏
   IT0=1;				 //脉冲触发
   EX0=1;				 //INT0允许
   EA=1;				 //总中断允许
   P2 = 0x0f;			 //为首次中断做准备,列线全为0,行线全为1
   while(1);			 //模拟其他程序功能
}

这里P2=0x0f
P2是跟按键连接起来的
这样0x0f=0000 1111
高4位为0;
27-24是列线为0,行线全为1

  • 再写中断函数:
void getKey () interrupt 0{						   //中断函数
	char key_scan[] = {0xef, 0xdf, 0xbf, 0x7f};	   //键扫描码
	char i = 0, j = 0;
	for (i = 0; i < 4 ; i++) {
		P2= key_scan[i];  			//输出扫描码 
		for (j = 0 ; j < 16 ;j++) {
			if (key_buf[j]== P2){ //读键值,并判断键号
			   P0= led_mod[j];		//显示闭合键键号
			   break;
			}}}
	P2=0x0f;			 //为下次中断做准备
}

前面的都是行列式键盘的通用
需要注意的是
这里不需要判断行电压是否变换

if ((P2 & 0x0f) != 0x0f) 

是因为:
一旦行线变化就是按键按下,中断就会发生,不需要判断,加上也行

注意最后结束后

P2=0x0f;			 //为下次中断做准备

这里P2=0x0f
P2是跟按键连接起来的
这样0x0f=0000 1111
高4位为0;
27-24是列线为0,行线全为1

 

  • 总代码:
#include <reg51.h>
char led_mod[] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,	  //led字模
				  0x7f,0x6f,0x77,0x7c,0x58,0x5e,0x79,0x71};	  
char key_buf[] = {0xee, 0xde, 0xbe, 0x7e,0xed, 0xdd, 0xbd, 0x7d,//键值
				  0xeb, 0xdb, 0xbb, 0x7b,0xe7, 0xd7, 0xb7, 0x77};

void getKey () interrupt 0{						   //中断函数
	char key_scan[] = {0xef, 0xdf, 0xbf, 0x7f};	   //键扫描码
	char i = 0, j = 0;
	for (i = 0; i < 4 ; i++) {
		P2= key_scan[i];  			//输出扫描码 
		for (j = 0 ; j < 16 ;j++) {
			if (key_buf[j]== P2){ //读键值,并判断键号
			   P0= led_mod[j];		//显示闭合键键号
			   break;
			}
		}
	}
	P2=0x0f;			 //为下次中断做准备
}
 
void main(void) {
   P0 = 0x00; 			 //开机黑屏
   IT0=1;				 //脉冲触发
   EX0=1;				 //INT0允许
   EA=1;				 //总中断允许
   P2 = 0x0f;			 //为首次中断做准备,列线全为0,行线全为1
   while(1);			 //模拟其他程序功能
}

结果:
在这里插入图片描述

运行视频:

单片机c51中断 — 中断扫描法行列式键盘

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

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

相关文章

对接ChatGPT开发对话机器人小程序

前言 ChatGPT已经非常火爆了&#xff0c;企业开始招聘ChatGPT工程师&#xff0c;可能对接ChatGPT接口进行企业级开发是程序员必备的技能了。本篇文章主要是基于ChatGPT开发接口进行对接&#xff0c;使用微信小程序制作一款自己的聊天机器人&#xff0c;通过这一案例你可以展开…

对称加密/非对称加密

古典密码学 起源于古代战争:在战争中&#xff0c;为了防止书信被截获后重要信息泄露&#xff0c;人们开始对书信进行加密。 移位式加密 如密码棒&#xff0c;使用布条缠绕在木棒上的方式来对书信进行加密。 加密算法&#xff1a;缠绕后书写 密钥&#xff1a; 木棒的尺寸 替…

chatgpt如何引入领域知识?mit团队利用gpt4做数据增强来提升小模型在特定领域的效果

一、概述 title&#xff1a;Dr. LLaMA: Improving Small Language Models in Domain-Specific QA via Generative Data Augmentation 论文地址&#xff1a;Paper page - Dr. LLaMA: Improving Small Language Models in Domain-Specific QA via Generative Data Augmentation…

[网络安全]DVWA之XSS(Reflected)攻击姿势及解题详析合集

[网络安全]DVWA之XSS&#xff08;Reflected&#xff09;攻击姿势及解题详析合集 XSS(Reflected)-low level源代码姿势 XSS(Reflected)-medium level源代码姿势1.双写绕过2.大小写绕过 XSS(Reflected)-high level源代码str_replace函数 姿势 XSS(Reflected)-Impossible level源代…

Linux---相关介绍、相关下载、连接Linux系统、虚拟机快照

1. Linux系统相关 内核提供了Linux系统的主要功能&#xff0c;如硬件调度管理的能力。 Linux内核是免费开源的&#xff0c;是由林纳斯托瓦兹在1991年创立并发展至今成为服务器操作系统领域的 核心系统。 内核无法被用户直接使用&#xff0c;需要配合应用程序才能被用户使用…

简单网络管理协议 SNMP

文章目录 1 概述1.1 结构1.2 操作 2 SNMP2.1 报文格式2.2 五大报文类型 3 扩展3.1 网工软考真题 1 概述 #mermaid-svg-95KMV1m3prKJgwv1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-95KMV1m3prKJgwv1 .error-ico…

spring 容器结构/机制debug分析--Spring 学习的核心内容和几个重要概念--IOC 的开发模式--综合解图

目录 Spring Spring 学习的核心内容 解读上图: Spring 几个重要概念 ● 传统的开发模式 解读上图 ● IOC 的开发模式 解读上图 代码示例—入门 xml代码 注意事项和细节 1、说明 2、解释一下类加载路径 3、debug 看看 spring 容器结构/机制 综合解图 Spring Spr…

ChatGpt使用、小白上手指南,整理5个ChatGpt学习文库和平台

ChatGpt目前很火&#xff0c;话题度很高&#xff0c;关于它的账号售卖、视频课程网上遍地都是&#xff0c;尝试没有窍门&#xff0c;学习付费太高&#xff0c;一不小心就会被割韭菜。 闲暇之余也从网上搜集整理了5个平台&#xff0c;里面系统的介绍了有关ChatGpt的应用和相关&…

记一次springboot项目漏洞挖掘

前言 前段时间的比赛将该cms作为了题目考察&#xff0c;这个cms的洞也被大佬们吃的差不多了&#xff0c;自己也就借此机会来浅浅测试下这个cms残余漏洞&#xff0c;并记录下这一整个流程&#xff0c;谨以此记给小白师傅们分享下思路&#xff0c;有错误的地方还望大佬们请以指正…

OpenGL高级-立方体贴图

运行效果 源代码 着色器 渲染物体的顶点着色器&#xff1a; #version 330 core // 传入局部坐标下的顶点坐标 layout( location 0 ) in vec3 position; layout (location 1) in vec2 texCoords;// 传入变换矩阵 uniform mat4 model; uniform mat4 view; uniform mat4 proje…

二十七、搜索与图论——Floyd 算法(多元路最短路径问题)

Floyd算法主要内容 一、基本思路1、算法原理2、基本思路3、注意 二、Java、C语言模板实现三、例题题解 一、基本思路 1、算法原理 遍历每条边&#xff0c;通过比较进行路径更新——暴力 解决多源最短路问题&#xff0c;求解 i 点到 j 点的最短距离 f [ i, j, k] 表示从 i 走…

Linux | 将SpringBoot+Vue项目部署到服务器上

知识目录 一、写在前面二、后端部署2.1 项目打包2.2 项目运行 三、通过Shell脚本自动部署项目3.1 安装Git和Maven3.2 编写Shell脚本3.2 执行脚本 四、前端部署4.1 安装NGINX4.2 node.js安装4.3 npm打包项目4.4 运行项目 四、总结撒花 一、写在前面 大家好&#xff0c;我是初心…

AlmaLinux 9.2 正式版发布 - RHEL 兼容免费发行版

AlmaLinux 9.2 正式版发布 - RHEL 兼容免费发行版 由社区提供的免费 Linux 操作系统&#xff0c;RHEL 兼容发行版。 请访问原文链接&#xff1a;https://sysin.org/blog/almalinux-9/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sys…

K8s(Kubernetes)学习(一):k8s概念及组件

Kubernetes中文文档&#xff1a;https://kubernetes.io/zh-cn/docs/home/ Kubernetes源码地址&#xff1a;https://github.com/kubernetes/kubernetes 一:Kubernetes是什么 首先要了解应用程序部署经历了以下几个时代&#xff1a; 传统部署时代&#xff1a;在物理服务器上运…

ChatGPT学习研究总结

目录 ChatGPT研究总结 一、程序接入用途不大 二、思考&#xff1a;如何构建一个类似ChatGPT的自定义模型 一些ChatGPT研究学习资料&#xff08;来源网络&#xff09; &#xff08;1&#xff09;一文读懂ChatGPT模型原理 &#xff08;2&#xff09;MATLAB科研图像处理——…

DHCP+链路聚合+NAT+ACL小型实验

实验要求: 1.按照拓扑图上标识规划网络。 2.使用0SPF协议进程100实现ISP互通。 3.私网内PC属于VLAN1O, FTP Server属于VLAN2O,网关分 别为所连接的接入交换机&#xff0c;其中PC要求通过DHCP动态获取 4:私网内部所有交换机都为三层交换机&#xff0c;请合理规划VLAN&#…

带你深入学习k8s--(四) 控制器(k8s核心)

目录 一、概念 1、什么是控制器 2、控制器执行流程 3、控制器类型 二、控制器的使用 1、ReplicaSet 2、Deployment 1、版本迭代 2、回滚 3、修改滚动更新策略 4、暂停与恢复 3、daemonset 4、job 5、cronjob 前言&#xff1a; 上一章我们说到&#xff0c;pod有…

VScode添加右键运行、并设置每次运行前都清屏即去除之前的输出

一、添加右键运行 下载安装运行插件即可 二、运行前清屏 在运行插件中设置 找到Code-runner: Clear Previous Output&#xff0c;把√打上即可

【Linux Network】传输层协议——TCP

目录 TCP协议 TCP协议段格式 确认应答(ACK)机制 超时重传机制 连接管理机制 理解TIME_WAIT状态 解决TIME_WAIT状态引起的bind失败的方法 理解 CLOSE_WAIT 状态 滑动窗口 流量控制 拥塞控制 延迟应答 捎带应答 面向字节流 粘包问题 TCP异常情况 TCP小结 基于TCP应用层协议 TCP/U…

Pytroch nn.Unfold() 与 nn.Fold()图码详解

文章目录 Unfold()与Fold()的用途nn.Unfold()Unfold()与Fold() 变化模式图解 nn.Fold()单通道 滑动窗口无重叠模拟图片数据&#xff08;b,3,9,9&#xff09;&#xff0c;通道数 C 为3&#xff0c;滑动窗口无重叠。单通道 滑动窗口有重叠。 卷积等价于&#xff1a;Unfold Matri…