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

51单片机应用从零开始(七)·循环语句(if语句,swtich语句)

51单片机应用从零开始(一)-CSDN博客

51单片机应用从零开始(二)-CSDN博客

51单片机应用从零开始(三)-CSDN博客

51单片机应用从零开始(四)-CSDN博客

51单片机应用从零开始(五)·加减乘除运算-CSDN博客

51单片机应用从零开始(六)·逻辑运算-CSDN博客

目录

​编辑

1.  用右移运算流水点亮 P1 口 8 位 LED

2.  用 if 语句控制 P0 口 8 位 LED 的流水方向

3.  用 swtich 语句的控制 P0 口 8 位 LED 的点亮状态


1.  用右移运算流水点亮 P1 口 8 位 LED

        C语言中的右移运算是将一个整数向右移动指定的位数。右移运算符用“>>”表示,其作用是将一个数的二进制表示向右移动指定的位数,并用0在左侧填充。

例如:

int a = 10; // a的二进制表示为 00001010
a = a >> 2; // 将a向右移动2位,得到00100001,即4

        在进行右移运算时,如果对有符号整数进行右移,则保留符号位。如果符号位是1,则在左侧用1填充,如果符号位是0,则在左侧用0填充。如果对无符号整数进行右移,则在左侧用0填充。

例如:

int b = -10; // b的二进制表示为 11110110
b = b >> 2; // 对有符号整数进行右移,得到11111101,即-3
unsigned int c = 10; // c的二进制表示为 00001010
c = c >> 2; // 对无符号整数进行右移,得到00000010,即2

        那么根据这一特性我们可以完成:

