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.pswp.cn/news/165472.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165472.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165472.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka 控制器(controller)

Kafka 控制器&#xff08;controller&#xff09; 在kafka集群中 會存在一個或者多個broker&#xff08;一個服務器就是一個broker&#xff09;&#xff0c;其中有一個broker會被選舉為控制器 kafka controller &#xff0c;負責管理整個集群中所有副本、分區的狀態&#xff0…

多語言快速排序算法

快速排序是一種高效的排序算法&#xff0c;使用分治法策略。它的基本思想是&#xff1a;選擇一個元素作為“基準”&#xff08;pivot&#xff09;&#xff0c;重新排序數列&#xff0c;所有比基準值小的元素擺放在基準前面&#xff0c;所有比基準值大的擺在基準的后面。在這個分…

python內置模塊binascii,二進制數據和ASCII字符串之間進行轉換

一、簡介 binascii是Python標準庫中的一個模塊&#xff0c;提供了在二進制數據和ASCII字符串之間進行轉換的功能。它包含了一些用于處理二進制數據的函數&#xff0c;可以進行二進制數據的編碼、解碼和轉換。 二、方法 binascii.unhexlify(hexstr)&#xff1a;將十六進制表示…

事件循環機制及常見面試題

借鑒&#xff1a; 《Javascript 忍者秘籍》第二版&#xff0c;事件循環篇 面試 | JS 事件循環 event loop 經典面試題含答案 - 知乎 (zhihu.com) 概念 主棧隊列就是一個宏任務&#xff0c;每一個宏任務執行完就會執行宏任務中的微任務&#xff0c;直到微任務全部都執行完&a…

Python 使用XlsxWriter操作Excel

在數據處理和報告生成的領域中&#xff0c;Excel 文件一直是廣泛使用的標準格式。為了讓 Python 開發者能夠輕松創建和修改 Excel 文件&#xff0c;XlsxWriter 庫應運而生。XlsxWriter 是一個功能強大的 Python 模塊&#xff0c;專門用于生成 Microsoft Excel 2007及以上版本&a…

Vue3-provide和inject

作用和場景&#xff1a;頂層組件向任意的底層組件傳遞數據和方法&#xff0c;實現跨層組件通信 跨層傳遞普通數據&#xff1a; 1.頂層組件通過provide函數提供數據 2.底層組件通過inject函數獲取數據 既可以傳遞普通數據&#xff0c;也可以使用ref傳遞響應式數據&#xff08…

批量插入SQL 錯誤 [933] [42000]: ORA-00933: SQL 命令未正確結束

