在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

51單片機(jī)的控制語句

汽車電子技術(shù) ? 來源:嵌入式悅翔園 ? 作者: JamesBin ? 2023-02-17 14:53 ? 次閱讀

Cx51流程控制共有3種基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)以及循環(huán)結(jié)構(gòu)。

一、順序結(jié)構(gòu)

順序結(jié)構(gòu)是最基本、最簡(jiǎn)單的編程結(jié)構(gòu),程序按先后順序執(zhí)行指令代碼。

下圖是8051單片機(jī)的P0口和P1口上分別連接了8個(gè)LED,請(qǐng)分別用P0和P1口顯示加法125+34和減法176-98的運(yùn)算結(jié)果

圖片

#include
int main(void)  
{ 
 unsigned char a=125,b=34,c=176,d=98;
 P1=a+b; //加法運(yùn)算結(jié)果送P1端口,P1=159=1001 1111B
 P0=c-d;  //減法運(yùn)算結(jié)果送P0端口,P0=78=0100 1110B
 while(1); //循環(huán)等待,防止主程序退出后單片機(jī)跑飛
 }

二、選擇結(jié)構(gòu)

2.選擇結(jié)構(gòu)

(1)if語句

if語句用于根據(jù)條件判定結(jié)果決定執(zhí)行的語句。if語句有三種基本形式:

if(表達(dá)式)
    {語句組}

說明:如果“表達(dá)式”為真,則執(zhí)行花括號(hào)中的語句組,否則跳過花括號(hào)執(zhí)行下面的語句。

if(表達(dá)式)
     {語句組1}
    else
     {語句組2}

說明:如果“表達(dá)式”真,則執(zhí)行語句組1,否則執(zhí)行語句組2。

if(表達(dá)式1)
      {語句1}
     else if(表達(dá)式2)
      {語句組2 }
     else if(表達(dá)式3)
      {語句組3}
     else if(表達(dá)式m)
      {語句組m}
     else
      {語句組n}

說明:如果“表達(dá)式1”為真,則執(zhí)行“語句組1”,否則如果“表達(dá)式2”為真,則執(zhí)行“語句組2”…,如果所有的表達(dá)式都不滿足,則執(zhí)行語句組n。

同圖4-2,用if語句根據(jù)54/18的計(jì)算結(jié)果選擇P0口8位LED的狀態(tài)。

圖片

#include  //包含單片機(jī)寄存器的頭文件
int main(void)
{ 
   unsigned char a=54,b=18;
   if (a/b==1)P0=0xfe; //第一個(gè)LED亮
   else if (a/b==2) P0=0xfd;  //第二個(gè)LED亮
   else if (a/b==3) P0=0xfb; //第三個(gè)LED亮
   else if (a/b==4) P0=0xf7; //第四個(gè)LED亮
   else if (a/b==5) P0=0xef;  //第五個(gè)LED亮 
   else if (a/b==6) P0=0xdf;  //第八個(gè)LED亮      
   else if (a/b==7) P0=0xbf;  //第七個(gè)LED亮          
   else if (a/b==8) P0=0x7f;  //第八個(gè)LED亮       
   else P0=0xff;  //缺省值,關(guān)閉所有LED 
   while(1); 
 }

(2)switch/case語句

根據(jù)表達(dá)式的值決定要執(zhí)行的語句組,用于實(shí)現(xiàn)多中選一,形式如下:

switch(表達(dá)式)
 {
case常量表達(dá)式1//如果1滿足,則執(zhí)行語句組1
  語句組1;
  break;          //跳出switch結(jié)構(gòu)
case常量表達(dá)式2//如果2滿足,則執(zhí)行語句組2
 語句組2;
  break;          //跳出switch結(jié)構(gòu)default:          //條件都不滿足時(shí),執(zhí)行語句組n
 語句組n;
  }

