STC89C51学习笔记(五)

STC89C51学习笔记(五)

综述:文本讲述了代码中速写模板的创建、如何将矩阵键盘的按键与数字一一对应以及如何创建一个矩阵键盘密码锁。

一、速写模板

点击“templates”,再鼠标右键选择配置,按照以下方式即可修改一些简写操作。

二、矩阵键盘

1.创建矩阵键盘读取数字子函数

①如果按照独立键盘的连接方式,16个按键需要16个IO口,矩阵键盘为了减少IO口的使用,采用逐行或逐列扫描。在写代码时,可以先读取第一列,然后再读取第二列,依次往下。(也可以先读取行)

unsigned char MatrixKey()//有返回值
{unsigned char KeyNumber=0;P1=0xff;P1_3=0;//第一列if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}P1=0xff;P1_2=0;//第二列if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}P1=0xff;P1_1=0;//第三列if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}P1=0xff;P1_0=0;//第四列if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}return KeyNumber;
}

②可以在代码前写上相应的注释,便于后序查看和调用。

2.矩阵键盘密码锁

思路:

①先将按键的值转化为数字,由于即1-9为原来的数字,10变成0,这样就可以用取余的算术来表示;

②然后,每次按下一位后要实现左移,也即是,每次按下后原来的数字会乘以10,新按下的变成个位数;

③最后,为了防止数字可以无间断的移位下去,可以限制密码的个数,达到密码位数后就不可以再输入了,于是这里运用了if语句和count来表示;

            if(KeyNum<=10)//S1-S10按键按下时,输入密码{if(Count<4)//如果输入次数小于4{Password*=10;//密码左移一位Password+=KeyNum%10;//获取一位密码	Count++;//计数加一}LCD_ShowNum(2,1,Password,4);//更新显示}

④设置按键11为确认键,当输入数字和密码相同时,显示OK,不同时,显示ERR,同时清零显示数字和已输入密码位数;

            if(KeyNum==11)//如果S11按键按下,确认{if(Password==2344){LCD_ShowString(1,14,"OK ");//如果密码正确,在第一行末尾显示OKPassword=0;Count=0;//计数清零LCD_ShowNum(2,1,Password,4);//更新显示}else{LCD_ShowString(1,14,"ERR");//如果密码错误,在第一行末尾显示ERRPassword=0;Count=0;//计数清零LCD_ShowNum(2,1,Password,4);//更新显示}}

⑤如果按键12按下时,直接取消已经输入的所有数字和已输入密码位数,从头开始。

            if(KeyNum==12)//如果S12按键按下,取消{Password=0;Count=0;//计数清零LCD_ShowNum(2,1,Password,4);//更新显示}

整体代码:


参考视频:51单片机学习视频

侵权联系删除!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

倒反天罡的ssh后门 | Linux 后门系列

0x00 简介 今天看见有安全研究员发了一篇 ssh 后门的文章&#xff0c;复现思考后分享给大家 https://blog.thc.org/infecting-ssh-public-keys-with-backdoors 0x01 ssh密钥登录 参考 https://www.commandlinux.com/man-page/man5/authorized_keys.5.html 运维人员管理 Linux …

【Linux ARM 裸机】开发环境搭建

1、Ubuntu 和 Windows 文件互传 使用过程中&#xff0c;要频繁进行 Ubuntu 和 Windows 的文件互传&#xff0c;需要使用 FTP 服务&#xff1b; 1.1、开启 Ubuntu 下的 FTP 服务 //安装 FTP 服务 sudo apt-get install vsftpd //修改配置文件 sudo vi /etc/vsftpd.conf//重启…

rsync 远程同步----------安全高效的异地备份策略

目录 一、rsync介绍 rsync和cp的区别 rsync和scp的区别 二、rsync同步方式 rsync备份的方式 三、配置rsync源服务器 ①本地复制 ②下行同步 ③上行同步 四、常用Rsync命令 五、配置源的两种表达方法 六、部署rsync下行同步 ①环境准备 ②配置rsync源服务器-------…

【Leetcode每日一题】 动态规划 - LCR 166. 珠宝的最高价值(难度⭐⭐)(52)

1. 题目解析 题目链接&#xff1a;LCR 166. 珠宝的最高价值 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了 2.算法原理 想象一下&#xff0c;你正在玩一个寻宝游戏&#xff0c;游戏地图是一个二维网格&#xff0c;每个格子都藏有一…

单片机IGBT驱动电路一例

概述&#xff1a; 驱动的作用有三个&#xff1a; 1.是作为放大器获得所需要的驱动电压。 2.是提高输出电流能力。 3.是进行功率回路和控制回路的隔离 信号从MCU到IGBT驱动芯片 首先驱动电流需要放大 MCU的输出电流是mA级别&#xff0c;而IGBT需要的驱动电流可能达到几安培…

SpringCloud Alibaba Sentinel 简介和安装

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十三篇&#xff0c;即介绍 SpringCloud Alibaba Sentinel 简介和安装。 二、Sentinel 简介 2.1 Sent…

Qt使用iostream的cout

