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

相关推荐
嵌联驰1 小时前
【S32K3 RTD MCAL 篇1】 K344 KEY 控制 EMIOS PWM
单片机
Daemon.Chen1 小时前
【STM32开发之寄存器版】(五)-窗口看门狗WWDG
stm32·单片机·嵌入式硬件
嵌入式杂谈3 小时前
STM32中断编程详解:配置外部中断和中断服务例程
stm32·单片机·嵌入式硬件
光子物联单片机4 小时前
传感器模块编程实践(三)舵机+超声波模块融合DIY智能垃圾桶模型
stm32·单片机·嵌入式硬件·mcu
嵌入式杂谈6 小时前
STM32中断编程指南:NVIC和中断优先级
stm32·单片机·嵌入式硬件
xiaobuding_QAQ7 小时前
自用Proteus(8.15)常用元器件图示和功能介绍(持续更新...)
单片机·嵌入式硬件·学习·proteus
zxfly20139 小时前
STM32的DMA技术介绍
stm32·单片机·嵌入式硬件
CV金科14 小时前
蓝桥杯—STM32G431RBT6(IIC通信--EEPROM(AT24C02)存储器进行通信)
stm32·单片机·嵌入式硬件·算法·蓝桥杯
嵌入式详谈16 小时前
基于STM32的智能风扇控制系统设计
stm32·单片机·嵌入式硬件
小小怪大梦想16 小时前
RTC实时时钟
stm32·单片机·嵌入式硬件