当前位置: 首页 > news >正文

51单片机-第三节-LCD1602调试工具,矩阵键盘

一、LCD调试工具函数:

使用:

所有函数,前两个参数,均为指定显示位置。

四个参数的,第四个参数,为保留位数,少的保留后面(123,2 -> 23),多的前面补零。

二、矩阵键盘:

1、矩阵键盘的原理:

通过行和列来具体检测每个按键的情况:

如电脑分辨率1920*1080个LED,只需1920+1080个接口即可控制。

在单片机中,16个按键只需8个接口(4行+4列)。

使用方法:依次给行赋值 0111,1011,1101,1110,每次赋值后检测列的状态,列为0说明接通了。

2. 矩阵键盘判断函数封装:

/*
用途:读取矩阵键盘按键键码、
使用:按下按键,停留在此函数,松手返回键码,没按下返回0。
*/
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; }
}

3.实战:显示按键编号

void main()
{LCD_Init();LCD_ShowString(1, 1, "MatrixKey:");while (1){int KeyNum = MatrixKey();if (KeyNum){LCD_ShowNum(2, 1, KeyNum, 2);}}
}

4.实战:密码锁

四位密码锁,1-9号键为对应键码,10为0,11是确认,12是清除。

unsigned char KeyNum = 0;
unsigned int PassWord0 = 4359;//初始密码
unsigned int PassWord = 0;
unsigned int Count = 0;
void main()
{LCD_Init();LCD_ShowString(1, 1, "PassWord:");while (1){KeyNum = MatrixKey();if (KeyNum){if (KeyNum <= 10 && Count < 4)//按1-10输入{PassWord *= 10;PassWord += KeyNum % 10;LCD_ShowNum(2, 1, PassWord, 4);Count++;}else if (KeyNum == 11)//按11确认{if (PassWord == PassWord0){LCD_ShowString(1, 14, "OK ");break;}else{LCD_ShowString(1, 14, "ERR");PassWord = 0;Count = 0;LCD_ShowNum(2, 1, PassWord, 4);}}else if (KeyNum == 12)//按12取消{PassWord = 0;Count = 0;LCD_ShowNum(2, 1, PassWord, 4);}}}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【eNSP模拟实验】单臂路由实现VLAN间通信
  • 【iOS】—— 继承者链
  • 访问者模式(Visitor Pattern)
  • 监控房价和挂牌数量的工具-以成都房价为例
  • 群晖 搭建alist 记录
  • AWS无服务器 应用程序开发—第十八章 AWS EventBridge
  • AI绘画Stable Diffusion 零基础入门 —AI 绘画原理与工具介绍,万字解析AI绘画的使用教程
  • <Rust>egui部件学习:如何在窗口及部件显示中文字符?
  • 谷歌C语言编码规范详解
  • AI安全入门-人工智能数据与模型安全
  • 免费长效IP在业务场景中的深度应用解析
  • 移掉 K 位数字
  • RK3568 安卓12 EC20模块NOCONN没有ip的问题(已解决)
  • elasticsearch过滤器filter:原理及使用
  • [Linux]基本指令(二)
  • [Vue CLI 3] 配置解析之 css.extract
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 《Java编程思想》读书笔记-对象导论
  • 11111111
  • AWS实战 - 利用IAM对S3做访问控制
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • leetcode388. Longest Absolute File Path
  • node 版本过低
  • SpringBoot 实战 (三) | 配置文件详解
  • Vue组件定义
  • 阿里云爬虫风险管理产品商业化,为云端流量保驾护航
  • 诡异!React stopPropagation失灵
  • 记一次和乔布斯合作最难忘的经历
  • 思否第一天
  • 通过几道题目学习二叉搜索树
  • 学习笔记:对象,原型和继承(1)
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #{} 和 ${}区别
  • %@ page import=%的用法
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (ZT)薛涌:谈贫说富
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (论文阅读11/100)Fast R-CNN
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)SpringBoot3---尚硅谷总结
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)3D模板阴影原理
  • (转)Scala的“=”符号简介
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .NET 给NuGet包添加Readme
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .NET命令行(CLI)常用命令
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法