使用DBeaver向【oracle數據庫】插入大量數據 INSERT INTO Student(name,sex,age,address,birthday) VALUES(Nike,男,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike…

使用Arrays.Sort并定制Comparator排序解決合并區間

合并區間-力扣算法題56題 以數組 intervals 表示若干個區間的集合&#xff0c;其中單個區間為 intervals[i] [starti, endi] 。請你合并所有重疊的區間&#xff0c;并返回 一個不重疊的區間數組&#xff0c;該數組需恰好覆蓋輸入中的所有區間 。 示例 1&#xff1a; 輸入&am…

新能源行業碳酸氫鋰純化除鈣鎂工藝

在碳酸氫鋰純化中常規的沉淀或者其它工藝不能夠滿足鈣鎂等堿土金屬的深度去除。通常采用離子交換工藝實現鈣離子、鎂離子的去除&#xff0c;以提升碳酸鋰的品質&#xff0c;但是國產樹脂在此行業應用中存在的使用量過大的問題&#xff0c;會導致設備造價偏高、廢水量太大&#…

C++二分向量算法:最多可以參加的會議數目 II

本題的其它解法 C二分算法&#xff1a;最多可以參加的會議數目 II 本文涉及的基礎知識點 二分查找算法合集 題目 給你一個 events 數組&#xff0c;其中 events[i] [startDayi, endDayi, valuei] &#xff0c;表示第 i 個會議在 startDayi 天開始&#xff0c;第 endDayi …

gitt開源項目的意義,公司為什么會對在gitt上有開源項目的人更大機會

Git是一種分布式版本控制系統&#xff0c;它可以幫助程序員管理代碼的歷史版本和協同工作。同時&#xff0c;Git也成為了開源項目的主要托管平臺之一。Git的開源項目意義重大&#xff0c;因為這種開源項目托管平臺可以幫助開發者將代碼和項目分享給全球的開發者&#xff0c;并且…

從0開始學習JavaScript--JavaScript元編程

JavaScript作為一門靈活的動態語言&#xff0c;具備強大的元編程能力。元編程是一種通過操作程序自身結構的編程方式&#xff0c;使得程序能夠在運行時動態地創建、修改、查詢自身的結構和行為。本文將深入探討JavaScript中元編程的各個方面&#xff0c;包括原型、反射、代理等…

2023亞太杯數學建模C題思路模型代碼

已完成C題思路代碼&#xff0c;文末名片獲取 C題是我們的一個數據分析問題&#xff0c;這個題目主要就是我們要去收集數據&#xff0c;清洗處理后進行分析。 問題1&#xff1a;分析影響中國新能源電動汽車發展的主要因素&#xff0c;建立數學模型&#xff0c;描述這些因素對中…

對未來新能源車測試工具的看法

汽車行業正在經歷變革的說法算是比較輕描淡寫的了&#xff0c;還記得我1983年加入這個行業時&#xff0c;行業聚焦點是引入發動機管理系統。當時還是以家庭掀背車為主的時代&#xff0c;發動機分析儀的體積像衣柜一樣大&#xff0c;還沒出現“CAN”通信協議。現在經常聽到我的導…

PHP預約上門回收廢品系統的代碼披露

PHP預約上門回收廢品系統的代碼披露 <?phpnamespace app\admin\controller;class Code {public function getTopDomainhuo(){error_reporting(0);$host $_SERVER["HTTP_HOST"];$matchstr "[^\\.]\\.(?:(" . $host . ")|\\w{2}|((" . $ho…

【第一部分:概述】ARM Realm Management Monitor specification

目錄 概述機密計算系統軟件組成MonitorRealmRealm Management Monitor (RMM)Virtual Machine (VM)HypervisorSecure Partition Manager (SPM)Trusted OS (TOS)Trusted Application (TA) Realm Management Monitor 參考文獻 概述 RMM是一個軟件組件&#xff0c;它構成了實現ARM…

機器學習筆記 - 復雜任務的CNN組合

基礎CNN架構可通過多種方式進行組合和擴展,從而解決更多、更復雜的任務。 1. 分類和定位 在分類和定位任務中,你不僅需要說出在圖像中找到的物體的類別,而且還需指出物體顯現在圖像中的邊界框坐標。這類任務假設在圖像中只有一個物體實例。 這個任務可通過在典型的分類網絡…

每日一題(LeetCode)----鏈表--兩數相加

每日一題(LeetCode)----鏈表–兩數相加 1.題目&#xff08;2. 兩數相加&#xff09; 給你兩個 非空 的鏈表&#xff0c;表示兩個非負的整數。它們每位數字都是按照 逆序 的方式存儲的&#xff0c;并且每個節點只能存儲 一位 數字。 請你將兩個數相加&#xff0c;并以相同形式返…

深入ReentrantReadWriteLock(一)

一、為什么要出現讀寫鎖 synchronized和ReentrantLock都是互斥鎖。 如果說有一個操作是讀多寫少的&#xff0c;還要保證線程安全的話。如果采用上述的兩種互斥鎖&#xff0c;效率方面很定是很低的。 在這種情況下&#xff0c;咱們就可以使用ReentrantReadWriteLock讀寫鎖去實現…