在QT想使用iostream的cout。 参考以下博客&#xff1a; &#xff08;转载&#xff09;Qt中使用cout输出的方法 pro里加上; CONFIG console勾选 Run in Terminal clean工程&#xff0c;重新构建 上面是cout的&#xff0c;下面是我的另一个函数的qDebug输出的。

编译原理实验3(基于算符优先文法分析的语法分析器 )

实验目的 加深对语法分析器工作过程的理解&#xff1b;加强对算符优先分析实现语法分析程序的掌握&#xff1b;能够产用一种编程语言实现简单的语法分析程序&#xff1b;能够使用自己编写的分析程序对简单的程序段进行语法分析。 实验要求 根据简单表达式文法构造算符优先分…

jupyter python paramiko 网络系统运维

概述 通过使用jupyter进行网络运维的相关测试 设备为H3C 联通性测试 import paramiko import time import getpass import re import os import datetimeusername "*****" password "*****" ip "10.32.**.**"ssh_client paramiko.SSHCli…

小红薯笔记一键克隆

此工具是用于一键克隆同行笔记的 点击启动浏览器后 扫码登录小红书账号 不需要填写ck 直接输入作品链接&#xff0c;记住是纯链接&#xff0c;不要带文字并点击一键获取 然后软件会全自动解析并发布笔记 操作很简单&#xff0c;一看就懂&#xff0c;所以就没有录制教程哈兄…

技术大揭秘:如何通过JVM状态定位问题,提升阿里巴巴面试胜率?

欢迎关注我的公众号“知其然亦知其所以然”,获取更多技术干货! 大家好,我是小米!今天我要和大家分享的是关于Java虚拟机(JVM)状态定位问题和优化的技巧。在阿里巴巴的面试中,这个话题常常被提及,因为它对于保障系统性能和稳定性至关重要。接下来,让我们逐个来了解如何…

Python常用算法--解决数据结构问题【附源码】

一、约瑟夫环问题 解释:约瑟夫环(Josephus Problem)是一个著名的数学问题,它描述了一个关于围坐一圈的人进行游戏的场景。游戏规则是从一个人开始,顺序报数,每报到特定数目的人将会被排除出圈子,然后从被排除的下一人开始继续报数,游戏继续进行直到最后剩下一个人。 …

【蓝桥杯嵌入式】第十三届省赛(第二场)

目录 0 前言 1 展示 1.1 源码 1.2 演示视频 1.3 题目展示 2 CubeMX配置(第十三届省赛第二场真题) 2.1 设置下载线 2.2 HSE时钟设置 2.3 时钟树配置 2.4 生成代码设置 2.5 USART1 2.5.1 基本配置 2.5.2 NVIC 2.5.3 DMA 2.6 TIM 2.6.1 TIM2 2.6.2 TIM4 2.6.3 …

企业组网异地组网区别是什么?

在现代企业运营过程中&#xff0c;随着企业规模的不断扩大和业务的全球化趋势&#xff0c;企业内部不可避免地需要进行组网工作。在组网过程中&#xff0c;有时可能需要实现异地组网&#xff0c;以便连接位于不同地理位置的分支机构或远程办公室。本文将对企业组网和异地组网进…

如何在社交媒体中使用增强现实来提高客户参与度?

目录 1. 增强现实在社交媒体中的应用是如何发展的 2. 社交媒体营销和广告中的增强现实 3. 社交媒体上的增强现实滤镜和镜头 4. 社交媒体平台上的增强现实购物 5. 利用社交媒体的增强现实事件和品牌激活 6. 增强现实在社交媒体中的未来是什么 7. 社交媒体中的增强现实常见…

Java常用API_正则表达式_分组——捕获分组与非捕获分组介绍与练习

在正则表达式中&#xff0c;从左到右第一个左括号确定为第一组&#xff0c;继续往右看再有左括号它表示的组数就加一。我们可以在正则表达式中使用 \\组数 的方法表示第几组&#xff0c;如\\1表示第一组的内容。 1.捕获分组 捕获分组就是把这一组的数据捕获出来&#xff0c;后…

vscode 安装vim插件配置ctrl + c/v功能

搜索Vim插件 插件介绍部分有提示操作 首先安装该插件&#xff0c;然后按照下述步骤设置ctrl相关的快捷键&#xff0c;以便于脱离im快捷键而愉快的敲代码。 1.在“设置”搜索框内搜索vim.handleKeys&#xff0c;选择 Edit in settings.json 2. 设置ctrl-c,ctrl-v等快捷键置为fa…

【Java集合进阶】list常见的方法和五种遍历方式数据结构

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

会话控制 与 IMS基本概念

目录 1. 因特网和电信网的介绍 2. 7号信令的分层结构及其作用 3. 基本的呼叫过程(ISUP流程) 4. 多媒体通信中的会话的概念 5. 关于IMS 5.1 IMS介绍 5.2 IMS控制层中的主要网元&#xff08;主要分为两类&#xff09; 5.3 现在来了解呼叫会话控制功能这一类的网元 6. 总…

2024/4/1—力扣—BiNode

代码实现&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/void convertBiNode_pro(struct TreeNode *root, struct TreeNode **p) {if (root) {convertBiNode_pro(roo…