江协科技/江科大-51单片机入门教程——P[3-1] 独立按键控制LED亮灭

本文围绕51单片机开发中的独立按键控制技术展开,系统讲解其硬件结构、电平检测原理与C51编程实现方法。文章从开发板独立按键的物理构造与电路连接入手,剖析按键按下与松开时的电平变化规律,并结合单片机I/O口寄存器操作原理,阐释如何通过代码读取按键状态。

目录

一、独立按键相关内容

二、C51 数据运算与基本语句


一、独立按键相关内容

本节要讲的是独立按键。在开发板上,独立按键位于左下角标注 “独立键盘” 处,是四个黑色的按键,右边是 4*4 的矩阵键盘,将在后续讲解,本节仅聚焦于这四个按键。

本章(P3)要实现的代码功能如下:

其一,K1 控制第一个 LED 的亮灭,按下时 LED 亮,松开时熄灭;

其二,K1 控制第一个 LED,按下时无操作,松手时控制 LED 状态取反,即按一下亮,再按一下灭;其三,按一下 K1,实现 8 个 LED 进行二进制递增显示;

其四,按 K1 时,第一个 LED 产生移位,按 K2 时 LED 向右移,按 K1 时向左移。

下面先介绍按键。开发板上使用的是四个角的轻触按键,其相当于电子开关,按下时接通,松开时断开。内部由金属弹片实现通断。按键有四个引脚,为了解其连接方式,可将按键拆开,内部主要有底座、鼓起来的金属弹片(按下变平,松手恢复)、按键头和金属盖。进一步破拆下面部分,能看出相同一边的两个引脚内部由金属片完全连接,无论是否按下都导通,且向外伸出接触点。金属弹片在中间,松手时不接触,按下时弹片被压扁,使三个接触点连接。即按下时 4 个引脚全部连接,松手时两边分别连接,中间断开。

接着看开发板原理图中键盘的连接方式。独立按键在原理图右下角,只画了两个引脚,按下连接,松开断开。

左边有四个按键,其公共一端都接到 GND(电源负极),另一端引出四个编号 。这些编号连接到 MCU ,即一端接 GND,另一端接 I/O 口。

单片机上电时,所有 I/O 口默认是高电平,若按键未按下,I/O 口保持高电平;按下则变为低电平。

单片机的寄存器可向 I/O 口写值,也能检测 I/O 口电平并读回寄存器。通过读取寄存器的值,若为高电平(1)表示按键松开,若为低电平(0)则表示按键按下。

————————

下面进行工程演示。新建工程,点击 “Project”,选择保存位置并新建文件夹 “3 - 1 独立按键控制 LED 亮灭”,起工程名,选择器件 AT89C52,添加一个.c 文件。

先写出上节点亮 LED 的代码,添加头文件和主函数,上节点亮 LED 代码为 “P2 = 0xfe”,其中 “0x” 是十六进制前缀,“fe” 转化为二进制是最低位为 0,其他位为 1。

勾选生成 HEX 文件

将 tab 缩进调成 4 个

编译无错误无警告后下载代码,可看到 LED 点亮,这是通过控制寄存器实现的。

寄存器 8 个为一组,直接操作 P2 需同时给 8 位赋值,若只想操作最低位,可利用头文件中的位寄存器。添加 “” 头文件,操作 “P2_0”(表示 P2 的最低位),赋值 “P2_0 = 0” 可点亮 LED,赋值 “P2_0 = 1” (非0即1,给2也是1)则熄灭。

第一个按键控制功能的实现:按下点亮,松开熄灭。利用 C 语言的 if 语句,K1 连接在 P31 口,若 “P31 == 0”(判断相等),表示按键按下,执行点亮 LED 的代码;若 “P31 != 0”,表示按键松开,执行熄灭 LED 的代码。需注意,if 语句要放在 while 循环里,否则代码可能只执行一遍,无法实现预期功能。

完整代码如下:

#includevoid main(){while(1){if(P3_1==0 || P3_0==0) //如果K1按键或K2按键按下{P2_0=0; //LED1输出0,点亮}else{P2_0=1; //LED1输出1,熄灭}}}

二、C51 数据运算与基本语句

C51 是 C 语言在 51 单片机上的应用,其中的数据运算和基本语句是单片机编程常用的干货内容。上节介绍了进制转换和 C51 数据类型,数据类型像小盒子用来装数据,如整型只能装整数,有符号整型可装负数但表示范围有一半用于表示负数,无符号整型只能装正整数。

