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博客

相关推荐
bai5459362 小时前
STM32 CubeIDE 使用串口中断模式
stm32·单片机·嵌入式硬件
qq_401700413 小时前
基于TMI6263BH芯片USB2.0 3.0电源控制与限流保护原理图
单片机·嵌入式硬件
fanged3 小时前
STM32(4)--时钟树
stm32·单片机·嵌入式硬件
List<String> error_P4 小时前
STM32启动流程及相关概念
单片机·嵌入式硬件
__万波__4 小时前
STM32L475蜂鸣器实验
stm32·单片机·嵌入式硬件
qq_401700414 小时前
经典78M05 LDO经典应用电路
单片机·嵌入式硬件
欢乐熊嵌入式编程5 小时前
BLE 蓝牙开发入门:用手机控制开发板 LED
单片机·ble蓝牙开发·嵌入式入门
小美单片机6 小时前
External model DLL ”ADC083XDLL“ not found_proteus仿真报错解决方法
c语言·单片机·51单片机·proteus·课程设计·课设
Tyrion.Mon6 小时前
沁恒PD协议诱骗芯片CH224A/CH224Q--IIC研究(0x60~0x8F)
单片机·硬件工程