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

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


目录

[1. 用for 语句控制蜂鸣器鸣笛次数](#1. 用for 语句控制蜂鸣器鸣笛次数)

[2. 用while 语句控制 LED](#2. 用while 语句控制 LED)

[3. 用 do‐while 语句控制 P0 口 8 位 LED 流水点亮](#3. 用 do‐while 语句控制 P0 口 8 位 LED 流水点亮)


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

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

for语句的语法如下:

c 复制代码
for (initialization; condition; increment/decrement) {
   statement(s);
}

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

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

c 复制代码
#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;
}

输出结果为:

c 复制代码
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博客

相关推荐
微信1532379424315 小时前
离线语音识别 ( 小语种国家都支持)可定制词组
嵌入式硬件
weixin_5088216516 小时前
1ms软延时,不用定时器,stm32
stm32·单片机·嵌入式硬件
月阳羊16 小时前
【无人机】无人机PX4飞控系统高级软件架构
嵌入式硬件·架构·系统架构·无人机
weixin_5088216517 小时前
stm32 主频216MHz,写个ms延时函数,us延时函数
stm32·单片机·嵌入式硬件
华清远见IT开放实验室17 小时前
【新书上市】《STM32嵌入式系统开发—基于STM32CubeMX和HAL库》,高校教学推荐,STM32入门必读书籍!
stm32·单片机·嵌入式硬件·虚拟仿真·必读书籍·高校教学
智木芯语17 小时前
【58】编程技巧:单片机编程命名规范
单片机·嵌入式硬件·嵌入式·#stm32·#stc8
捷配datasheet17 小时前
OP2177运算放大器:高性能模拟信号处理的关键元件
嵌入式硬件·信号处理
逼子格19 小时前
五种音频器件综合对比——《器件手册--音频器件》
嵌入式硬件·音视频·硬件工程师·硬件测试·电子器件·硬件笔试真题·音频器件
niuTaylor21 小时前
STM32平衡车开发实战教程:从零基础到项目精通
stm32·单片机·嵌入式硬件