数据运算可分为四类:

  1. 算术运算:包括加减乘除和取余。加减乘除与常规数学运算类似,但整数除法会丢失小数部分。例如 “int a = 5, b = 2, c; c = a /b;” 执行后,c 的值为 2。取余运算符用于获取除法运算中的余数,如 “c = 5 % 2;” 执行后,c 的值为 1。取余运算可用于判断一个数能否被另一个数整除,若 “123 % 10 == 0”,则 123 能被 10 整除,否则不能。赋值运算符 “=” 是将右边的结果赋给左边的变量,不能用于解方程。
  2. 判断运算:判断运算符包括 “==”(等于)、“>”(大于)、“>=”(大于等于)、“ 1” 和 “2 >= 1” 的判断条件都成立。
  3. 逻辑运算:基本逻辑运算有与(&&)、或(||)、非(!)。例如 “if (P3_1 == 0 && P3_0 == 0)” 表示 K1 和 K2 同时按下时执行相应操作;若改为 “if (P3_1 == 0 || P3_0 == 0)”,则只要 K1 或 K2 任意一个按下就会执行操作。
  4. 位运算:在单片机中应用广泛,包括按位左移(>)、按位与(&)、按位或(|)、按位异或(^)和按位取反(~)。按位左移是将数据的各二进制位向左移动,高位溢出,低位补 0;按位右移则相反,低位溢出,高位补 0。按位与是对两个数据的对应位进行逻辑与操作,全真才为真;按位或是有 1 即为 1;按位异或是对应位不同为 1,相同为 0;按位取反是将数据的每一位取反,0 变 1,1 变 0。

————————

C51 基本语句主要有 if、while、for 和 switch 四种,其中 if 和 switch 用于选择,for 和 while 用于循环。

  1. if 语句:格式为 “if (逻辑表达式) {语句体 1} else {语句体 2}”,若逻辑表达式成立,执行语句体 1,否则执行语句体 2,else 部分可省略。
  2. while 循环:若逻辑表达式成立,执行循环体,执行完后再次判断逻辑表达式是否成立,若成立则继续执行,直到表达式不成立跳出循环。例如 “while (1)”,由于 1 永远为真,会不断循环执行循环体内容。
  3. for 循环:格式为 “for (初始化;逻辑表达式;更改条件) {循环体}”。先执行初始化语句,再判断逻辑表达式,若成立则执行循环体,执行完循环体后执行更改条件,然后再次判断逻辑表达式,直到表达式不成立跳出循环。初始化语句只执行一次,逻辑表达式、循环体和更改条件可能会被多次执行。例如 “for (int i = 0; i < 8; i++)” 会循环 8 次,每次循环中 i 的值从 0 递增到 7。
  4. switch case 语句:用于多重判断,格式为 “switch (变量) {case 常量 1: 语句体 1; break; case 常量 2: 语句体 2; break; … default: 语句体;break;}”。将变量与 case 后的常量一一比较,若相等则执行相应语句体,若所有常量都不相等,则执行 default 后的语句体,default 部分可省略。

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

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

相关文章

【QGIS二次开发】地图显示与交互-01

1. 系统界面设计 设计的系统界面如下&#xff0c;很好还原了QGIS、ArcGIS等软件的系统界面&#xff0c;充分利用了QT中顶部工具栏、菜单栏、底部状态栏&#xff0c;实现了图层管理器、鹰眼图、工具箱三个工具面板。 菜单栏、工具栏、工具箱集成了系统中实现的全部功能&#x…

第40天:安全开发-JavaEE应用SpringBoot框架JWT身份鉴权打包部署JARWAR

时间轴&#xff1a; 演示案例&#xff1a; SpringBoot-身份鉴权-JWT 技术 SpringBoot-打包部署-JAR&WAR SpringBoot-身份鉴权-JWT 技术 SpringBoot- 身份鉴权 -JWT 技术 JWT(JSON Web Token) 是由服务端用加密算法对信息签名来保证其完整性和不可伪 造&#xff1b; …

计算机毕业设计SpringBoot+Vue.js医院挂号就诊系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

Linux之命令记录【一】

文章目录 前言几个重要的热键1.[Tab]按键2.[Ctrl]-c 按键3.[Ctrl]-d 按键4.[shift]{[PageUP]|[Page Down]}按键 线上求助&#xff08;查看帮助信息&#xff09;1. --help2.man page3.info page 用户身份1.su 基础指令1.date2.cal3.bc 系统字符集相关1.locale 文本编辑器1.nano …

Ollama存在安全风险的情况通报及解决方案

据清华大学网络空间测绘联合研究中心分析&#xff0c;开源跨平台大模型工具Ollama默认配置存在未授权访问与模型窃取等安全隐患。鉴于目前DeepSeek等大模型的研究部署和应用非常广泛&#xff0c;多数用户使用Ollama私有化部署且未修改默认配置&#xff0c;存在数据泄露、算力盗…

Sourcetrail 代码分析工具

Sourcetrail 概述 Sourcetrail 是一个代码分析工具&#xff0c;它旨在帮助开发人员理解和导航复杂的代码库。它可以创建代码库的可视化图形&#xff0c;显示代码中的类、函数、变量、依赖关系等信息&#xff0c;从而帮助开发人员更好地理解代码结构和关系&#xff0c;降低维护…