#include<reg51.h> //包含单片机寄存器的头文件
/***************************** 
函数功能:延时一段时间
*****************************/ 
void delay(void) 
{ unsigned int n; for(n=0;n<30000;n++) ; 
} 
/***************************** 
函数功能:主函数
*****************************/ 
void main(void) 
{ unsigned char i; while(1) { P1=0xff; delay(); for(i=0;i<8;i++)//设置循环次数为 8 { P1=P1>>1; //每次循环 P1 的各二进位右移 1 位,高位补 0 delay(); //调用延时函数} } }

2.  用 if 语句控制 P0 口 8 位 LED 的流水方向

        C语言中,if语句是一种条件语句,用于根据条件选择是否执行特定的代码块。if语句通常具有以下形式:

if (condition) {//code block to execute if condition is true
}

        其中,condition是一个布尔表达式,如果它的值为true,则执行if语句块中的代码。如果condition的值为false,则if语句块中的代码将被跳过。如果需要在条件不成立时执行特定的代码块,可以使用else关键字:

if (condition) {//code block to execute if condition is true
} else {//code block to execute if condition is false
}

        如果有多个可能的条件需要使用if语句判断并执行不同的代码块,则可以使用if-else if-else结构:

if (condition1) {//code block to execute if condition1 is true
} else if (condition2) {//code block to execute if condition1 is false and condition2 is true
} else {//code block to execute if both condition1 and condition2 are false
}

        在if语句中也可以嵌套其他if语句,以实现更复杂的条件判断。

        在51单片机中,我们可以实现:

#include<reg51.h> //包含单片机寄存器的头文件
sbit S1=P1^4; //将 S1 位定义为 P1.4 
sbit S2=P1^5; //将 S2 位定义为 P1.5 
/***************************** 
函数功能:主函数
*****************************/ 
void main(void) 
{ while(1) { if(S1==0) //如果按键 S1 按下P0=0x0f; //P0 口高四位 LED 点亮if(S2==0) //如果按键 S2 按下P0=0xf0; //P0 口低四位 LED 点亮} 
}

3.  用 swtich 语句的控制 P0 口 8 位 LED 的点亮状态

        switch语句是一种多分支选择结构,它可以根据某个表达式的值来执行相应的代码块。下面是C语言中switch语句的基本语法:

switch(expression){case constant-expression1:statement(s);break;case constant-expression2:statement(s);break;/* 可以有任意数量的 case 语句 */default:statement(s);
}

switch语句的执行过程如下:

  1. 表达式expression的值被计算并与每个case常量表达式进行比较,如果匹配到一个case常量表达式,则执行该case下的语句块,直到遇到break语句或者switch语句结束。
  2. 如果所有case表达式都与表达式expression的值不匹配,则执行default下的语句块,如果没有default语句,则直接结束switch语句。

以下是一个简单的实例,演示了如何使用switch语句:

#include <stdio.h>
int main() {int grade = 85;switch(grade) {case 90 :printf("优秀\n" );break;case 80 :printf("良好\n" );break;case 70 :printf("中等\n" );break;case 60 :printf("及格\n" );break;default :printf("不及格\n" );}return 0;
}

输出结果为:

良好

        用 swtich 语句的控制 P0 口 8 位 LED 的点亮状态

#include<reg51.h> //包含单片机寄存器的头文件
sbit S1=P1^4; //将 S1 位定义为 P1.4 
/***************************** 
函数功能:延时一段时间
*****************************/ 
void delay(void) 
{ unsigned int n; for(n=0;n<10000;n++) ; 
} 
/***************************** 
函数功能:主函数
*****************************/ 
void main(void) 
{ unsigned char i; i=0; //将 i 初始化为 0 while(1) { if(S1==0) //如果 S1 键按下{ delay(); //延时一段时间if(S1==0) //如果再次检测到 S1 键按下i++; //i 自增 1 if(i==9) //如果 i=9,重新将其置为 1 i=1; } switch(i) //使用多分支选择语句{ case 1: P0=0xfe; //第一个 LED 亮break; case 2: P0=0xfd; //第二个 LED 亮break; case 3:P0=0xfb; //第三个 LED 亮break; case 4:P0=0xf7; //第四个 LED 亮break; case 5:P0=0xef; //第五个 LED 亮break; case 6:P0=0xdf; //第六个 LED 亮break; case 7:P0=0xbf; //第七个 LED 亮break; case 8:P0=0x7f; //第八个 LED 亮break; default: //缺省值,关闭所有 LED P0=0xff; } } 
}

相关文章:

51单片机应用从零开始(七)·循环语句(if语句,swtich语句)

51单片机应用从零开始&#xff08;一&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;二&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;三&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;四&#xff09;-CSDN博客 51单片机应用从零开始&#xff08;…...

Web服务器(go net/http) 处理Get、Post请求

大家好 我是寸铁&#x1f44a; 总结了一篇Go Web服务器(go net/http) 处理Get、Post请求的文章✨ 喜欢的小伙伴可以点点关注 &#x1f49d; 前言 go http请求如何编写简单的函数去拿到前端的请求(Get和Post) 服务器(后端)接收到请求后&#xff0c;又是怎么处理请求&#xff0c…...

Unity中颜色空间Gamma与Linear

文章目录 前言一、人眼对光照的自适应1、光照强度与人眼所见的关系2、巧合的是&#xff0c;早期的电子脉冲显示屏也符合这条曲线3、这两条曲线都巧合的符合 y x^2.2^&#xff08;Gamma2.2空间&#xff09; 二、Gamma矫正1、没矫正前&#xff0c;人眼看电子脉冲显示屏&#xff…...

Word/PPT/PDF怎么免费转为JPG图片?

1、打开金鸣表格文字识别网站。 2、点击导航条上的“软件下载” 3、安装并打开金鸣表格文字识别软件。 4、点击顶部导航栏的“文件转图片”。 5、选择需要转换成图片的文件&#xff08;支持Word/PPT/PDF&#xff09;. 6、点“打开”程序将自动分页转换为图片。...

使用docker命令_进入容器_登录mysql服务_并执行sql语句---Docker工作笔记005

今天就用到了,不得不说用docker用到的还是少,记录一下,常用的也就这些吧. 首先执行: docker ps [root@localhost dataease-1.18.9]# docker ps CONTAINER ID IMAGE COMMAND CREATED …...

PMP 考试的含金量怎么样?

这里可以三个思考题和三个价值点帮你认识PMP考试。 三个思维题 1.工作环境 PMP证书含金量的一个很大因素&#xff0c;就是考证的人是否对PMP证书有比较强的实际需求。相反&#xff0c;如果只是听别人说&#xff0c;PMP证书很好&#xff0c;不管工作中是否有需要&#xff0c;…...

2023亚太杯数学建模A题思路代码分析

已经完成A题完整思路代码&#xff0c;文末名片查看获取 A题就是我们机器学习中的一个图像识别&#xff0c;他是水果图像识别&#xff0c;就是苹果识别的一个问题&#xff0c;我们用到的方法基本是使用深度学习中的卷积神经网络来进行识别和分类 问题一&#xff1a;基于附件1中…...

Qt实现自定义IP地址输入控件(百分百还原Windows 10网络地址输入框)

在开发网络相关的程序时,我们经常需要输入IP地址,例如源地址和目标地址。Qt提供了一些基础的控件,如QLineEdit,但是它们并不能满足我们对IP地址输入的要求,例如限制输入的格式、自动跳转到下一个输入框、处理回车和退格键等。因此,我们需要自己编写一个自定义的IP地址输入…...

Linux下的C++ socket编程实例

服务端&#xff1a; 服务器端先初始化socket&#xff0c;然后与端口绑定&#xff0c;对端口进行监听&#xff0c;调用accept阻塞&#xff0c;等待客户端连接。 socket() -> bind() -> listen() -> accept() 客户端&#xff1a; 客户端先初始化socket&#xff0c;然后…...

4.常见面试题--操作系统

特点&#xff1a;并发性、共享性、虚拟性、异步性。 Windows 和 Linux 内核差异 对于内核的架构⼀般有这三种类型&#xff1a; ● 宏内核&#xff0c;包含多个模块&#xff0c;整个内核像⼀个完整的程序&#xff1b; ● 微内核&#xff0c;有⼀个最⼩版本的内核&#xff0…...

YOLOv8训练自己的目标检测数据集

YOLOv8训练自己的目标检测数据集 目录标题 源码下载环境配置安装包训练自己的数据集数据集文件格式数据集文件配置超参数文件配置训练数据集命令行训练脚本.py文件训练 进行detect显示detect的效果 源码下载 YOLOv8官方的GitHub代码&#xff0c;同时上面也有基础环境的配置要…...

代码随想录算法训练营第三十二天| 122 买卖股票的最佳时机 || 55 跳跃游戏 45 跳跃游戏 ||

目录 122 买卖股票的最佳时机 || 55 跳跃游戏 45 跳跃游戏 || 122 买卖股票的最佳时机 || 设置变量now代表此时买入的股票&#xff0c;为赋值为Integer.MAX_VALUE&#xff0c;遍历prices数组&#xff0c;有如下两种情况&#xff1a; 如果比now小说明不能售出&#xff0c;可以…...

聚类笔记/sklearn笔记:Affinity Propagation亲和力传播

1 算法原理 1.1 基本思想 将全部数据点都当作潜在的聚类中心(称之为 exemplar )然后数据点两两之间连线构成一个网络( 相似度矩阵 )再通过网络中各条边的消息( responsibility 和 availability )传递计算出各样本的聚类中心。 1.2 主要概念 Examplar聚类中心similarity S(i…...

Linux常用操作 Vim一般使用 SSH介绍 SSH密钥登录

目录 1. 常用命令 2. vim一般使用 3. SSH介绍 4. ssh密钥登录 1. 常用命令 1&#xff09;# 与 $ 提示的区别 # 表示用户有root权限&#xff0c;一般的以root用户登录提示符为#&#xff0c; $提示符表示用户为普通用户 2&#xff09;ifconfig 查看ip地址 eno1: 代表由主板…...

Hadoop技术与应用的习题

第一章测验 1、下面哪个选项不属于Google的三驾马车&#xff1f; A.HDFS B.MapReduce C.BigTable D.GFS 2、下面哪个思想是为了解决PageRank&#xff08;网页排名&#xff09;的问题&#xff1f; A.GFS B.BigTable C.MapReduce D.YARN 3、GFS 存储的文件都被分割成固定大小的…...

4.4 抗锯齿

一、锯齿是怎么产生的 二、抗锯齿介绍 1.SSAA(super sample anti-aliasing) 拿4xSSAA举例子&#xff0c;假设最终屏幕输出的分辨率是800x600, 4xSSAA就会先渲染到一个分辨率1600x1200的buffer上&#xff0c;然后再直接把这个放大4倍的buffer下采样至800x600。这种做法在数学上…...

vue-router 路由权限,路由导航守卫

addRouter() 添加路由 使用场景 列如&#xff1a;菜单权限的分配&#xff08;管理员与用户不一致&#xff09; 根据后台返回 参数 定义isAdmin根据isAdmin 分配 let isAdmin true // 添加路由 可以传参 一级路由名称 来添加二级路由 if (isAdmin) {router.addRoute({path: /…...

2022最新版-李宏毅机器学习深度学习课程-P49 GPT的野望

GPT→类似于Transformer Encoder 训练任务&#xff1a;Predict Next Token 使用MASK-attention&#xff0c;不断预测“下一个token”。 可以用GPT生成文章。 How to use GPT? 给出描述和例子 给出前半段&#xff0c;补上后半段 In-context Learning(no GD) 结果 目前看起…...

应用软件安全编程--28SSL 连接时要进行服务器身份验证

当进行SSL 连接时&#xff0c;服务器身份验证处于禁用状态。在某些使用SSL 连接的库中&#xff0c;默认情况下不 验证服务器证书。这相当于信任所有证书。 对 SSL 连接时要进行服务器身份验证的情况&#xff0c;示例1给出了不规范用法(Java 语言)示例。示例2 给出了规范用法(J…...

深度学习之七(深度信念网络和受限玻尔兹曼机器)

概念 深度信念网络(Deep Belief Networks,DBN)和受限玻尔兹曼机器(Restricted Boltzmann Machines,RBMs)都是无监督学习的模型,通常用于特征学习、降维和生成数据。 受限玻尔兹曼机器(RBM): 结构: RBM 是一个两层神经网络,包括一个可见层和一个隐藏层。这两层之间…...

解密OpenHand机械手:从实验室原型到工业级抓取系统的实战演进

解密OpenHand机械手&#xff1a;从实验室原型到工业级抓取系统的实战演进 【免费下载链接】openhand-hardware CAD files for the OpenHand hand designs 项目地址: https://gitcode.com/gh_mirrors/op/openhand-hardware 面对机器人抓取任务中的自适应挑战&#xff0c;…...

自托管开源联系人管理系统:数据主权、vCard标准与API驱动架构实践

1. 项目概述&#xff1a;一个面向未来的联系人管理解决方案最近在整理一个老项目时&#xff0c;我重新审视了“Aquariosan/veyra-contacts”这个仓库。这不仅仅是一个简单的通讯录应用&#xff0c;它更像是一个理念的实践场&#xff0c;探讨在数据主权意识日益增强的今天&#…...

DataFlow框架:构建高效LLM数据准备流水线

1. DataFlow框架概述&#xff1a;构建高效LLM数据准备流水线在大型语言模型&#xff08;LLM&#xff09;的研发过程中&#xff0c;数据准备环节往往占据整个项目70%以上的工作量。传统的数据处理方式存在两大痛点&#xff1a;一是流程僵化难以适应多模态数据需求&#xff0c;二…...

iziModal事件系统完全指南:如何监听和控制模态框生命周期

iziModal事件系统完全指南&#xff1a;如何监听和控制模态框生命周期 【免费下载链接】iziModal Elegant, responsive, flexible and lightweight modal plugin with jQuery. 项目地址: https://gitcode.com/gh_mirrors/iz/iziModal iziModal是一款优雅、响应式、灵活且…...

Ryujinx Nintendo Switch模拟器完整指南:从零开始PC畅玩Switch游戏

Ryujinx Nintendo Switch模拟器完整指南&#xff1a;从零开始PC畅玩Switch游戏 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx 想在电脑上体验Nintendo Switch游戏的魅力吗&#xff1f…...

Fluent新手必看:别再乱设Operating Pressure了,一个设置不对,结果全错!

Fluent压力设置避坑指南&#xff1a;Operating Pressure的实战精要 在计算流体力学(CFD)领域&#xff0c;Fluent作为行业标杆软件&#xff0c;其参数设置的精确性直接决定了模拟结果的可靠性。而Operating Pressure&#xff08;操作压力&#xff09;这一看似简单的参数&#xf…...

YesPlayMusic:重新定义你的网易云音乐体验,告别广告与社交干扰

YesPlayMusic&#xff1a;重新定义你的网易云音乐体验&#xff0c;告别广告与社交干扰 【免费下载链接】YesPlayMusic 高颜值的第三方网易云播放器&#xff0c;支持 Windows / macOS / Linux :electron: 项目地址: https://gitcode.com/gh_mirrors/ye/YesPlayMusic 你是…...

保姆级教程:手把手教你用示波器调试HDMI音频(从I2S信号抓取到ACR时钟恢复)

保姆级教程&#xff1a;手把手教你用示波器调试HDMI音频&#xff08;从I2S信号抓取到ACR时钟恢复&#xff09; 当你面对一台HDMI设备突然"失声"时&#xff0c;是否曾感到无从下手&#xff1f;作为硬件工程师&#xff0c;我们常常需要从最底层的信号层面寻找答案。本文…...

手把手教你用PyQtGraph+PyQt5/PySide6打造一个实验室级数据监控仪表盘

用PyQtGraphPyQt5构建工业级数据监控系统的全栈指南 实验室和工业环境中&#xff0c;数据可视化监控系统正从专业软件向Python技术栈迁移。PyQtGraph作为性能标杆&#xff0c;配合PyQt5/PySide6的界面框架&#xff0c;能构建出媲美LabVIEW的定制化解决方案。本文将完整呈现从架…...

如何用WeChatMsg彻底掌控你的微信聊天数据:从新手到专家的完整指南

如何用WeChatMsg彻底掌控你的微信聊天数据&#xff1a;从新手到专家的完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trend…...