51單片機應用從零開始(七)·循環語句(if語句,swtich語句)

51單片機應用從零開始(一)-CSDN博客

51單片機應用從零開始(二)-CSDN博客

51單片機應用從零開始(三)-CSDN博客

51單片機應用從零開始(四)-CSDN博客

51單片機應用從零開始(五)·加減乘除運算-CSDN博客

51單片機應用從零開始(六)·邏輯運算-CSDN博客

目錄

?編輯

1.??用右移運算流水點亮 P1 口 8 位 LED

2.??用 if 語句控制 P0 口 8 位 LED 的流水方向

3.??用 swtich 語句的控制 P0 口 8 位 LED 的點亮狀態


1.??用右移運算流水點亮 P1 口 8 位 LED

????????C語言中的右移運算是將一個整數向右移動指定的位數。右移運算符用“>>”表示,其作用是將一個數的二進制表示向右移動指定的位數,并用0在左側填充。

例如:

int a = 10; // a的二進制表示為 00001010
a = a >> 2; // 將a向右移動2位,得到00100001,即4

????????在進行右移運算時,如果對有符號整數進行右移,則保留符號位。如果符號位是1,則在左側用1填充,如果符號位是0,則在左側用0填充。如果對無符號整數進行右移,則在左側用0填充。

例如:

int b = -10; // b的二進制表示為 11110110
b = b >> 2; // 對有符號整數進行右移,得到11111101,即-3
unsigned int c = 10; // c的二進制表示為 00001010
c = c >> 2; // 對無符號整數進行右移,得到00000010,即2

????????那么根據這一特性我們可以完成:

