51单片机应用从零开始(八)·循环语句(for循环、while 语句、do‐while 语句)

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

目录

1.  用for 语句控制蜂鸣器鸣笛次数

2.  用while 语句控制 LED

3.  用 do‐while 语句控制 P0 口 8 位 LED 流水点亮


1.  用for 语句控制蜂鸣器鸣笛次数

        C语言中的for语句是一种循环语句,通常用于执行特定的操作一定数量的次数。

for语句的语法如下:

for (initialization; condition; increment/decrement) {statement(s);
}

        其中,initialization用于初始化循环计数器,通常是一个赋值语句;condition是循环条件,当条件为真时,循环继续执行,当条件为假时,循环停止;increment/decrement是循环计数器的增量或减量,通常是一个自增或自减语句;statement(s)是循环体,即要重复执行的语句块。

下面是一个计算1到10的累加和的示例:

#include <stdio.h>int main() {int sum = 0;int i;for (i = 1; i <= 10; i++) {sum += i;}printf("1到10的累加和为:%d\n", sum);return 0;
}

输出结果为:

1到10的累加和为:55

        在51单片机中,用for 语句控制蜂鸣器鸣笛次数:

#include<reg51.h> //包含单片机寄存器的头文件
sbit sound=P3^7; //将 sound 位定义为 P3.7 
/**************************************** 
函数功能:延时形成 1600Hz 音频
****************************************/ 
void delay1600(void) 
{ unsigned char n; for(n=0;n<100;n++) ; 
} 
/**************************************** 
函数功能:延时形成 800Hz 音频
****************************************/ 
void delay800(void) 
{ unsigned char n; for(n=0;n<200;n++) ; 
} 
/**************************************** 
函数功能:主函数
****************************************/ 
void main(void) 
{ unsigned int i; while(1) { for(i=0;i<830;i++) { sound=0; //P3.7 输出低电平delay1600(); sound=1; //P3.7 输出高电平delay1600(); } for(i=0;i<200;i++) { sound=0; //P3.7 输出低电平delay800(); sound=1; //P3.7 输出高电平delay800(); }  } 
}

2.  用while 语句控制 LED

        while语句是C语言中的迭代语句,用于在满足条件的情况下重复执行一组语句或语句块。while语句的语法如下:

while (condition)
{statement(s);
}

        条件(condition)是一个表达式,当它的值为真(true)时,循环体中的语句会被执行。而当条件的值为假(false)时,循环会停止,程序将跳转到while语句之后的第一条语句继续执行。

例如,以下代码将不断地打印数字1到10,直到计数器变成11时退出循环:

#include <stdio.h>int main()
{int i = 1;while (i <= 10){printf("%d\n", i);i++;}return 0;
}

         在51单片机中,用while 语句控制 LED:

#include<reg51.h> //包含单片机寄存器的头文件
/**************************************** 
函数功能:延时约 60ms (3*100*200=60000μs) 
****************************************/ 
void delay60ms(void) 
{ unsigned char m,n; for(m=0;m<100;m++) for(n=0;n<200;n++) ; 
} 
/**************************************** 
函数功能:主函数
****************************************/ 
void main(void) 
{ unsigned char i; while(1) //无限循环{ i=0; //将 i 初始化为 0 while(i<0xff) //当 i 小于 0xff(255)时执行循环体{ P0=i; //将 i 送 P0 口显示delay60ms(); //延时i++; //i 自增 1 } } 
}

3.  用 do‐while 语句控制 P0 口 8 位 LED 流水点亮

        do-while语句是C语言中的一种循环语句,它先执行一次循环体,再根据循环条件判断是否继续循环。其基本语法如下:

do{// 循环体语句
} while(循环条件);

        当执行do-while语句时,先执行一次循环体语句,随后判断循环条件是否成立,成立则继续执行循环体语句,否则退出循环。

        与while语句不同的是,do-while语句保证循环体至少会被执行一次,即使循环条件一开始就不成立。

        do-while语句的应用场景通常是需要至少执行一次循环体的情况,比如输入数据校验、菜单选择等。

        在51单片机中,用 do‐while 语句控制 P0 口 8 位 LED 流水点亮:

#include<reg51.h> //包含单片机寄存器的头文件
/**************************************** 
函数功能:延时约 60ms (3*100*200=60000μs) 
****************************************/ 
void delay60ms(void) 
{ unsigned char m,n; for(m=0;m<100;m++) for(n=0;n<200;n++) ; 
} 
/**************************************** 
函数功能:主函数
****************************************/ 
void main(void) 
{ do { P0=0xfe; //第一个 LED 亮delay60ms(); P0=0xfd; //第二个 LED 亮delay60ms(); P0=0xfb; //第三个 LED 亮delay60ms(); P0=0xf7; //第四个 LED 亮delay60ms(); P0=0xef; //第五个 LED 亮delay60ms(); P0=0xdf; //第六个 LED 亮delay60ms(); delay60ms(); P0=0xbf; //第七个 LED 亮delay60ms(); P0=0x7f; //第八个 LED 亮delay60ms(); }while(1); //无限循环,使 8 位 LED 循环流水点亮
}

更多推荐:

时光の尘_千题千解·Java面试宝典,Linux学习,嵌入式学习-CSDN博客

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

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

相关文章

Python编写的爬虫为什么受欢迎?

每每回想起我当初学习python爬虫的经历&#xff0c;当初遇到的各种困难险阻至今都历历在目。即便当初道阻且长&#xff0c;穷且益坚&#xff0c;我也从来没有想过要放弃。今天我将以我个人经历&#xff0c;和大家聊一聊有关Python语音编写的爬虫的事情。谈一谈为什么最近几年py…

从零开始,用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合

&#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 "从零开始&#xff0c;用Docker-compose打造SkyWalking、Elasticsearch和Spring Cloud的完美融合 前言准备工作编写docker-compose.yml文件为什么使用本机ip为什么skywa…

Python BDD 框架比较之 pytest-bdd vs behave

pytest-bdd和behave是 Python 的两个流行的 BDD 测试框架&#xff0c;两者都可以用来编写用户故事和可执行的测试用例&#xff0c; 具体选择哪一个则需要根据实际的项目状况来看。 先简单看一下两者的功能&#xff1a; pytest-bdd 基于pytest测试框架&#xff0c;可以与pytest…

基于springboot实现实习管理系统的设计与实现项目【项目源码+论文说明】计算机毕业设计

基于sprinmgboot实现实习管理系统的设计与实现演示 摘要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;实习管理也不例外&#xff0c;但目前国内仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;…

常见树种(贵州省):012茶、花椒、八角、肉桂、杜仲、厚朴、枸杞、忍冬

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、茶 灌…

Banana Pi [BPi-R3-Mini] 回顾和主线 ImmortalWrt 固件支持

BananaPi BPi-R3 Mini 采用 MediaTek 830&#xff08;4 个 A53&#xff0c;最高 2.0 GHz&#xff09;&#xff0c;具有 2 个 2.5 GbE、AX4200 2.4G/5G 无线和 USB 2.0 端口。它还具有两个 M.2 连接器&#xff0c;可用于 NVMe SSD 和 5G 模块&#xff08;板上包含 Nano SIM 插槽…

springboot 外部化配置

背景:修改jar包中的配置比较麻烦 项目部署的时候放一个配置文件在jar包外 配置文件优先级: 1.jar包内的application.properties/yaml 2.jar包内的application-{profile}.properties/yaml 3.jar包外的application.properties/yaml 4.jar包外的application-{profile}.properties…

手撕A*算法(详解A*算法)

A*算法原理 全局路径规划算法&#xff0c;根据给定的起点和终点在全局地图上进行总体路径规划。 导航中使用A*算法计算出机器人到目标位置的最优路线&#xff0c;一般作为规划的参考路线 // 定义地图上的点 struct Point {int x,y; // 栅格行列Point(int x, int y):x(x),y(y){…

STM32_6(TIM)

TIM定时器&#xff08;第一部分&#xff09; TIM&#xff08;Timer&#xff09;定时器定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时不仅…

导数、方向导数、梯度方向、梯度

导数&#xff1a;自变量改变一定量时&#xff08;大于或小于0&#xff09;&#xff0c;因变量改变多少 方向导数&#xff1a;限定在某一个方向上&#xff0c;自变量改变一定量时&#xff08;大于0&#xff09;&#xff0c;因变量改变多少 梯度方向&#xff1a;方向导数最大的…

[Linux] shell脚本的函数和数组

一、函数 1.1 函数的定义 函数是脚本的别名 作用&#xff1a;函数可以避免代码重复&#xff0c;可读性强&#xff0c;可以简化脚本。 格式&#xff1a;函数名&#xff08;&#xff09;{脚本} 1.2 如何使用函数 1.定义 2.调用 函数一定要先定义再使用 例子&#xff1a…

SpringBoot 实现CAS Server统一登录认证

SpringBoot 集成CAS Server 一、CAS Service服务介绍 ​ CAS&#xff08;Central Authentication Service&#xff09;中心授权服务&#xff0c;是一个开源项目&#xff0c;目的在于为Web应用系统提供一种可靠的单点登录。 ​ 在整个认证的流程中的整个流程大概是&#xff1…