同圖4-2,用swtich語句根據(jù)54/18的計(jì)算結(jié)果選擇P0口8位LED的狀態(tài)

圖片

#include  //包含單片機(jī)寄存器的頭文件
int main(void)
{ 
  unsigned char a=56,b=18;
  switch(a/b)   //使用多分支選擇語句
 {
     case 1: P0=0xfe; break;   //第一個(gè)LED亮
   case 2: P0=0xfd; break;   //第二個(gè)LED亮
   case 3: P0=0xfb; break;   //第三個(gè)LED亮
   case 4: P0=0xf7; break;   //第四個(gè)LED亮
   case 5: P0=0xef; break;   //第五個(gè)LED亮      
   case 6:P0=0xdf; break;    //第六個(gè)LED亮       
   case 7:P0=0xbf; break;    //第七個(gè)LED亮          
   case 8:P0=0x7f; break;    //第八個(gè)LED亮       
   default: P0=0xff;  //缺省值,關(guān)閉所有LED 
 }   
 while(1);
}

1、for循環(huán)

for 循環(huán)結(jié)構(gòu)用于按指定的次數(shù)循環(huán)執(zhí)行一組語句,格式如下:

for(表達(dá)式1;表達(dá)式2;表達(dá)式3)
{語句;}

for循環(huán)語句執(zhí)行過程如下:

(1)先執(zhí)行表達(dá)式1,一般是對(duì)循環(huán)變量賦初值;

(2)執(zhí)行表達(dá)式2,若表達(dá)式2結(jié)果為真,則執(zhí)行循環(huán)體語句,并求解表達(dá)式

3(一般是改變循環(huán)變量的值);然后再次執(zhí)行表達(dá)式2;并判斷結(jié)果真假

(3)若表達(dá)式2結(jié)果為假,則退出for循環(huán)。

三、循環(huán)結(jié)構(gòu)

while循環(huán)

while循環(huán)語句先判斷條件真假,若表達(dá)式為真,則執(zhí)行花括號(hào)內(nèi)的語句組,否則終止循環(huán),格式如下:

while(表達(dá)式)
      {語句組}

同圖4-3,用while循環(huán)計(jì)算7的階乘并送P1和P0口顯示結(jié)果。

圖片

#include  //包含單片機(jī)寄存器的頭文件
int main(void)
{ 
  unsigned char i=1;
  unsigned int s=1;  
  while(i<=7)
  {
     s=s*i;//計(jì)算階乘
     i++;  //i自增運(yùn)算
  }
  P1=s/256;   //高8位送P1顯示
  P0=s%256;   //低8位送P0顯示
  while(1);
}

do while 循環(huán)

先執(zhí)行花括號(hào)內(nèi)的語句組,然后執(zhí)行表達(dá)式,若結(jié)果為真,則重復(fù)執(zhí)行花括號(hào)內(nèi)的語句組,否則終止循環(huán),格式如下:

do
  {語句組}
while(表達(dá)式);

根據(jù)下圖用do while循環(huán)計(jì)算7的階乘并送P1和P0口顯示結(jié)果。

圖片

#include  //包含單片機(jī)寄存器的頭文件
int main(void)
{ 
  unsigned char i=1;
  unsigned int s=1;  
 do
  {
     s=s*i;//計(jì)算階乘
     i++;  //i自增運(yùn)算
    } while(i<=7);
  P1=s/256; //高8位送P1顯示
  P0=s%256; //低8位送P0顯示
  while(1);
}

四、數(shù)組

1.一維數(shù)組

(1)一維數(shù)組的定義方式為:

數(shù)據(jù)類型 數(shù)組名 [常量表達(dá)式];

例如定義有3個(gè)元素字符型數(shù)組m:

charm[3];

m的3個(gè)元素分別是m[0], m[1], m[2]。數(shù)組的類型指數(shù)組元素的取值類型。對(duì)于同一個(gè)數(shù)組,其所有元素的數(shù)據(jù)類型都是相同的。

