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; 
 } 
 } 
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IIC驱动OLED HAL库+CubeMX

一.IIC传输数据的格式 1.写操作 2.读操作 3.IIC信号 二. IIC底层驱动 #define SCL_PIN GPIO_PIN_6 #define SDA_PIN GPIO_PIN_7#define SCL_PORT GPIOB #define SDA_PORT GPIOB/********************** 函数宏定义 **********************/ #d…

揭秘周杰伦《最伟大的作品》MV,绝美UI配色方案竟然藏在这里

色彩在UI设计的基本框架中占据着举足轻重的位置。实际上&#xff0c;精心挑选和组合的色彩配色&#xff0c;往往就是UI设计成功的不二法门。在打造出一个实用的UI配色方案过程中&#xff0c;我们需要有坚实的色彩理论知识&#xff0c;同时还需要擅于从生活中观察和提取灵感。以…

3、如何从0到1去建设数据仓库

1、数仓实施过程 1.1 数据调研 数据调研包括&#xff1a;业务调研、需求调研 业务调研 需要调研企业内有哪些业务线、业务线的业务是否还有相同点和差异点 各个业务线有哪些业务模块&#xff0c;每个模型下有哪些业务流程&#xff0c;每个流程下产生的数据 是怎样存储的 业务调…

Spring Boot集成MyBatis实现多数据源访问的“秘密”

文章目录 为什么需要多数据源&#xff1f;Spring Boot集成MyBatis的基础配置使用多数据源小结 &#x1f389;Spring Boot集成MyBatis实现多数据源访问的“秘密” ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博客&#x1f388;该系列文章专栏&…

技术面时,一定要掌握这3个关键点

前言 现在有这么多优秀的测试工程师&#xff0c;大家都知道技术面试是不可避免的一个环节&#xff0c;一般技术面试官都会通过自己的方式去考察你的技术功底与基础理论知识。 如果你参加过一些大厂面试&#xff0c;肯定会遇到一些这样的问题&#xff1a; 1、看你项目都用到了…

Navicat 技术指引 | 连接 GaussDB 主备版

Navicat Premium&#xff08;16.2.8 Windows版或以上&#xff09; 已支持对GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能&#xff0c;还提供强大的高阶功能&#xff08;如模型、结构同步、协同合作、数据迁移等&#xff09;&#xff0c;这…

【网络奇缘】- 计算机网络|分层结构|ISO模型

&#x1f308;个人主页: Aileen_0v0&#x1f525;系列专栏: 一见倾心,再见倾城 --- 计算机网络~&#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 计算机网络分层结构 OSI参考模型 OSI模型起源 失败原因: OSI模型组成 协议的作用 &#x1f4dd;全文…

HTML实现简易计算器

随便写的&#xff0c;可能有bug&#xff0c;可以在评论区指出哈。 HTML代码&#xff1a; <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>AI简易计算器</title> </head> <body> <table id"c…

二十四、RestClient操作文档

