




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
PAGEPAGE9教案紙第1頁學科單片機C51語句匯總檢查授課班級2授課時數6教具授課時間教學方法演示、講解、教學目的掌握C51語句格式和使用方法和范圍教學重點和難點C51語句格式和使用方法和范圍復習提問教學內容、方法、過程和板書設計教學追記一、if語句if語句是用來判定所給定的條件是否滿足根據判定的結果(真或假)決定執行給出的兩種操作之一。C語言提供了三種形式的if語句1.if(表達式)語句如果表達式的結果為真,則執行語句,否則不執行2.if(表達式)語句1else語句2如果表達式的結果為真,則執行語句1,否則執行語句23.if(表達式1)語句1elseif(表達式2)語句2elseif(表達式3)語句3…elseif(表達式m)語句melse語句n這條語句執行如圖2所示。上述程序中的如下語句:if((KeyV|0xc3)==0xff)//無鍵按下return(0);教案紙附頁第2頁教學內容、方法、過程和板書設計教學追記一種if語句的應用:該語句中“|”符號是C語言中的位運算符,按位相或的意思,相當于匯編語言中“ORL”指令,將讀取的P3口的值KeyV與0xc3(即11000011B)按位或,如果結果為0xff(即11111111B)說明沒有鍵被按下,因為中間4位接有按鍵,如果有鍵按下,那么P3口值的中間4位中必然有一位或更多位是“0”。該語句中的“return(0)”是返回之意,相當于匯編語言中的“ret”指令,通過該語句可以帶返回值,即該號中的數值,返回值就是這個函數的值,在這個函數被調用時,用了如下的形式:KValue=Key();因此,返回的結果是該值被賦給Kvalue這個變量。因此,如果沒有鍵被按下,則直接返回,并且Kvalue的值將變為0。如果有鍵被按下,那么return(0)將不會被執行。程序其他地方還有這樣的用法,請注意觀察與分析。程序中:if(Start){…燈流動顯示的代碼}elseP1=0xff;//否則燈全滅是if語句的第二種用法,其中Start是一個位變量,該變量在main函數的中被定義,并賦以初值0,該變量在按鍵K1被按下后置為1,而K2按下后被清為0,用來控制燈流動是否開始。這里就是判斷該變量并決定燈流動是否開始的代碼,觀察if后面括號中的寫法,與其他語言中寫法很不一樣,并沒有一個關系表達式,而僅僅只有一個變量名,C根據這個量是0還是1來決定程序的走向,如果為1則執行燈流動顯示的代碼,如果為0,則執行P1=0xff;語句。可見,在C語言中,數據類型的概念比其他很多的編程語言要“弱化”,或者說C更著重從本質的角度去考慮問題,if后面的括號中不僅可以是關系表達式,也可以是算術表達式,還可以就是一個變量,甚至是一個常量,不管怎樣,C總是根據這個表達式的值是零還是非零來決定程序的走向,這個特點是其他中所沒有的,請注意理解。if語句的第三種用法在本程序中沒有出現,下面我們舉一例說明。在上述的鍵盤處理函數Key中,如果沒鍵被按下,返回值是0,如果有鍵被按下,經過去鍵抖的處理,將返回鍵值,程序中的“return(KeyV);”即返回鍵值。當K1被按下(P3.2接地)時,返回值是0xfb(11111011B),而K2被按下(P3.3接地)時,返回值是0xf7(11110111B),K3被按下(P3.4接地)時,返回值是0xef(11101111B),K4被按下(P3.5接地)時,返回值是0xdf(11011111B),該值將被賦給主程序中調用鍵盤程序的變量KValue。程序用了另一種選擇結構switch進行處理,關于switch將在稍后介紹。下面用if語句來改寫:教案紙附頁第3頁教學內容、方法、過程和板書設計教學追記if(KValue==0xfb){Start=1;}elseif(KValue==0xf7){Start=0;}elseif(KValue==0xef){UpDown=1;}elseif(KValue==0xdf){UpDown=0;}else{//意外處理}……if(KValue==0xfb){Start=1;}elseif(KValue==0xf7){Start=0;}elseif(KValue==0xef){UpDown=1;}elseif(KValue==0xdf){UpDown=0;}else{//意外處理}……程序中第一條語句判斷Kvalue是否等于0xfb,如果是就執行Start=1;執行完畢即退出if語句,執行if語句下面的程序,如果Kvalue不等于0xfb就轉去下一個elseif即判斷Kvalue是否等于0xf7,如果等于則執行Start=0;,并退出if語句…這樣一直到最后一個elseif后面的條件判斷完畢為止,如果所有的條件都不滿足,那么就去執行else后面的語句(通常這意味著出現了異常,在這里來統一處理這種異常情況)。二、if語句的嵌套在if語句中又包含一個或多個語句稱為if語句的嵌套。一般形式如下if()if()語句1else語句2elseif()語句3教案紙附頁第4頁教學內容、方法、過程和板書設計教學追記else語句4應當注意if與else的配對關系,else總是與它上面的最近的if配對。如果寫成if()if()語句1else語句2編程者的本意是外層的if與else配對,縮進的if語句為內嵌的if語句,但實際上else將與縮進的那個if配對,因為兩者最近,從而造邁岐義。為避免這種情況,建議編程時使用大括號將內嵌的if語句括起來,這樣可以避免出現這樣的問題。三、swich語句當程序中有多個分支時,可以使用if嵌套實現,但是當分支較多時,則嵌套的if語層數多,程序冗長而且可讀性降低。C語言提供了switch語句直接處理多分支選擇。Switch的一般形式如下:switch(表達式){case常量表達式1:語句1case常量表達式2:語句2……case常量表達式n:語句ndefault:語句n+1}說明:switch后面括號內的“表達式”,ANSI標準允許它為任何類型;當表達式的值與某一個case后面的常量表達式相等時,就執行此case后面的語句,若所有的case中的常量表達式的值都沒有與表達式值匹配的,就執行default后面的語句;每一個case的常量表達式的值必須不相同;各個case和default的出現次序不影響執行結果。另外特別需要說明的是,執行完一個case后面的語句后,并不會自動跳出switch,轉而去執行其后面的語句,如上述例子中如果這么寫switch(KValue){case0xfb:Start=1;case0xf7:Start=0;case0xef:UpDown=1;case0xdf:UpDown=0;}if(Start){……}假如KValue的值是0xfb,則在轉到此處執行“Start=1;”后,并不是轉去執行switch語句下面的if語句,而是將從這一行開始,依次執行下面的語句即“Start=0;”、“UpDown=1;”“UpDown=0;”,顯然,這樣不能滿足要求,因此,通常在每一段case的結束加入“break;”語句,使流程序退出switch結構,即終止switch語句的執行。教案紙附頁第5頁教學內容、方法、過程和板書設計教學追記四、while語句While語句用到實現“當型”循環結構,其一般形式如下:while(表達式)語句當表達式為非0值(真)時,執行while語句中的內嵌語句。其特點是:先判斷表達式,后執行語句。在上述例子中,表達式使用了一個常數“1”,這是一個非零值,即“真”,條件總是滿足,語句總是會被執行,構成了無限循環。下面再舉一例說明:例4-2:當K1鍵被按下時,流水燈工作,否則燈全部熄滅。#include"reg51.h"#include"intrins.h"http://該文件包含有_crol_(…)函數的說明voidmDelay(unsignedintDelayTime){unsignedintj=0;for(;DelayTime>0;DelayTime--){for(j=0;j<125;j++){;}}}voidmain(){unsignedcharOutData=0xfe;while(1){P3|=0x3c;while((P3|0xfb)!=0xff){P1=OutData;OutData=_crol_(OutData,1);//循環左移mDelay(1000);/*延時1000毫秒*/}P1=0xff;}}程序分析:這個程序中的第二個while語句中的表達式用來判斷K1鍵是否被按下,如被按下,則執行循環體內的程序,否則執行P1=0xff;程序行。雖然整個程序是在一個無限循環過程中,但是由于外界條件的變化使得程序執行的過程發生了變化。五、do-while語句do-while語句用來實現“直到型”循環,特點是先執行循環體,然后判斷循環條件是否成立。其一般形式如下:do循環體語句while(表達式)對同一個問題,既可以用while語句處理,也可以用do-while語句處理。但是這兩個語句是有區別的,下面我們用do-while語句改寫例2。教案紙附頁第6頁教學內容、方法、過程和板書設計教學追記例:用do-while語句實現如下功能:K1按下,流水燈工作,K2松開,燈全熄滅。#include"reg51.h"#include"intrins.h"http://該文件包含有_crol_(…)函數的說明voidmDelay(unsignedintDelayTime){unsignedintj=0;for(;DelayTime>0;DelayTime--){for(j=0;j<125;j++){;}}}voidmain(){unsignedcharOutData=0xfe;while(1){P3|=0x3c;do{P1=OutData;OutData=_crol_(OutData,1);//循環左移mDelay(1000);/*延時1000毫秒*/}while((P3|0xfb)!=0xff)P1=0xff;}}程序分析:這個程序除主程序中將while用do-while替代外,沒有其他的變化,初步設想,如果while()括號中的表達式為“真”即K1鍵被按下,應該執行程序體,否則不執行,效果與例4-2相同。但是事實上,實際做這個練習就會發現,不論K1是否被按下,流水燈都在工作。為何會有這么樣的結果呢?單步運行程序可以發現,如果K1鍵被按下,的確是在執行循環體內的程序,與設想相同。而當K1沒有被按下時,按設想,循環體內的程序不應該被執行,但事實上,do后面的語句至少要被執行一次才去判斷條件是否成立,所以程序依然會去執行do后的循環體部分,只是在判斷條件不成立(K1沒有被按下)后,轉去執行P1=0xff;然后又繼續循環,而下一次循環中又會先執行一次循環體部分,因此,K1是否被按下的區別僅在于“P1=0xff;”這一程序行是否會被執行到。六、for語句C語言中的for語句使用最為靈活,不僅可以用于循環次數已經確定的情況,而且可以用于循環次數不確定而只給出循環結束條件的情況。for語句的一般形式為:for(表達式1;表達式2;表達式3)語句教案紙附頁第7頁教學內容、方法、過程和板書設計教學追記它的執行過程是:(1)先求解表達式1(2)求解表達式2,其值為真,則執行for語句中指定的內嵌語句(循環體),然后執行第(3)步,如果為假,則結束循環。(3)求解表達式3(4)轉回上面的第(2)步繼續執行。for語句典型的應用是這樣一種形式:for(循環變量初值;循環條件;循環變量增值)語句例如上述例子中的延時程序有這樣的程序行:“for(j=0;j<125;j++){;}”,執行這行程序時,首先執行j=0,然后判斷j是否小于125,如果小于125則去執行循環體(這里循環體沒有做任何工作),然后執行j++,執行完后再去判斷j是否小于125……如此不斷循環,直到條件不滿足(j>=125)為止。如果用while語句來改寫,應該這么寫j=0;while(j<125){j++;}可見,用for語句更簡單、方便。如果變量初值在for語句前面賦值,則for語句中的表達式1應省略,但其后的分號不能省略。上述程序中有:“for(;DelayTime>0;DelayTime--){…}”的寫法,省略掉了表達式1,因為這里的變量DelayTime是由參數傳入的一個值,不能在這個式子里賦初值。表達式2也可以省略,但是同樣不能省略其后的分號,如果省略該式,將不判斷循環條件,循環無終止地進行下去,也就是認為表達式始終為真。表達式3也可以省略,但此時編程者應該另外設法保證循環能正常結束。表達式1、2和3都可以省略,即形成如for(;;)的形式,它的作用相當于是while(1),即構一個無限循環的過程。循環可以嵌套,如上述延時程序中就是兩個for語句嵌套使用構成二重循環,C語言中的三種循環語句可以相互嵌套。七、break語句在一個循環程序中,可以通過循環語句中的表達式來控制循環程序是否結束,除此之外,還可以通過break語句強行退出循環結構。例:開機后,全部LED不亮,按下K1則從LED1開始依次點亮,至LED8后停止并全部熄滅,等待再次按下K1鍵,重復上述過程。如果中間K2鍵被按下,LED立即全部熄滅,返回起始狀態。
教案紙附頁第8頁教學內容、方法、過程和板書設計教學追記#include"reg51.h"#include"intrins.h"http://該文件包含有_crol_(?)函數的說明voidmDelay(unsignedintDelayTime){unsignedintj=0;for(;DelayTime>0;DelayTime--){for(j=0;j<125;j++){;}}}voidmain(){unsignedcharOutData=0xfe;unsignedchari;while(1){P3|=0x3c;if((P3|0xfb)!=0xff)//K1鍵被按下{OutData=0xfe;for(i=0;i<8;i++){mDelay(1000);/*延時1000毫秒*/tmp=0xfe;if((P3|0xf7)!=0xff)//K2鍵被按下break;OutData=_crol_(OutData,i);P1&=OutData;}}P1=0xff;}}注意,K2按下的時間必須足夠長,因為這里每1s才會檢測一次K2是否被按下。程序分析:開機后,當檢測到K1鍵被按下,執行一個:for(i=0;i<8;i++){…}的循
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中醫基礎理論考試試題及答案
- 制氧管理面試題及答案
- 2025年環境與資源保護法律法規考試試題及答案
- 2025年財務報表分析與解讀考試試題
- 數據工程師面試題及答案
- 科目四貴州試題及答案
- 烏龜人性測試題及答案
- 零售業店面運營管理合同
- 軟件設計師考試實踐項目的重要性試題及答案
- 機電工程學習中常見問題與試題及答案
- GB 2759-2015食品安全國家標準冷凍飲品和制作料
- CMMI-決策分析和決定過程
- 簡明大學物理電子版
- 運動技能學習與控制課件第二章運動中的信息加工
- 旋元佑字源大挪移歸類整理
- 《教師禮儀》課程教學大綱
- 卡通風青春畢業季PPT模板課件
- 心電監護課件精品PPT課件
- 具有車架結構車輛的怠速震動分析外文文獻翻譯、中英文翻譯
- 上公司人力資源管理制度非常全面
- summer-vibe-的中英歌詞
評論
0/150
提交評論