(2)一維數(shù)組的初始化

數(shù)組初始化是指在數(shù)組定義時(shí)給數(shù)組元素賦予初值。

例如:

int m[3]={ 0,1,2};

相當(dāng)于a[0]=0,a[1]=1,a[2]=2。

當(dāng){ }中值的個(gè)數(shù)少于元素個(gè)數(shù)時(shí),只給前面部分元素賦值,其他元素自動(dòng)賦0值。

例如:

int m[3]={0,1}

(3)一維數(shù)組元素的引用

數(shù)組必須預(yù)先定義才能使用。數(shù)組只能逐個(gè)地使用各元素,而不能一次引用整個(gè)數(shù)組。例如,輸出有10個(gè)元素的數(shù)組必須使用循環(huán)語句逐個(gè)輸出各下標(biāo)變量:

for(i=0;i<3; i++)
   printf("%d",m[i]);

而不能用一個(gè)語句輸出整個(gè)數(shù)組。因此,下面的寫法是錯(cuò)誤的:

printf("%d",m);

用一維數(shù)組實(shí)現(xiàn)流水點(diǎn)亮P0口的8位LED

圖片

int main(void) //主函數(shù)
{ 
  unsigned char i;
  unsigned char code Tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //定義無符號(hào)字符型數(shù)組 
  while(1)
  {
   for(i=0;i<8;i++)
      {
        P0=Tab[i];//依次引用數(shù)組元素,并將其送P0口顯示
        delay();//調(diào)用延時(shí)函數(shù)
     }
  }
}

2.二維數(shù)組

二維數(shù)組是以行列矩陣的形式存儲(chǔ)數(shù)據(jù)。

** (1)二維數(shù)組定義**

數(shù)據(jù)類型 數(shù)組名[下標(biāo)1][下標(biāo)2];

第一個(gè)下標(biāo)代表行,第二個(gè)下標(biāo)代表列。例如語句 int a[2][3] 定義了二維整形數(shù)組,共有2行3列6個(gè)元素。

(2)二維數(shù)組的初始化

可以采用以下兩種方式初始化:

按先行后列的存儲(chǔ)順序整體賦值,例如:

int a[2][3]={0,1,2,3,4,5}

按每行分別賦值,例如:

int a[2][3]={{0,1,2},{3,4,5}};

用二維數(shù)組實(shí)現(xiàn)流水點(diǎn)亮P0口的8位LED。

圖片

int main(void)
{ 
  unsigned char i,j;
  unsigned char codeTab[2][4]={{0xfe,0xfd,0xfb,0xf7},{0xef,0xdf,0xbf,0x7f}}; //定義無符  //號(hào)字符型數(shù)組 
  while(1)
  {
   for(i=0;i<2;i++)
   for(j=0;j<4;j++)
      {
        P0=Tab[i][j];//依次引用數(shù)組元素,并將其送P0口顯示
        delay();//調(diào)用延時(shí)函數(shù)
     }
  }
}

變量的指針就是變量的地址。在C語言中,允許用一個(gè)變量來存放指針,這種變量稱為指針變量。

指針變量是一種特殊的變量,它也和一般變量一樣,具有變量名、類型和值,但它的值就是變量所存放的地址。

通過指針對(duì)變量進(jìn)行操作是間接操作,比直接操作變量更費(fèi)時(shí)間,且不夠直觀,但可以通過靈活運(yùn)用指針使程序代碼更為簡(jiǎn)潔、有效。

四、指針

1、指針變量的定義

指針變量同普通變量一樣,使用之前要進(jìn)行定義。指針變量定義的一般形式為:

數(shù)據(jù)類型 *變量名;

其中,數(shù)據(jù)類型表示本指針變量所指向變量的數(shù)據(jù)類型,*表示這是一個(gè)指針變量。