目录 一、新增文档 1、编写测试代码 二、查询文档 1、编写测试代码 三、删除文档 1、编写测试代码 四、修改文档 1、编写测试代码 五、批量导入文档 批量查询 一、新增文档 1、编写测试代码 SpringBootTest public class HotelDocumentTest {private RestHighLevelC…

Cesium 展示——地球以及渲染数据导出(下载)为图片或 pdf

文章目录 需求分析新加需求分析第一种方式第二种方式需求 将 Cesium 球体以及渲染数据导出为 jpg/png/pdf 分析 获取场景 scene 信息,转为image 的 octet-stream 流 进行下载为图片 /*** @todo canvas 导出图片* @param {string} dataurl - 地址* @return {Blob}*/ functio…

GeoTrust SSL数字安全证书介绍

一、GeoTrust OV证书的介绍 GeoTrust OV证书是由GeoTrust公司提供的SSL证书&#xff0c;它是一种支持OpenSSL的数字证书&#xff0c;具有更高的安全性和可信度。GeoTrust是全球领先的网络安全解决方案提供商&#xff0c;为各类用户提供SSL证书和信任管理服务。GeoTrust OV证书…

成为AI产品经理——模型评估概述

目录 一、模型宣讲和评估的原因 二、模型宣讲 三、模型评估 1. 重要特征 ① 特征来源 ②特征意义 2.选择测试样本 3.模型性能和稳定性 一、模型宣讲和评估的原因 刘海丰老师提到他们在做一个金融AI产品未注重模型指标&#xff0c;过于注重业务指标&#xff0c;导致产生…

C语言——深入理解指针(1)

目录 1.内存与地址 1.1 什么是内存 1.2 编址 2. 指针的变量和地址 2.1 取地址&#xff08;&&#xff09; 2.2 指针变量 2.3 解引用 2.4 指针变量大小 3. 指针变量类型存在的意义 3.1 不同类型指针的解引用 3.2 指针对整数的运算&#xff08;&#xff0c;-&#…

CentOS Stream 9系统Cgroup问题处理

安装docker容器启动失败 之前适配过Ubuntu系统的容器&#xff0c;由于版本比较高&#xff0c;没有挂载Cgroup的路径。这次使用Centos Stream 9系统安装docker容器时也遇到了这个情况。由于处理方式有些不一样&#xff0c;所以记录一下。 这是docker容器启动过报错的输出日志。…

实例讲解:在3dMax中如何使用python脚本?

如果你是Python或Maxscript的新手&#xff0c;你现在可以跟着这篇文章开始做一些代码了&#xff0c;本文将让我们从非常基本的东西开始学习。 如何在3dmax中获取选定的节点并打印出它们的名称&#xff1f;所有场景对象如何&#xff1f;我们直接看代码&#xff1a; import MaxP…

斯坦福大学引入FlashFFTConv来优化机器学习中长序列的FFT卷积

斯坦福大学的FlashFFTConv优化了扩展序列的快速傅里叶变换(FFT)卷积。该方法引入Monarch分解&#xff0c;在FLOP和I/O成本之间取得平衡&#xff0c;提高模型质量和效率。并且优于PyTorch和FlashAttention-v2。它可以处理更长的序列&#xff0c;并在人工智能应用程序中打开新的可…

预处理机制

跟着肯哥&#xff08;不是我&#xff09;学预处理机制 预处理类别 宏定义&#xff1a;#define 将文本替换为表达式或语句 条件编译&#xff1a;#ifdef、#ifndef和#if、#elif、#endif 根据标识符是否被定义选择编译代码 头文件包含&#xff1a;#include 将其他文件&#x…

万界星空科技商业开源MES/免费MES/低代码MES

万界星空科技商业开源MES可以提供包括制造数据管理、计划排程管理、生产调度管理、库存管理、质量管理、人力资源管理、工作中心/设备管理、工具工装管理、采购管理、成本管理、项目看板管理、生产过程控制、底层数据集成分析、上层数据集成分解等管理模块&#xff0c;打造一个…

Python+jieba+wordcloud实现文本分词、词频统计、条形图绘制及不同主题的词云图绘制

目录 序言&#xff1a;第三方库及所需材料函数模块介绍分词词频统计条形图绘制词云绘制主函数 效果预览全部代码 序言&#xff1a;第三方库及所需材料 编程语言&#xff1a;Python3.9。 编程环境&#xff1a;Anaconda3&#xff0c;Spyder5。 使用到的主要第三方库&#xff1a;…

gitee推荐-PHP面试准备的资料

该内容为giee项目。PHP-Interview: 这个项目是自己准备PHP面试整理的资料。包括PHP、MySQL、Linux、计算机网络等资料。方便自己以后查阅&#xff0c;会不定期更新&#xff0c;欢迎提交pr&#xff0c;如果错误&#xff0c;请指出&#xff0c;谢谢 在线预览地址&#xff1a;Intr…