#include<reg51.h> //包含單片機寄存器的頭文件
/***************************** 
函數功能:延時一段時間
*****************************/ 
void delay(void) 
{ unsigned int n; for(n=0;n<30000;n++) ; 
} 
/***************************** 
函數功能:主函數
*****************************/ 
void main(void) 
{ unsigned char i; while(1) { P1=0xff; delay(); for(i=0;i<8;i++)//設置循環次數為 8 { P1=P1>>1; //每次循環 P1 的各二進位右移 1 位,高位補 0 delay(); //調用延時函數} } }

2.??用 if 語句控制 P0 口 8 位 LED 的流水方向

????????C語言中,if語句是一種條件語句,用于根據條件選擇是否執行特定的代碼塊。if語句通常具有以下形式:

if (condition) {//code block to execute if condition is true
}

????????其中,condition是一個布爾表達式,如果它的值為true,則執行if語句塊中的代碼。如果condition的值為false,則if語句塊中的代碼將被跳過。如果需要在條件不成立時執行特定的代碼塊,可以使用else關鍵字:

if (condition) {//code block to execute if condition is true
} else {//code block to execute if condition is false
}

????????如果有多個可能的條件需要使用if語句判斷并執行不同的代碼塊,則可以使用if-else if-else結構:

if (condition1) {//code block to execute if condition1 is true
} else if (condition2) {//code block to execute if condition1 is false and condition2 is true
} else {//code block to execute if both condition1 and condition2 are false
}

????????在if語句中也可以嵌套其他if語句,以實現更復雜的條件判斷。

????????在51單片機中,我們可以實現:

#include<reg51.h> //包含單片機寄存器的頭文件
sbit S1=P1^4; //將 S1 位定義為 P1.4 
sbit S2=P1^5; //將 S2 位定義為 P1.5 
/***************************** 
函數功能:主函數
*****************************/ 
void main(void) 
{ while(1) { if(S1==0) //如果按鍵 S1 按下P0=0x0f; //P0 口高四位 LED 點亮if(S2==0) //如果按鍵 S2 按下P0=0xf0; //P0 口低四位 LED 點亮} 
}

3.??用 swtich 語句的控制 P0 口 8 位 LED 的點亮狀態

????????switch語句是一種多分支選擇結構,它可以根據某個表達式的值來執行相應的代碼塊。下面是C語言中switch語句的基本語法:

switch(expression){case constant-expression1:statement(s);break;case constant-expression2:statement(s);break;/* 可以有任意數量的 case 語句 */default:statement(s);
}

switch語句的執行過程如下:

  1. 表達式expression的值被計算并與每個case常量表達式進行比較,如果匹配到一個case常量表達式,則執行該case下的語句塊,直到遇到break語句或者switch語句結束。
  2. 如果所有case表達式都與表達式expression的值不匹配,則執行default下的語句塊,如果沒有default語句,則直接結束switch語句。

以下是一個簡單的實例,演示了如何使用switch語句:

#include <stdio.h>
int main() {int grade = 85;switch(grade) {case 90 :printf("優秀\n" );break;case 80 :printf("良好\n" );break;case 70 :printf("中等\n" );break;case 60 :printf("及格\n" );break;default :printf("不及格\n" );}return 0;
}

輸出結果為:

良好

????????用 swtich 語句的控制 P0 口 8 位 LED 的點亮狀態

#include<reg51.h> //包含單片機寄存器的頭文件
sbit S1=P1^4; //將 S1 位定義為 P1.4 
/***************************** 
函數功能:延時一段時間
*****************************/ 
void delay(void) 
{ unsigned int n; for(n=0;n<10000;n++) ; 
} 
/***************************** 
函數功能:主函數
*****************************/ 
void main(void) 
{ unsigned char i; i=0; //將 i 初始化為 0 while(1) { if(S1==0) //如果 S1 鍵按下{ delay(); //延時一段時間if(S1==0) //如果再次檢測到 S1 鍵按下i++; //i 自增 1 if(i==9) //如果 i=9,重新將其置為 1 i=1; } switch(i) //使用多分支選擇語句{ case 1: P0=0xfe; //第一個 LED 亮break; case 2: P0=0xfd; //第二個 LED 亮break; case 3:P0=0xfb; //第三個 LED 亮break; case 4:P0=0xf7; //第四個 LED 亮break; case 5:P0=0xef; //第五個 LED 亮break; case 6:P0=0xdf; //第六個 LED 亮break; case 7:P0=0xbf; //第七個 LED 亮break; case 8:P0=0x7f; //第八個 LED 亮break; default: //缺省值,關閉所有 LED P0=0xff; } } 
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/165163.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165163.shtml
英文地址,請注明出處:http://en.pswp.cn/news/165163.shtml

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

相關文章

數倉成本下降近一半,StarRocks 存算分離助力云覽科技業務出海

成都云覽科技有限公司傾力打造了鳳凰瀏覽器&#xff0c;專注于為海外用戶提供服務&#xff0c;公司致力于構建一個全球性的數字內容連接入口&#xff0c;為用戶帶來更為優質、高效、個性化的瀏覽體驗。 作為數據驅動的高科技公司&#xff0c;從數據中挖掘價值一直是公司核心任務…

【Spring進階系列丨第四篇】學習Spring中的Bean管理(基于xml配置)

前言 在之前的學習中我們知道&#xff0c;容器是一個空間的概念&#xff0c;一般理解為可盛放物體的地方。在Spring容器通常理解為BeanFactory或者ApplicationContext。我們知道spring的IOC容器能夠幫我們創建對象&#xff0c;對象交給spring管理之后我們就不用手動去new對象。…

基于單片機的智能藍牙避障循跡小車

智能小車循跡與避障運動控制系統的設計 摘 要:本設計主要由STC89C52單片機來進行控制&#xff0c;通過輸入輸出兩個端口控制驅動模塊來調節電機的工作狀態。本設計預利用機器視覺&#xff0c;通過識別條帶狀路標實現自主導航且利用超聲波模塊實時檢測距離以實現避障功能&…

vue3 webSocket 封裝及使用

vue3 webSocket 封裝及使用 封裝 import { ref, onUnmounted } from vue; interface SocketOptions {heartbeatInterval?: number;reconnectInterval?: number;maxReconnectAttempts?: number; }class Socket {url: string;ws: WebSocket | null null;opts: SocketOption…

【Docker】從零開始:9.Docker命令:Push推送倉庫(Docker Hub,阿里云)

【Docker】從零開始&#xff1a;9.Docker命令:Push推送倉庫 知識點1.Docker Push有什么作用&#xff1f;2.Docker倉庫有哪幾種2.1 公有倉庫2.2 第三方倉庫2.3 私有倉庫2.4 搭建私有倉庫的方法有哪幾種 3.Docker公有倉庫與私有倉庫的優缺點對比 Docker Push 命令標準語法操作參數…

openEuler 22.03 LTS x86_64 cephadm 部署ceph18.2.0 未完成 筆記

環境 準備三臺虛擬機 10.47.76.94 node-1 10.47.76.95 node-2 10.47.76.96 node-3 下載cephadm [rootnode-1 ~]# yum install cephadm Last metadata expiration check: 0:11:31 ago on Tue 21 Nov 2023 10:00:20 AM CST. Dependencies resolved. Package …

酷開系統 | 酷開科技聚焦價值人群 助力營銷增長

2023年&#xff0c;是消費復蘇回暖的一年&#xff0c;市場中充溢著大量品牌重啟增長的機遇與實例。品牌商期望能夠把握住市場趨勢&#xff0c;通過營銷獲得確定性的業績提升&#xff0c;并在未來收獲長期穩定的增長。作為數字媒介的代表之一&#xff0c;OTT大屏營銷的屬性和價值…

Vue學習之路------指令

Vue指令 vue會根據不同的指令&#xff0c;針對標簽實現不同的功能 指令:帶有v-前綴的特殊標簽屬性 1&#xff1a;v-html&#xff1a;指令 <div v-html"msg"></div> 2&#xff1a;v-show 作用&#xff1a;控制元素顯示隱藏 語法&#xff1a;v-show&quo…

【SpringMVC】 對請求的不同響應

前言 本文學習如何運用不同的注解來返回不同的響應. 1.返回靜態頁面Controller 返回index.html頁面 Controller 和 RestController的區別 controller 只有加上這個注解,Spring才會幫我們管理這個代碼.后續我們訪問時才能訪問到. RestController 等同于 Controller ResponseBo…

UML建模圖文詳解教程01——Enterprise Architect的安裝與使用

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Enterprise Architect概述 官方網站&#xff1a;https://www.sparxsystems.cn/products/ea/&#xff1b;圖示如下&#xff1a; Enterprise Architect是一個全功能的、基于…

B033-Servlet交互 JSP

目錄 ServletServlet的三大職責跳轉&#xff1a;請求轉發和重定向請求轉發重定向匯總請求轉發與重定向的區別用請求轉發和重定向完善登錄 JSP第一個JSP概述注釋設置創建JSP文件默認字符編碼集 JSP的java代碼書寫JSP的原理三大指令九大內置對象改造動態web工程進行示例內置對象名…

2.HTML入門

目錄 一.HTML介紹 二.HTML常用標簽 2.1 標題標簽 2.2 段落標簽 2.3 超鏈接標簽 2.4 圖片標簽 2.5 換行與空格 2.6 布局標簽 2.7 列表標簽 2.8 表單標簽 一.HTML介紹 定義&#xff1a;將內容顯示在網頁&#xff0c;用來描述網頁的一種語言&#xff0c;負責網頁的架構…

Adiponectin 脂聯素 ; T-cadherin +exosome

T-cadherin Adiponectin exosome T-cadherin Adiponectin exosome 代謝綜合征中 外泌體、脂肪組織 和 脂聯素 的器官間通訊-2019.pdf

【華為OD】C卷真題 100%通過:數組去重和排序 C/C++實現

華為OD 數組去重和排序 C源碼實現&#xff0c;100%通過 目錄 題目描述&#xff1a; 示例1 代碼實現&#xff1a; 題目描述&#xff1a; 給定一個亂序的數組&#xff0c;刪除所有的重復元素&#xff0c;使得每個元素只出現一次&#xff0c;并且按照出現的次數從高到低進行排…

C語言之字符串函數

C語言之字符串函數 文章目錄 C語言之字符串函數1. strlen的使用和模擬實現1.1 strlen的使用1.2 strlen的模擬實現 2. strcpy的使用和模擬實現2.1 strcpy的使用2.2 strncpy的使用2.3 strcpy的模擬實現 3. strcat的使用和模擬實現3.1 strcat的使用3.2 strncat3.3 strcat的模擬實現…

C語言--每日五道選擇題--Day23

第一題 1. 已知int i1, j2;&#xff0c;則表達式ij的值為&#xff08; &#xff09; A&#xff1a;1 B&#xff1a;2 C&#xff1a;3 D&#xff1a;4 答案及解析 C 本題考查的是前置和后置的優先級&#xff0c;后置的優先級是高于前置的&#xff0c;所以這個表達式就可以轉變為…

【Spark源碼分析】事件總線機制分析

Spark事件總線機制 采用Spark2.11源碼&#xff0c;以下類或方法被DeveloperApi注解額部分&#xff0c;可能出現不同版本不同實現的情況。 Spark中的事件總線用于接受事件并提交到對應的監聽器中。事件總線在Spark應用啟動時&#xff0c;會在SparkContext中激活spark運行的事件總…

什么是持續集成的自動化測試?

持續集成的自動化測試 如今互聯網軟件的開發、測試和發布&#xff0c;已經形成了一套非常標準的流程&#xff0c;最重要的組成部分就是持續集成&#xff08;Continuous integration&#xff0c;簡稱CI&#xff0c;目前主要的持續集成系統是Jenkins&#xff09;。 那么什么是持…

docker 安裝常用環境

一、 安裝linux&#xff08;完整&#xff09; 目前為止docker hub 還是被封著&#xff0c;用阿里云、騰訊云鏡像找一找版本直接查就行 默認使用latest最新版 #:latest 可以不寫 docker pull centos:latest # 拉取后查看 images docker images #給鏡像設置標簽 # docker tag […

FIB表與快速轉發表工作原理

在一張路由表中&#xff0c;當存在多個路由項可同時匹配目的IP地址時&#xff0c;路由查找進程會選擇掩碼最長的路由項用于轉發&#xff0c;即最長匹配原則。因為掩碼越長&#xff0c;所處的網段范圍就越小&#xff0c;網段的范圍越小&#xff0c;就越能快速的定位到PC機的具體…