例如:定義:int*point,表示point指向一個(gè)整型變量,但point具體指向哪一個(gè)整型變量,取決于point中所存儲(chǔ)的地址。一個(gè)指針變量只能指向同類型的變量,如上述point 只能指向整形變量,不能指向一個(gè)字符變量。

2、指針變量的引用

指針變量在使用之前必須賦予具體的地址,使用未經(jīng)賦值的指針變量會(huì)引起嚴(yán)重后果。指針變量的引用有兩個(gè)重要運(yùn)算符:

&:取地址運(yùn)算符;

*:指針運(yùn)算符(或稱“間接訪問” 運(yùn)算符)。

在指針變量定義中所出現(xiàn)的“ ”是類型說明符,表示其后的變量是指針類型,而指針運(yùn)算符“ ”則出現(xiàn)在表達(dá)式中,用以表示指針指向的變量值。

地址運(yùn)算符&用來取出變量的地址。其形式為:

&變量名;

?指針運(yùn)算符*用來取出指針指向變量的值,其形式為:

*指針變量名;
inti,j;
int *point;
point= &i;
j=*point;

表示取出變量i的值賦予變量j,與語句j=i的效果相同。對(duì)*point的任何操作與直接對(duì)變量i的操作效果相同。

3、數(shù)組指針

一個(gè)變量有一個(gè)地址,一個(gè)數(shù)組包含若干元素,每個(gè)數(shù)組元素都在內(nèi)存中占用存儲(chǔ)單元,它們都有相應(yīng)的地址。數(shù)組的指針是指數(shù)組的起始地址,數(shù)組元素的指針是數(shù)組元素的地址。

一個(gè)數(shù)組是由連續(xù)的一塊內(nèi)存單元組成的。數(shù)組名就是這塊連續(xù)內(nèi)存單元的首地址。一個(gè)數(shù)組也是由各個(gè)數(shù)組元素(下標(biāo)變量)組成的。每個(gè)數(shù)組元素按其類型不同占有幾個(gè)連續(xù)的內(nèi)存單元。一個(gè)數(shù)組元素的首地址也是指它所占有的幾個(gè)內(nèi)存單元的首地址。

定義一個(gè)指向數(shù)組元素的指針變量,與定義普通變量的指針相同。例如:

intm[]={1,2,3};4int*p;4p=&m[0];

經(jīng)上述定義后,p就是數(shù)組m的指針。因?yàn)閿?shù)組名代表數(shù)組的首地址,也就是第一個(gè)元素的地址,因此下面兩個(gè)語句等價(jià):

p=&m[0];
p=m;

p指向數(shù)組m的首地址后,p+i就是數(shù)組的元素m[i]。

例題:用一維數(shù)組實(shí)現(xiàn)流水點(diǎn)亮P0口的8位LED。

圖片