【手撕算法】支持向量机(SVM)从入门到实战:数学推导与核技巧揭秘

摘要 支持向量机&#xff08;SVM&#xff09;是机器学习中的经典算法&#xff01;本文将深入解析最大间隔分类原理&#xff0c;手撕对偶问题推导过程&#xff0c;并实战实现非线性分类与图像识别。文中附《统计学习公式手册》及SVM调参指南&#xff0c;助力你掌握这一核心算法…

《OpenCV》——dlib(人脸应用实例)

文章目录 dlib库dlib库——人脸应用实例——表情识别dlib库——人脸应用实例——疲劳检测 dlib库 dlib库的基础用法介绍可以参考这篇文章&#xff1a;https://blog.csdn.net/lou0720/article/details/145968062?spm1011.2415.3001.5331&#xff0c;故此这篇文章只介绍dlib的人…

ArcGIS操作:07 绘制矢量shp面

1、点击目录 2、右侧显示目录 3、选择要存储的文件夹&#xff0c;新建shp 4、定义名称、要素类型、坐标系 5、点击开始编辑 6、点击创建要素 7、右侧选择图层、创建面 8、开始绘制&#xff0c;双击任意位置结束绘制

用Python+Flask打造可视化武侠人物关系图生成器:从零到一的实战全记录

用PythonFlask打造可视化武侠人物关系图生成器&#xff1a;从零到一的实战全记录 一、缘起&#xff1a;一个程序小白的奇妙探索之旅 作为一个接触Python仅13天的编程萌新&#xff0c;我曾以为开发一个完整的应用是遥不可及的事情。但在DeepSeek的帮助下&#xff0c;我竟用短短…

2025年渗透测试面试题总结- 阿某云安全实习(题目+回答)

网络安全领域各种资源&#xff0c;学习文档&#xff0c;以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具&#xff0c;欢迎关注。 目录 阿里云安全实习 一、代码审计经验与思路 二、越权漏洞原理与审计要点 三、SSRF漏洞解析与防御 四、教…

el-select的下拉选择框插入el-checkbox

el-check注意这里要使用model-value绑定数据 <el-selectv-model"selectDevice"multiplecollapse-tags:multiple-limit"5"style"width: 200px"popper-class"select-popover-class" ><el-optionv-for"item in deviceList…

20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡为ext4格式

20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡为ext4格式 2025/3/4 16:47 缘起&#xff1a;128GB的TF卡&#xff0c;只能格式化为NTFS/exFAT/ext4。 在飞凌的OK3588-C下&#xff0c;NTFS格式只读。 exFAT需要改内核来支持。 现在只剩下ext4了。 linux R4默认不支持exFAT…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)示例1:基础表格

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

【Linux】【网络】UDP打洞-->不同子网下的客户端和服务器通信(未成功版)

【Linux】【网络】UDP打洞–>不同子网下的客户端和服务器通信&#xff08;未成功版&#xff09; 上次说基于UDP的打洞程序改了五版一直没有成功&#xff0c;要写一下问题所在&#xff0c;但是我后续又查询了一些资料&#xff0c;成功实现了&#xff0c;这次先写一下未成功的…

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

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

数据结构——队列

1. 概念与结构 队列&#xff08;Queue&#xff09;是一种先进先出&#xff08;FIFO, First In First Out&#xff09;的数据结构&#xff0c;即最先被插入队列的数据会最先被删除。队列广泛应用于计算机科学中&#xff0c;特别是在任务调度、缓冲区管理、网络数据传输等领域。…

大语言模型技术发展

摘要 海外闭源模型领域竞争激烈&#xff0c;OpenAI 保持领先地位&#xff0c;而开源模型如 Meta 的 Llama 系列也逐渐崛起。LLM 技术呈现出大型模型和小型模型并行发展的趋势&#xff0c;同时&#xff0c;多模态功能和长上下文能力成为顶级模型的标准配置。MoE 架构的出现推动…

数据结构入门篇——什么是数据结构。

一、引入 工具是一种什么东西呢&#xff1f;是一种转化媒介&#xff0c;我们需要熟食&#xff0c;我们要通过用火来将生肉烤熟。在这个过程中。我们要输入一个东西——生肉&#xff0c;通过工具——火的加工&#xff0c;从而得到我们的目的产物——熟肉。 将上面的例子和红字部…

DeepSeek掘金——DeepSeek R1驱动的PDF机器人

DeepSeek掘金——DeepSeek R1驱动的PDF机器人 本指南将引导你使用DeepSeek R1 + RAG构建一个功能性的PDF聊天机器人。逐步学习如何增强AI检索能力,并创建一个能够高效处理和响应文档查询的智能聊天机器人。 本指南将引导你使用DeepSeek R1 + RAG构建一个功能性的PDF聊天机器人…