C51 Proteus仿真实验16:4X4矩阵键盘控制条形LED显示

说明

按下的按键值越大点亮的LED越多

Proteus仿真

4X4矩阵键盘控制条形LED显示

注意:
K1、K5、K9、K13左边引脚连接的是P1.0
K2、K6、K10、K14左边引脚连接的是P1.1
K3、K7、K11、K15左边引脚连接的是P1.2
K4、K8、K12、K16左边引脚连接的是P1.3
K1、K2、K3、K4右边引脚连接的是P1.4
K5、K6、K7、K8右边引脚连接的是P1.5
K9、K10、K11、K12右边引脚连接的是P1.6
K13、K14、K15、K16右边引脚连接的是P1.7

使用到的元器件:
单片机:AT89C51
电容:CAP
极性电容:CAP-ELEC
电阻:RES
晶振:CRYSTAL
排阻:RX8
按键:BUTTON
条形LED:LED-BARGRAPH-GRN

C51代码

#include<reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int//矩阵键盘按键特征码表,用于判断哪个按键被按下
uchar code KeyCodeTable[] =
{0x11,0x12,0x14,0x18,0x21,0x22,0x24,0x28,0x41,0x42,0x44,0x48,0x81,0x82,0x84,0x88
};//延时
void DelayMs(uint ms)
{uchar i;while(ms--){for(i=0;i<120;i++);}
}//按键扫面实现,逐行扫描,判断是哪个按键按下,返回按键值
uchar Keys_Scan()
{uchar sCode,kCode,i,j;//P1.0-P1.3是输出低电平,P1.4-P1.7是判断是否有按键按下P1 = 0xf0;if((P1&0xf0)!=0xf0)//判断是否有按键按下{DelayMs(2);if((P1&0xf0)!=0xf0)//消抖后再次确认{sCode = 0xfe;//行扫描初始值(1111 1110)for(i=0;i<4;i++)//扫面4行{P1 = sCode;//设置让某一行置为低电平if((P1&0xf0)!=0xf0)//判断是否有按键按下{//如何判断是哪一个按键按下://P1.0-P1.3是输出低电平,循环每行输出低电平//P1.4-P1.7是判断那一列,当按键按下,那一列就会输出低电平						//当行列都是低电平,交叉判断可以得出某个按键按下的值kCode = ~P1;//获取按键码,取反是为了得到是哪个按键按下for(j=0;j<16;j++)//循环匹配按键码{if(kCode == KeyCodeTable[j]){return j;//返回按键值}}}elsesCode = _crol_(sCode,1);//扫面下一行}}}return -1;
}void main(){uchar Key_Num = -1;//表示无按键按下uchar i,P2_LED,P3_LED;while(1){Key_Num = Keys_Scan();//获取按键值if(Key_Num != -1){//熄灭LEDP2_LED = 0xff;P3_LED = 0xff;for(i=0;i<=Key_Num;i++){if(i<8)P3_LED >>= 1;elseP2_LED >>= 1;}//更新LED的状态P3 = P3_LED;P2 = P2_LED;}	}}

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

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

相关文章

Hive的架构

1. 概念 Hive 是建立在 Hadoop 上的数据仓库工具&#xff0c;旨在简化大规模数据集的查询与管理。它通过类 SQL 语言&#xff08;HiveQL&#xff09;将结构化数据映射为 Hadoop 的 MapReduce&#xff0c;适合离线批处理&#xff0c;尤其适用于数据仓库场景。 2. 数据模型 表&a…

P8686 [蓝桥杯 2019 省 A] 修改数组--并查集

P8686 [蓝桥杯 2019 省 A] 修改数组--并查集 题目 解析代码 题目 解析 首先先让所有的f&#xff08;i&#xff09;i&#xff0c;即每个人最开始的祖先都是自己&#xff0c;然后就每一次都让轮到那个数的父亲1&#xff0c;第二次出现的时候就直接用父亲替换掉 并查集适用场景 …

GitHub上传项目

总结&#xff08;有基础的话直接执行这几步&#xff0c;就不需要再往下看了&#xff09;&#xff1a; git init 修改git的config文件&#xff1a;添加:[user]:name你的github用户名 email你注册github的用户名 git branch -m master main git remote add origin 你的URL gi…

关于Windows输入法切换的一些总结

语言和键盘的关系&#xff08;第一层是语言 语言下一层是键盘&#xff09; 如下图&#xff1a;语言就是 中文 英文 阿拉伯文之类的 键盘就是 语言中文下的&#xff1a;XX输入法 语言的切换 和 键盘&#xff08;输入法&#xff09;的切换 &#xff08;用windos空格 可以切换…

C# Unity 唐老狮 No.7 模拟面试题

本文章不作任何商业用途 仅作学习与交流 安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程 打好坚实的基础非常非常重要: 全部 - 游习堂 - 唐老狮创立的游戏开发在线学习平台 - Powered By EduSoho 如果你发现了文章内特殊的字体格式,…

搜广推校招面经三十九

小红书&#xfe63;图搜 一、两个整数的汉明距离 两个整数之间的汉明距离是指这两个数字对应二进制位相同位置不同的个数。换句话说&#xff0c;它就是将一个整数变成另一个整数所需要改变的二进制位的数量。例如&#xff0c;如果两个整数在它们的二进制表示中有三个位置上的…

conda list <package> 指令输出的build和channel含义

Build&#xff1a;表示当前安装包的 构建版本&#xff0c;即该包的编译、构建、发布的具体版本。通常包含一些额外的标识&#xff0c;帮助你区分同一包的不同版本。 Channel&#xff1a; 表示该包的 来源渠道&#xff0c;即该包是从哪个 Anaconda 仓库&#xff08;频道&#…

Windows下配置Flutter移动开发环境以及AndroidStudio安装和模拟机配置

截止 2025/3/9 &#xff0c;版本更新到了 3.29.1 &#xff0c;但是为了防止出现一些奇怪的bug&#xff0c;我安装的还是老一点的&#xff0c;3.19&#xff0c;其他版本的安装同理。AndroidStudio用的是 2024/3/1 版本。 — 1 环境变量&#xff08;Windows&#xff09; PUB_H…

Linux系统编程--线程同步

目录 一、前言 二、线程饥饿 三、线程同步 四、条件变量 1、cond 2、条件变量的使用 五、条件变量与互斥锁 一、前言 上篇文章我们讲解了线程互斥的概念&#xff0c;为了防止多个线程同时访问一份临界资源而出问题&#xff0c;我们引入了线程互斥&#xff0c;线程互斥其实…

学习小程序开发--Day1

项目学习开篇 项目架构 项目进程 创建uni-app项目 通过HBuilderX创建 小结 page.json 和 tabBar 目录文件 pages.json的配置

在word下写公式

需求 word的可视化编辑公式是好的&#xff0c;但是很丑&#xff08;见下图&#xff09; 我希望公式是这样的&#xff08;见下图&#xff09; 解决方案 1.先转换为“线性”&#xff08;即Latex格式&#xff09; 2.得到下面这个玩意&#xff0c;把\mathrm去掉&#xff08;功能是…

uniapp,自绘仪表盘组件(基础篇)

文章目录 一、为什么需要自绘仪表盘&#xff1f;二、准备知识三、实现基础仪表盘1. 组件模板结构2. 核心绘制逻辑3. 样式优化 四、使用示例五、核心实现原理六、扩展方向七、常见问题 一、为什么需要自绘仪表盘&#xff1f; 在物联网、数据监控等场景中&#xff0c;仪表盘是常…

导入 Excel 规则批量修改或删除 Excel 表格内容

我们前面介绍过按照规则批量修改 Excel 文档内容的操作&#xff0c;可以对大量的 Excel 文档按照一定的规则进行统一的修改&#xff0c;可以很好的解决我们批量修改 Excel 文档内容的需求。但是某些场景下&#xff0c;我们批量修改 Excel 文档内容的场景比较复杂&#xff0c;比…

Python贝壳网二手小区数据爬取(2025年3月更)

文章目录 一、代码整体架构解析二、各部分代码详解1. main()主函数解析2. 会话初始化&#xff08;伪装浏览器身份&#xff09;3. 动态参数生成&#xff08;反爬虫核心机制&#xff09;4. 列表页抓取&#xff08;获取小区列表&#xff09;5. 列表页解析&#xff08;提取小区信息…

C++的内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int…

mac本地代理nginx,解决跨域问题

brew install nginxbrew info nginxnginx配置文件 /opt/homebrew/etc/nginx/nginx.conf 如何打开呢&#xff1f; open /opt/homebrew 启动nginx brew services start nginx改配置&#xff1a; server {listen 8080;server_name localhost;#charset koi8-r;#access_…

Clion快捷键、修改字体

文章目录 一、Clion快捷键1.撤销&#xff1a;crtl Z2.重做&#xff1a;crtl shift Z3.删除该行&#xff1a;crtl Y4.多行后退&#xff1a;选中多行 Tab5.多行缩进&#xff1a;选中多行 shift Tab 二、修改注释的斜体 一、Clion快捷键 1.撤销&#xff1a;crtl Z 2.重做…

【漫话机器学习系列】126.多项式回归(Polynomial Regression)

多项式回归&#xff08;Polynomial Regression&#xff09; 1. 什么是多项式回归&#xff1f; 多项式回归&#xff08;Polynomial Regression&#xff09;是一种用于建模非线性关系的回归分析技术。它是线性回归的一种扩展形式&#xff0c;允许模型通过增加自变量的高次项来更…

python网络爬虫开发实战之基本库使用

目录 第二章 基本库的使用 2.1 urllib的使用 1 发送请求 2 处理异常 3 解析链接 4 分析Robots协议 2.2 requests的使用 1 准备工作 2 实例引入 3 GET请求 4 POST请求 5 响应 6 高级用法 2.3 正则表达式 1 实例引入 2 match 3 search 4 findall 5 sub 6 com…

npm : 无法加载文件 C:\Program Files\nodejs\npm.ps1,因为在此系统上禁止运行脚本。

1、在 vscode 终端执行 get-ExecutionPolicy 返回 Restricted 状态是禁止的 返回 RemoteSigned 状态是可正常执行npm命令 2、更改状态 set-ExecutionPolicy RemoteSigned 如果提示需要管理员权限&#xff0c;可加参数运行 Set-ExecutionPolicy -Scope CurrentUser RemoteSi…