int main(void)
{ 
 unsigned char i;
 unsigned char code Tab[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; /*定義無符號(hào)字符型數(shù)組*/ 
 unsigned char *p;
  p=&Tab[0];/*定義指針變量并指向Tab數(shù)組,也可寫為unsigned char   *p=Tab */
 while(1)
 {
   for(i=0;i<8;i++)
   {
        P0=*(p+i);//通過指針變量依次引用數(shù)組元素,并將其送P0口顯示
        delay();//調(diào)用延時(shí)函數(shù)
   }
 }
}

指向二維數(shù)組的指針變量的說明形式為

類型說明符 (*指針變量名)[長(zhǎng)度];

“長(zhǎng)度”是二維數(shù)組的列數(shù)。二維數(shù)組的每一行都代表一個(gè)一維數(shù)組,該一維數(shù)組的長(zhǎng)度就是二維數(shù)組的列數(shù)。若該指針變量指向二組數(shù)組A[m][n]的首地址,則 (指針變量名+i)就是A[i],而A[i]是一維數(shù)組A[i][n]的首地址, (*(指針變量名+i)+j)就是A[i][j]的值。

例題:用二維數(shù)組實(shí)現(xiàn)流水點(diǎn)亮P0口的8位LED。

圖片

int main(void)
{ 
 unsigned char i,j;
 unsigned char codeTab[2][4]={{0xfe,0xfd,0xfb,0xf7},{0xef,0xdf,0xbf,0x7f}}; //定
                                           //義無符號(hào)字符型數(shù)組
 unsigned char (*p)[4]; //定義二維數(shù)組指針
 p=Tab;//指向二維數(shù)組首地址
 while(1)
 {
   for(i=0;i<2;i++)
    for(j=0;j<4;j++)
   {
        P0=*(*(p+i)+j);//依次引用數(shù)組元素,并將其送P0口顯示
        delay();//調(diào)用延時(shí)函數(shù) 
   }
 }
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    單片機(jī)c語言教程第十三章--C51循環(huán)語句

    單片機(jī)c語言教程第十三課 C51循環(huán)語句 循環(huán)語句是幾乎每個(gè)程序都會(huì)用到的,它的作用就是用來實(shí)現(xiàn)需要反復(fù)進(jìn)行多次的操 作。如一個(gè) 12M 的 51
    發(fā)表于 04-15 09:42 ?1730次閱讀

    單片機(jī)C語言教程-基礎(chǔ)語句

    單片機(jī)C語言教程-基礎(chǔ)語句   C語言入門之基礎(chǔ)語句  從程序流程的角度來看,程序可以分為三種基本結(jié)構(gòu),即順序結(jié)構(gòu)、分支
    發(fā)表于 03-27 17:15 ?3150次閱讀

    51單片機(jī)控制舵機(jī)

    利用簡(jiǎn)單的51單片機(jī)的PWM的脈沖控制信號(hào)來很方便的控制機(jī)舵機(jī)
    發(fā)表于 11-10 15:25 ?103次下載

    51單片機(jī)教程第3講-控制引腳

    51單片機(jī)教程第1講中,我已經(jīng)說過,學(xué)單片機(jī)就是兩個(gè)內(nèi)容,一個(gè)是學(xué)習(xí)控制單片機(jī)引腳,一個(gè)是學(xué)習(xí)單片機(jī)內(nèi)部寄存器的配置。這一講,來學(xué)習(xí)如何
    發(fā)表于 12-13 13:35 ?3850次閱讀

    51單片機(jī)教程之80C51單片機(jī)的C語言程序設(shè)計(jì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是51單片機(jī)教程之80C51單片機(jī)的C語言程序設(shè)計(jì)資料概述主要內(nèi)容包括了: 單片機(jī)C語言概述 C
    發(fā)表于 12-05 11:53 ?299次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>教程之80C<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的C語言程序設(shè)計(jì)資料概述

    什么是51單片機(jī)?又該如何自學(xué)51單片機(jī)

    51 單片機(jī)是目前使用最多的單片機(jī)之一,那么什么是 51 單片機(jī)呢?作為新手,又該如何自學(xué) 51
    的頭像 發(fā)表于 11-03 21:14 ?7164次閱讀

    51單片機(jī)是什么?應(yīng)該如何學(xué)習(xí)51單片機(jī)

    51 單片機(jī)是目前使用最多的單片機(jī)之一,那么什么是 51 單片機(jī)呢?作為新手,又該如何自學(xué) 51
    發(fā)表于 12-23 07:57 ?73次下載

    基于51單片機(jī)的自動(dòng)尋跡小車控制的設(shè)計(jì)

    基于51單片機(jī)的自動(dòng)尋跡小車控制的設(shè)計(jì)(語音單片機(jī))-該文檔為基于51單片機(jī)的自動(dòng)尋跡小車
    發(fā)表于 07-22 10:46 ?51次下載
    基于<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>的自動(dòng)尋跡小車<b class='flag-5'>控制</b>的設(shè)計(jì)

    51單片機(jī)(一)—— 51單片機(jī)簡(jiǎn)介

    一、51單片機(jī)標(biāo)識(shí)信息 通常我們所說的51單片機(jī)是指以51內(nèi)核擴(kuò)展出的單片機(jī)。生產(chǎn)
    發(fā)表于 11-11 18:06 ?245次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>(一)—— <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>簡(jiǎn)介

    51單片機(jī)如何跳出wile循環(huán)_51單片機(jī)(九)匯編指令

    設(shè)計(jì)數(shù)碼管Chenglin Li:51單片機(jī)(四)匯編語言設(shè)計(jì)定時(shí)器Chenglin Li:51單片機(jī)(五)利用定時(shí)器實(shí)現(xiàn)流水燈的控制Che
    發(fā)表于 11-22 20:21 ?73次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>如何跳出wile循環(huán)_<b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>(九)匯編指令

    基于51單片機(jī)的電機(jī)控制設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)的電機(jī)控制設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 01-03 11:19 ?4次下載

    單片機(jī)中for語句的運(yùn)用

    單片機(jī)中的for語句是一種常見的循環(huán)控制結(jié)構(gòu),用于重復(fù)執(zhí)行一段代碼塊,可以簡(jiǎn)化程序的編寫和減少代碼量。本文將詳細(xì)介紹單片機(jī)中for語句的運(yùn)用
    的頭像 發(fā)表于 01-05 14:02 ?2459次閱讀

    單片機(jī)if是什么語句

    單片機(jī)中的if語句是一種條件語句,用于根據(jù)不同的條件執(zhí)行不同的代碼塊。在程序執(zhí)行過程中,條件語句用來決定是否執(zhí)行特定的代碼段。在單片機(jī)編程中
    的頭像 發(fā)表于 01-05 14:04 ?1811次閱讀

    基于51單片機(jī)的鍋爐控制設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《基于51單片機(jī)的鍋爐控制設(shè)計(jì).rar》資料免費(fèi)下載
    發(fā)表于 01-12 10:22 ?3次下載

    51單片機(jī)流水燈制作

    ?流水燈是學(xué)習(xí)51單片機(jī)的一個(gè)基本項(xiàng)目,是我們對(duì)單片機(jī)IO口輸出認(rèn)識(shí)的基本項(xiàng)目。當(dāng)然學(xué)會(huì)了花樣流水燈也很好玩。 下面就分享一種51單片機(jī)流水
    的頭像 發(fā)表于 02-26 10:06 ?1632次閱讀
    <b class='flag-5'>51</b><b class='flag-5'>單片機(jī)</b>流水燈制作
    主站蜘蛛池模板: 国产在线视频你懂得| 狠狠色丁香| 免费的国语一级淫片| 久久性感美女视频| 国产成年美女毛片80s| 97精品在线| 天堂网www中文天堂在线| 久久午夜精品| 欧美精品激情| 久久国产美女免费观看精品| 在线观看精品视频看看播放| 国产成人啪午夜精品网站男同| 在线视频 一区二区| 99在线热播精品免费| 四虎影院在线免费播放| 欧美大片xxxxbbbb| 白丝丝袜高跟国产在线视频| 人人天天爱天天做天天摸| 欧美激情一欧美吧| 三级不卡| 国产片一级特黄aa的大片| 天天操狠狠干| 免费看啪啪网站| 亚洲图色视频| 男人的天堂在线视频| 伊人网在线视频| 国产亚洲精品aaa大片| 日本不卡在线观看| 色优优| 二级黄绝大片中国免费视频 | 天天狠天天透| 男人操女人视频在线观看| 色牛网| 在线天堂在线| 亚洲一区二区精品推荐| 偷偷要色偷偷| 国产特级| 大美女久久久久久j久久| 99视频热| 7777色鬼xxxx欧美色夫| 黄色大片视频在线观看|