電子線路制作第次課_第1頁
電子線路制作第次課_第2頁
電子線路制作第次課_第3頁
電子線路制作第次課_第4頁
電子線路制作第次課_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

電子線路制作第次課第1頁,課件共63頁,創(chuàng)作于2023年2月數(shù)據(jù)結(jié)構(gòu):具有一定格式的數(shù)字或數(shù)值叫做數(shù)據(jù),數(shù)據(jù)按一定的數(shù)據(jù)類型進行的排列、組合、架構(gòu)成為數(shù)據(jù)機構(gòu)。C語言編譯器與程序開發(fā)過程:

8051程序開發(fā)過程1.創(chuàng)建C或匯編語言的源程序2.編譯或匯編源文件3.糾正源文件中的錯誤4.從編譯器和匯編器連接目標文件5.測試連接的應用程序第2頁,課件共63頁,創(chuàng)作于2023年2月 盡管C語言具有很多的優(yōu)點,但和其它任何一種程序設計語言一樣,也有其自身的缺點,如不能自動檢查數(shù)組的邊界,各種運算符的優(yōu)先級別太多,某些運算符具有多種用途等。

C語言程序是由若干個函數(shù)單元組成的,每個函數(shù)都是完成某個特殊任務的子程序段。組成一個程序的若干個函數(shù)可以保存在一個源程序文件中,也可以保存語言源程序文件的文件名由程序設計人員根據(jù)某種俗成規(guī)則自己確定,其擴展名統(tǒng)一為“.C”。如A1-1.C、A2-1.C。

C語言程序的開始部分通常是預處理命令,如程序中通常遇到的#include命令。這個預處理命令通知編譯器在對程序進行編譯時,將所需要的頭文件讀入后再一起進行編譯。一般在“頭文件”中包含有程序在編譯時的一些必要的信息,通常C語言編譯器都會提供若干個不同用途的頭文件。頭文件的讀入是在對程序進行編譯時才完成的。第3頁,課件共63頁,創(chuàng)作于2023年2月

C語言程序是由函數(shù)所組成的。一個完整的C語言程序應包含一個主函數(shù)main()和若干個其它功能的函數(shù)。函數(shù)之間可以相互調(diào)用,但main()函數(shù)只能調(diào)用其它的功能函數(shù),而不能被其它函數(shù)所調(diào)用。功能函數(shù)可以是C語言編譯器提供的庫函數(shù),也可以由用戶按實際需要自行編寫的函數(shù)。不管main()函數(shù)處于程序中的什么位置,程序總是從main()函數(shù)開始執(zhí)行。一個函數(shù)必須預先定義或聲明后才能調(diào)用。函數(shù)定義或聲明位于源程序的預處理命令之后的開始位置。函數(shù)定義部分包括有函數(shù)的存儲類型、返回值數(shù)據(jù)類型、函數(shù)名、形式參數(shù)說明等,函數(shù)名后面必須跟一個圓括弧(),形式參數(shù)說明在圓括?。ǎ﹥?nèi)進行。函數(shù)也可以沒有形式參數(shù),如main()。函數(shù)的位置比較自由??梢杂沙绦蛟O計人員安排在函數(shù)定義后的任意位置。函數(shù)由函數(shù)名和一對花括弧“{}”組成,在“{}”里面的內(nèi)容就是函數(shù)體,如果一個函數(shù)有多個“{}”,則最外面的一對“{}”為函數(shù)體的范圍。第4頁,課件共63頁,創(chuàng)作于2023年2月

函數(shù)體的內(nèi)容為若干條語句,一般有兩類語句,一類為說明語句,用來對函數(shù)中將要用到的變量進行定義;另一類為執(zhí)行語句,用來完成一定的功能或算法處理。有的函數(shù)體僅有一對“{}”,其中既沒有變量定義語句,也沒有執(zhí)行語句,這也是合法的,稱為“空函數(shù)”。

C語言源程序可以采用任何一種編輯器來編寫,既可以是windows環(huán)境下的編輯器,如記事本(NOTEPAD)或?qū)懽职澹╓ORDPAD),也可以是DOS環(huán)境下的編輯器,如EDIT或PE等。C語言程序的書寫格式十分自由。一條語句可以寫成一行,也可以寫成幾行;還可以在一行內(nèi)寫多條語句;但是需要注意的是,每條語句都必須以分號“;”作為結(jié)束符。第5頁,課件共63頁,創(chuàng)作于2023年2月

另外,C語言區(qū)分大小寫字母,C語言編譯器在對程序進行編譯時,對于程序中同一個字母的大小寫作為不同的變量來處理。雖然C語言程序不要求具有固定的格式,但我們在實際編寫程序時還是應該遵守一定的規(guī)則,一般應按程序的功能以“縮格”形式來寫程序,同時還應在適當?shù)牡胤郊由媳匾淖⑨尅W⑨寣τ诒容^大的程序來說是十分重要的,這有利于修改與讀懂程序。

C語言本身沒有輸入輸出功能,C語言程序的輸入和輸出是通過函數(shù)調(diào)用來實現(xiàn)的。FranklinC51編譯器提供的輸入輸出庫函數(shù)scanf和printf是通過8051單片機的串行口實現(xiàn)的,在程序中使用這種輸入輸出庫函數(shù)之前必須先對8051單片機的串行口進行初始化。但是對于單片機應用系統(tǒng)來說,由于具體要求的不同,應用系統(tǒng)的輸入輸出方式多種多樣,不可能一律采用串行口作輸入和輸出。因此應該根據(jù)實際需要,由應用系統(tǒng)的研制人員自己來編寫滿足特定需要的輸入輸出函數(shù),這一點對于單片機應用系統(tǒng)的開發(fā)研制人員來說是十分重要的。

第6頁,課件共63頁,創(chuàng)作于2023年2月C語言的標識符和關鍵字C語言的標識符是用來標識源程序中某個對象名字的。這些對象可以是函數(shù)、變量、常量、數(shù)組、數(shù)據(jù)類型、存儲方式、語句等。一個標識符由字符串、數(shù)字和下劃線等組成,第一個字符必須是字母或下劃線,通常以下劃線開頭的標識符是編譯系統(tǒng)專用的,因此在編寫C語言源程序時一般不要使用以下劃線開頭的標識符,而將下劃線用作分段符。C51編譯器規(guī)定標識符最長可達255個字符,但只有前面32個字符在編譯時有效,因此在編寫源程序時標識符的長度不要超過32個字符。程序中對于標識符的命名應當簡潔明了,含義清晰,便于閱讀理解,如用標識符“max”表示最大值,用“TIMER0”表示定時器0等。

關鍵字是一類具有固定名稱和特定含義的特殊標識符,又稱為保留字。在編寫C語言源程序時一般不允許將關鍵字另作別用,換句話說就是對于標識符的命名不要與關鍵字相同。在C語言中,ANSIC標準一共規(guī)定了32個關鍵字,下表按用途列出了ANSIC標準的關鍵字。第7頁,課件共63頁,創(chuàng)作于2023年2月關鍵字

用途

說明autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunionunsignedvoidvolatilewhile存儲類說明程序語句程序語句數(shù)據(jù)類型說明存儲類型說明程序語句程序語句程序語句數(shù)據(jù)類型說明程序語句數(shù)據(jù)類型說明存儲種類說明數(shù)據(jù)類型說明程序語句程序語句程序語句數(shù)據(jù)類型說明數(shù)據(jù)類型說明存儲種類說明程序語句數(shù)據(jù)類型說明數(shù)據(jù)類型說明運算符存儲種類說明數(shù)據(jù)類型說明程序語句數(shù)據(jù)類型說明數(shù)據(jù)類型說明數(shù)據(jù)類型說明數(shù)據(jù)類型說明數(shù)據(jù)類型說明程序語句用以說明局部變量退出最內(nèi)層循環(huán)switch語句中的選擇項單字節(jié)整型數(shù)或字符型數(shù)據(jù)在程序執(zhí)行過程中不可能修改的變量值轉(zhuǎn)向下一個循環(huán)switch語句中的失敗選擇項構(gòu)成do...while循環(huán)結(jié)構(gòu)雙精度浮點數(shù)構(gòu)成if...else選擇結(jié)構(gòu)枚舉在其它程序模塊中說明了的全局變量單精度浮點數(shù)構(gòu)成for循環(huán)結(jié)構(gòu)構(gòu)成goto轉(zhuǎn)移結(jié)構(gòu)構(gòu)成if...else選擇結(jié)構(gòu)基本整型數(shù)長整型數(shù)使用CPU內(nèi)部寄存器的變量函數(shù)返回短整型數(shù)有符號數(shù),二進制數(shù)據(jù)的最高位為符號位計算表達式或數(shù)據(jù)類型的字節(jié)數(shù)靜態(tài)變量結(jié)構(gòu)類型數(shù)據(jù)構(gòu)成switch選擇結(jié)構(gòu)重新進行數(shù)據(jù)類型定義聯(lián)合數(shù)據(jù)類型無符號數(shù)據(jù)無符號數(shù)據(jù)說明該變量在程序執(zhí)行中可被隱含地改變構(gòu)成while和do...while循環(huán)結(jié)構(gòu)第8頁,課件共63頁,創(chuàng)作于2023年2月關鍵字

用途

說明bitsbitsfrsfr16databdataidatapdataxdatacodeinterruptUsingreetrant位標量聲明位標量聲明特殊功能寄存器聲明特殊功能寄存器聲明存儲器類型聲明存儲器類型聲明存儲器類型說明存儲器類型說明存儲器類型說明存儲器類型說明中斷函數(shù)說明寄存器組定義再入函數(shù)聲明聲明一個位標量或位類型的函數(shù)聲明一個可位尋址變量聲明一個特殊功能寄存器(8位)聲明一個16位的特殊功能寄存器直接尋址的8051內(nèi)部數(shù)據(jù)存儲器可位尋址的8051內(nèi)部數(shù)據(jù)存儲器間接尋址的8051內(nèi)部數(shù)據(jù)存儲器“分頁”尋址的8051外部數(shù)據(jù)存儲器8051外部數(shù)據(jù)存儲器8051程序存儲器定義一個中斷函數(shù)定義8051工作寄存器組定義一個再入函數(shù)C51編譯器除了支持ANSIC標準關鍵字以外,還擴展了如表7.2所示的關鍵字:

C51編譯器的擴展關鍵字第9頁,課件共63頁,創(chuàng)作于2023年2月C51程序設計的基本語法C語言的數(shù)據(jù)類型C語言的數(shù)據(jù)結(jié)構(gòu)是以數(shù)據(jù)類型出現(xiàn)的,數(shù)據(jù)類型可分為基本數(shù)據(jù)類型和復雜數(shù)據(jù)類型,復雜數(shù)據(jù)類型由基本數(shù)據(jù)類型構(gòu)造而成。C語言中的基本數(shù)據(jù)類型有char,int,short,long,float和double。對于C51編譯器來說,short型與int型相同,double型與float型相同。分別說明如下:

1.char字符類型。有signedchar和unsignedchar之分,默認值為signedchar。對于signedchar型數(shù)據(jù),其字節(jié)中的最高位表示該數(shù)據(jù)的符號,“0”表示正數(shù),“l(fā)”表示負數(shù)。負數(shù)用補碼表示。所能表示的數(shù)值范圍是-128~127;unsignedchar型數(shù)據(jù),是無符號字符型數(shù)據(jù),其字節(jié)中的所有位均用來表示數(shù)據(jù)的數(shù)值,所表示的數(shù)值范圍是0~255。第10頁,課件共63頁,創(chuàng)作于2023年2月

2.int整型。有signedint和unsignednit之分,默認值為signedint。signedint是有符號整型數(shù),字節(jié)中的最高位表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表示負數(shù)。所能表示的數(shù)值范圍是-32768~+32767。unsignedint是無符號整型數(shù),所表示的數(shù)值范圍是0~65535。

3.long長整型。有signedlong和unsignedlong之分,默認值為signedlong。它們的長度均為四個字節(jié)。singedlong是有符號的長整型數(shù)據(jù),字節(jié)中的最高位表示數(shù)據(jù)的符號,“0”表示正數(shù),“1”表示負數(shù)。數(shù)值的表示范圍是

2147483648~2147483647;unsignedlong是無符號長整型數(shù)據(jù),數(shù)值的表示范圍是0~4294967295。第11頁,課件共63頁,創(chuàng)作于2023年2月

4.float浮點型。它是符合IEEE—754標準的單精度浮點型數(shù)據(jù),在十進制中具有7位有效數(shù)字。float型數(shù)據(jù)占用四個字節(jié)(2位二進制數(shù))。需要指出的是,對于浮點型數(shù)據(jù)除了有正常數(shù)值之外,還可能出現(xiàn)非正常數(shù)值。根據(jù)IEEE標準,當浮點型數(shù)據(jù)取以下數(shù)值(16進制數(shù))時即為非正常值:FFFFFFFFH非數(shù)(NaN);7F800000H正溢出(+INF);FF800000H負溢出(-INF);另外,由于8051單片機不包括捕獲浮點運算錯誤的中斷向量,因此必須由用戶自己根據(jù)可能出現(xiàn)的錯誤條件用軟件來進行適當?shù)奶幚?。?2頁,課件共63頁,創(chuàng)作于2023年2月

5.*指針型。指針型數(shù)據(jù)不同于以上四種基本數(shù)據(jù)類型,它本身是一個變量,但在這個變量中存放的不是普通的數(shù)據(jù)而是指向另一個數(shù)據(jù)的地址。指針變量也要占據(jù)一定的內(nèi)存單元,在C51中指針變量的長度一般為1~3個字節(jié)。指針變量也具有類型,其表示方法是在指針符號“*”的前面冠以數(shù)據(jù)類型符號。如char*Pointl;表示Pointl是一個字符型的指針變量。指針變量的類型表示該指針所指向地址中數(shù)據(jù)的類型。使用指針型變量可以方便地對8051單片機的各部分物理地址直接進行操作。

6.bit位標量。這是C51編譯器的一種擴充數(shù)據(jù)類型,利用它可定義一個位標量,但不能定義位指針,也不能定義位數(shù)組。第13頁,課件共63頁,創(chuàng)作于2023年2月

7.sfr特殊功能寄存器。這也是C51編譯器的一種擴充數(shù)據(jù)類型,利用它可以訪問8051單片機的所有內(nèi)部特殊功能寄存器。sfr型數(shù)據(jù)占用一個內(nèi)存單元,其取值范圍0~255。

8.sfr1616位特殊功能寄存器。它占用兩個內(nèi)存單元,取值范圍是0~65535。

9.sbit可尋址位。這也是C51編譯器的一種擴充數(shù)據(jù)類型,利用它可以訪8051單片機內(nèi)部RAM中的可尋址位或特殊功能寄存器中的可尋址位。

第14頁,課件共63頁,創(chuàng)作于2023年2月在C語言程序中的表達式或變量賦值運算中,有時會出現(xiàn)運算對象的數(shù)據(jù)不一致的情況,C語言允許任何標準數(shù)據(jù)類型之間的隱式轉(zhuǎn)換。隱式轉(zhuǎn)換按以下優(yōu)先級別自動進行:

bitcharintlongfloatsignedunsigned

轉(zhuǎn)換時由低向高進行,而不是數(shù)據(jù)轉(zhuǎn)換時的順序。一般來說,如果有幾個不同類型的數(shù)據(jù)同時參加運算,先將低級別類型的數(shù)據(jù)轉(zhuǎn)換成高級別類型,再作運算處理,并且運算結(jié)果為高級別類型數(shù)據(jù)。

C51編譯器除了能支持以上這些基本數(shù)據(jù)之外,還能支持一些復雜的構(gòu)造型數(shù)據(jù),如結(jié)構(gòu)類型、聯(lián)合類型等。第15頁,課件共63頁,創(chuàng)作于2023年2月常量常量是在程序執(zhí)行過程中其值不能改變的量。常量的數(shù)據(jù)類型有整型、浮點型、字符型和字符串型等,C51編譯器還擴充了一種位(bit)標量。分別說明如下:

1.整型常量整型常量就是整型常數(shù),可表示為以下幾種形式:十進制整數(shù);十六進制整數(shù):以0X開頭的數(shù)是十六進制數(shù),ANSIC標準規(guī)定十六進制數(shù)的數(shù)字為0~9,再加字母a~f;長整數(shù):在數(shù)字后面加一個字母L就構(gòu)成了長整數(shù)。2.浮點型常量浮點型常量有十進制表示形式和指數(shù)表示形式。十進制表示形式又稱定點表示形式,由數(shù)字和小數(shù)點組成。如0.3141、31.41、314.1及0.0都是十進制數(shù)表示形式的浮點型常量。第16頁,課件共63頁,創(chuàng)作于2023年2月

在這種表示形式中,如果整數(shù)或小數(shù)部分為0可以省略不寫,但必須有小數(shù)點指數(shù)表示形式為:

[±]數(shù)字[.數(shù)字]e[±]數(shù)字其中,[]中的內(nèi)容為可選項,可有可無,但其余部分必須有。3.字符型常量字符型常量是單引號內(nèi)的字符,如‘a(chǎn)’、‘b’等。對于不可顯示的控制字符,可以在該字符前面加一個反斜杠字符“\”組成專用轉(zhuǎn)義字符。利用轉(zhuǎn)義字符可以完成一些特殊功能和輸出時的格式控制。4.字符串型常量字符串型常量由雙引號“”內(nèi)的字符組成。當雙引號內(nèi)的字符個數(shù)為0時,稱為空串常量。需要注意的是,字符串常量首尾的雙引號是界限符,當需要表示雙引號字符串時,可用轉(zhuǎn)義字符‘\’來表示為:“\“\””。第17頁,課件共63頁,創(chuàng)作于2023年2月如:“Isay:\“goodbye?。堋薄薄址疄镮say:“goodbye!”另外,C語言將字符串常量作為一個字符類型數(shù)組來處理,在存儲字符串常量時,要在字符串的尾部加一個轉(zhuǎn)義字符\0作為該字符串常量的結(jié)束符。因此不要將字符常量與字符串常量混淆。5.位標量這是C51編譯器的一種擴充數(shù)據(jù)類型。位標量用關鍵字“bit”來定義,它的值是一個二進制位。一個函數(shù)中可以包含“bit”類型的參數(shù),函數(shù)的返回值也可為“bit”型。另外,不能定義位指針,也不能定義位數(shù)組。第18頁,課件共63頁,創(chuàng)作于2023年2月C51程序設計表達式語句

C語言是一種結(jié)構(gòu)化的程序設計語言,它提供了十分豐富的程序控制語句。表達式語句是最基本的一種語句。在表達式的后邊加一個分號“;”就構(gòu)成了表達式語句。表達式語句也可以僅由一個分號“;”組成,這種語句稱為空語句??照Z句是表達式語句的一個特例。空語句在程序設計中有時是很有用的,當程序在語法上需要有一個語句,但在語義上并不要求有具體的動作時,便可以采用空語句??照Z句通常有兩種用法:

1.在程序中為有關語句提供標號,用以標記程序執(zhí)行的位置。

2.在用while語句構(gòu)成的循環(huán)語句后面加一個分號,形成一個不執(zhí)行其它操作的空循環(huán)體。

第19頁,課件共63頁,創(chuàng)作于2023年2月復合語句復合語句是由若干條語句組合而成的一種語句,它是用一個大括號“{}”將若干條語句組合在一起而形成的一種功能塊。復合語句不需要以分號“;”結(jié)束,但它內(nèi)部的各條單語句仍需以分號“;”結(jié)束。復合語句的一般形式為:

{

局部變量定義;語句1;語句2;。。。。。。。。。語句n;}復合語句在執(zhí)行時,其中的各條單語句依次順序執(zhí)行。整個復合語句在語法上等價于一條單語句,因此在C語言程序中可以將復合語句視為一條單語句。復合語句允許嵌套,即在復合語句內(nèi)部還可以包含別的復合語句。

第20頁,課件共63頁,創(chuàng)作于2023年2月

通常復合語句都出現(xiàn)在函數(shù)中,實際上,函數(shù)的執(zhí)行部分(即函數(shù)體)就是一個復合語句。復合語句中的單語句一般是可執(zhí)行語句,此外還可以是變量的定義語句(說明變量的數(shù)據(jù)類型)。用復合語句內(nèi)部變量定義語句所定義的變量,稱為該復合語句中的局部變量,它僅在當前這個復合語句中有效。利用復合語句將多條單語句組合在一起,以及在復合語句中進行局部變量定義是C語言的一個重要特征。流程控制語句1.選擇結(jié)構(gòu)①

if語句

if語句有三種形式:單分支選擇if語句、雙分支選擇if語句和多分支選擇if語句。(1)單分支選擇語句

If(條件表達式)語句第21頁,課件共63頁,創(chuàng)作于2023年2月 其含義為:若條件表達式的結(jié)果為真(非0值),就執(zhí)行了后面的語句;反之,若條件達式的結(jié)果為假(0值),就不執(zhí)行后面的語句。這里的語句也可以是復合語句。這種條件語句的執(zhí)行過程如圖7.3(a)所示。(2)雙分支選擇語句

if(條件表達式)語句1;

else語句2;其含義為:若條件表達式的結(jié)果為真(非0值),就執(zhí)行語句1;反之,若條件表達式的結(jié)果為假(0值),就執(zhí)行語句2。這里的語句1和語句2均可以是復合語句。這種條件語句的執(zhí)過程如圖7.3(b)所示。

(a)(b)

條件語句的執(zhí)行

第22頁,課件共63頁,創(chuàng)作于2023年2月(3)多分支選擇語句

if(條件表達式1)語句1;

elseif(條件式表達2)語句2;

elseif(條件式表達3)語句3;

…………elseif(條件表達式n)語句nelse語句n+1;這種條件語句常用來實現(xiàn)多方向條件分支,其執(zhí)行過程如圖7.4所示。

第23頁,課件共63頁,創(chuàng)作于2023年2月switch語句

開關語句也是一種用來實現(xiàn)多方向條件分支的語句。開關語句可直接處理多分支選擇,使程序結(jié)構(gòu)清晰,使用方便。開關語句是用關鍵字switch構(gòu)成的,它的一般形式如下:

switch(表達式) {

case常量表達式1:語句1;break;

case常量表達式2:語句2;break;

…………case常量表達式n:語句n;break;

default:語句n+1;

}開關語句的執(zhí)行過程第24頁,課件共63頁,創(chuàng)作于2023年2月2.循環(huán)結(jié)構(gòu)在C語言程序中用來構(gòu)成循環(huán)控制的語句有:while語句、do-while語句、for語句以及goto語句,分述如下:①while語句采用while語句構(gòu)成循環(huán)結(jié)構(gòu)的一般形式如下:

while(條件表達式)語句;其意義為,當條件表達式的結(jié)果為真(非0值)時,程序就重復執(zhí)行后面的語句,一直執(zhí)行到條件表達式的結(jié)果變化為假(0值)時為止。這種循環(huán)結(jié)構(gòu)是先檢查條件表達式所給出的條件,再根據(jù)檢查的結(jié)果決定是否執(zhí)行后面的語句。如果條件表達式的結(jié)果一開始就為假,則后面的語句一次也不會被執(zhí)行。這里的語句可以是復合語句。圖7.6所示為while語句的執(zhí)行過程。②do-while語句采用do一while語句構(gòu)成循環(huán)結(jié)構(gòu)的一般形式如下:

do語句while(條件表達式);第25頁,課件共63頁,創(chuàng)作于2023年2月這種循環(huán)結(jié)構(gòu)的特點是先執(zhí)行給定的循環(huán)體語句,然后再檢查條件表達式的結(jié)果。當多件表達式的值為真(非0值)時,則重復執(zhí)行循環(huán)體語句,直到條件表達式的值變?yōu)榧伲?值時為止。因此,用如do一while語句構(gòu)成的循環(huán)結(jié)構(gòu)在任何條件下,循環(huán)體語句至少會被執(zhí)行一次。下圖繪出了這種循環(huán)結(jié)構(gòu)的流程圖。

while語句的執(zhí)行過程

do—while循環(huán)結(jié)構(gòu)的流

第26頁,課件共63頁,創(chuàng)作于2023年2月

for語句

采用for語句構(gòu)成循環(huán)結(jié)構(gòu)的一般形式如下:

for([初值設定表達式];[循環(huán)條件表達式];[更新表達式])語句

for語句的執(zhí)行過程是:先計算出初值設定表達式的值作為循環(huán)控制變量的初值,再檢查循環(huán)條件表達式的結(jié)果,當滿足循環(huán)條件時就執(zhí)行循環(huán)體語句并計算更新表達式,然后再根據(jù)更新表達式的計算結(jié)果來判斷循環(huán)條件是否滿足……一直進行到循環(huán)條件表達式的結(jié)果為假(0值)時,退出循環(huán)體。for語句的執(zhí)行過程如所示。第27頁,課件共63頁,創(chuàng)作于2023年2月非結(jié)構(gòu)化語句①goto語句

goto語句是一個無條件轉(zhuǎn)向語句,它的一般形式為:

goto語句標號;其中語句標號是一個帶冒號“:”的標識符。將goto語句和if語句一起使用,可以構(gòu)成一個循環(huán)結(jié)構(gòu)。但更常見的是在C語言程序中采用goto語句來跳出多重循環(huán),需要注意的是只能用goto語句從內(nèi)層循環(huán)跳到外層循環(huán),而不允許從外層循環(huán)跳到內(nèi)層循環(huán)。對于多重循環(huán)的情況,break語句只能跳出它所處的那一層循環(huán),而不象goto語句可以直接從最內(nèi)層循環(huán)中跳出來。由此可見,要退出多重循環(huán)時,采用goto語句比較方便。需要指出的是,break語句只能用于開關語句和循環(huán)語句之中,它是一種具有特殊功能的無條件轉(zhuǎn)移語句。另外還要注意,在進行實際程序設計時,為了保證程序具有良好的結(jié)構(gòu),應當盡可能地少采用goto語句,以使程序結(jié)構(gòu)清晰易讀。

第28頁,課件共63頁,創(chuàng)作于2023年2月

②continue語句

continue語句是一種中斷語句,它一般用在循環(huán)結(jié)構(gòu)中,其功能是結(jié)束本次循環(huán),即跳過循環(huán)體中下面尚未執(zhí)行的語句,把程序流程轉(zhuǎn)移到當前循環(huán)語句的下一個循環(huán)周期,并根據(jù)循環(huán)控制條件決定是否重復執(zhí)行該循環(huán)體。

continue語句的一般形式為:continue;

continue語句通常和條件語句一起用在由while、do—while和for語句構(gòu)成的循環(huán)結(jié)構(gòu)中,它也是一種具有特殊功能的無條件轉(zhuǎn)移語句,但它與break語句不同,continue語句并不跳出循環(huán)體,而只是根據(jù)循環(huán)控制條件確定是否繼續(xù)執(zhí)行循環(huán)語句③返回語句返回語句用于終止函數(shù)的執(zhí)行,并控制程序返回到調(diào)用該函數(shù)時所處的位置。返回語句有兩種形式:

第29頁,課件共63頁,創(chuàng)作于2023年2月C51編程實例8051串行口擴展的矩陣鍵盤用戶可以對8051單片機串行口重新進行編程以完成自己需要的某種特殊功能。8051單片機的串行口工作于方式0時,可作為移位寄存器用于擴展I/O口。如圖7.14所示,利用8051串行口擴展的一種矩陣鍵盤接口電路。74LS164是串入/并出移位寄存器,它將來自8051串行口線的P3.0(RXD)的串行數(shù)據(jù)轉(zhuǎn)換成8位并行數(shù)據(jù),P3.4和P3.5定義為輸入口線,從而可實現(xiàn)一個2×8矩陣鍵盤接口下面給出針對鍵盤接口的C51驅(qū)動程序。程序由主函數(shù)main()、讀鍵盤函數(shù)get_char()和延時函數(shù)delay()組成。主函數(shù)將8051串行口初始化為工作方式0,采用查詢式輸入輸出,然后調(diào)用讀鍵盤函數(shù)讀入,按鍵的編碼值并存入以keybuf為首地址的16個內(nèi)部RAM單元中。第30頁,課件共63頁,創(chuàng)作于2023年2月

讀鍵盤函數(shù)get_char()判斷是否有鍵按下,有按鍵時進行鍵值分析并將按鍵的鍵值返回給主調(diào)用函數(shù)。延時函數(shù)delay()的功能是提供一段延時時間以防止按鍵抖動對鍵值分析的影響。用8051串行口擴展的矩陣鍵盤接口第31頁,課件共63頁,創(chuàng)作于2023年2月程序清單如下:

#include<reg51.h>#include<intrins.h>unsignedcharget_char(void);/*函數(shù)說明*/voiddelay(void);

main(){unsignedcharkeybuf[16],count;/*鍵盤緩沖區(qū)和讀鍵盤計數(shù)變量*/SCON=0;/*將串行口設置成方式0*/ES=0;/*禁止串口中斷*/EA=0;

count=0;

while(count<16)keybuf[count++]=get_char();

/*讀入16個按鍵的鍵值*/

第32頁,課件共63頁,創(chuàng)作于2023年2月

}unsignedcharget_char(void){/*定義表示列號、鍵序號和待發(fā)送數(shù)據(jù)的變量column、key_code和mask*/unsignedcharkey_code,column=0,mask=0x00;

/*下列語句從串行口向74LS164移位輸出8個0*/TI=0;

SBUF=mask;

while(TI==0);

/*下列語句通過檢測P3.4和P3.5是否為零來判斷是否有鍵按下,檢測到有鍵壓下時延時10ms以消除按鍵抖動,然后繼續(xù)檢測P3.4和P3.5是否為0,若不為0則表明檢測到干擾信號并繼續(xù)等待按鍵,否則表示有一個鍵被可靠按下并退出循環(huán)*/while(1)第33頁,課件共63頁,創(chuàng)作于2023年2月

{while((p34&&p35)!=0);

delay();

if((p34&p35)!=0)continue;

elsebreak;

}/*下列語句分析被按下的鍵所在的列號*/mask=0xfe;

while(1){TI=0;

SBUF=mask;

while(TI==0);

if((p34&&p35)!=0)第34頁,課件共63頁,創(chuàng)作于2023年2月

{mask=_crol_(mask,1);/*mask的值循環(huán)左移一位*/column++;

if(column>=8)column=0;

continue;

}elsebreak;

}/*下列語句分析被按下的鍵所在的行號并計算鍵序號*/if(p34==0)key_code=column;

elsekey_code=8+column;

return(key_code);

}第35頁,課件共63頁,創(chuàng)作于2023年2月voiddelay(void){unsignedinti=10;

while(i--);}8051LED顯示電路發(fā)光二極管LED二極管伏安特性曲線第36頁,課件共63頁,創(chuàng)作于2023年2月

(1)外加正向電壓小于0.9~1.1V時,LED不導通;當外加電壓大于正向閥值電壓時,LED導通,同時發(fā)光。顯然,LED二極管的正向?qū)妷罕绕胀ǘO管大,具體數(shù)值與LED材料有關,如表所示。表LED正向壓降與材料的關系

LED材料正向?qū)妷篤F/V砷化鎵(GaAs)1.2鎵鋁砷(GaAlAs)1.6~1.8磷化鎵(GaP)1.9~2.5磷砷化鎵(GaAsP)1.6~1.8第37頁,課件共63頁,創(chuàng)作于2023年2月

(2)?LED導通后,伏安特性曲線更陡,即LED導通后,內(nèi)阻更小。

(3)?LED二極管反向擊穿電壓比普通二極管低,一般在5~10V之間。

LED二極管的亮度與LED材料、結(jié)構(gòu)以及工作電流有關。一般說來,工作電流越大,亮度也越大,但亮度與工作電流的關系,因材料而異,例如GaP發(fā)光二極管,當工作電流增加到一定數(shù)值后,電流增加,LED亮度不再增大,即出現(xiàn)亮度飽和現(xiàn)象;而GaAsP發(fā)光二極管的亮度隨電流的增大而增大,在器件因功耗增加而損壞前觀察不到飽和現(xiàn)象。

LED發(fā)光二極管工作電流在5~20mA之間,最大不超過50mA,否則會損壞。為了獲得良好的發(fā)光效果,LED平均工作電流控制在10~15mA較合理。第38頁,課件共63頁,創(chuàng)作于2023年2月常用驅(qū)動電路CPU與LED接口電路(a)、(c)、(e)高電平有效;(b)、(d)低電平有效(a)(b)(c)CPULEDVDVCCRICA740612CPULEDVDVCCRICA740712(d)CPULEDVDVCCRICA740712(e)CPU2.2kRbNPNLEDVDVCCRCPU2.2kRbNPNLEDVDVCCRP1.XP1.X第39頁,課件共63頁,創(chuàng)作于2023年2月

其中圖(a)使用NPN三極管驅(qū)動,P1.X引腳輸出高電平時,三極管飽和導通,限流電阻R和LED內(nèi)阻(幾歐姆~幾十歐姆)構(gòu)成了集電極等效電阻,R的大小由IC=IF=(VCC-VF-VCES)/R。其中IC為集電極電流;IF為LED工作電流;VCC為電源電壓;VCES為三極管飽和壓降,一般在0.1~0.2V之間;VF為LED導通電壓,一般在1.2~2.5V之間。當VCC為5V,VF取2.0V,IF取15mA時,限流電阻R大致為200Ω。當P1.X引腳輸出低電平時,三極管截止,功耗小,該電路惟一缺點是復位期間,P1口輸出高電平,LED發(fā)光(當然也可以利用這一特性構(gòu)成復位指示器)。第40頁,課件共63頁,創(chuàng)作于2023年2月LED靜態(tài)顯示接口電路第41頁,課件共63頁,創(chuàng)作于2023年2月LED靜態(tài)顯示接口電路第42頁,課件共63頁,創(chuàng)作于2023年2月

LED靜態(tài)顯示接口電路第43頁,課件共63頁,創(chuàng)作于2023年2月.動態(tài)顯示方式LED顯示器由P1口輸出的LED動態(tài)顯示接口電路第44頁,課件共63頁,創(chuàng)作于2023年2月在動態(tài)顯示方式中,各顯示位筆段引腳a~dp并聯(lián)在一起,共用一個筆段代碼鎖存器(由于單片機I/O口、I/O擴展電路,如8155、8255等大多具有輸出鎖存功能,因而往往不再需要筆段代碼鎖存器)、筆段譯碼器(采用軟件譯碼時,不需要譯碼器)及驅(qū)動器;為了控制各LED數(shù)碼管輪流工作,各顯示位的公共端與位譯碼(采用軟件譯碼時,不需要)、鎖存、驅(qū)動電路相連。這樣即可依次輸出每一顯示位的筆段代碼和位掃描碼,輪流點亮各LED數(shù)碼顯示管,實現(xiàn)動態(tài)顯示目的??梢姡趧討B(tài)顯示方式中,僅需要一個筆段代碼鎖存、驅(qū)動器和一個位掃描碼鎖存、驅(qū)動器,且硬件開銷少。第45頁,課件共63頁,創(chuàng)作于2023年2月在動態(tài)顯示方式中,各LED數(shù)碼顯示器輪流工作,為了防止產(chǎn)生閃爍現(xiàn)象,每個LED數(shù)碼管刷新頻率必須大于25Hz,即相鄰兩次點亮的時間間隔要小于40ms。對于具有N個LED數(shù)碼管的動態(tài)顯示電路來說,如果刷新頻率為f,那么顯示周期為1/f,則每一位的顯示時間為1/(f×N)秒。顯然,顯示的位數(shù)越多,每一位的顯示時間越短,在驅(qū)動電流一定的情況下,亮度越低(正因如此,在動態(tài)LED顯示電路中,要適當增大驅(qū)動電流,一般取20mA~35mA,以抵消因顯示時間短造成亮度下降)。為了保證一定的亮度,實驗表明:在驅(qū)動電流取30mA的情況下,每位顯示時間不能小于1ms。第46頁,課件共63頁,創(chuàng)作于2023年2月由8255構(gòu)成的LED動態(tài)顯示驅(qū)動電路第47頁,課件共63頁,創(chuàng)作于2023年2月當顯示位數(shù)較多,如12位以上,將顯示刷新率降到25Hz后,仍不能保證每位顯示時間大于1ms時,可采用按字段掃描方式或按位分組掃描方式的動態(tài)顯示驅(qū)動電路。在按字段掃描方式中,不論位數(shù)多少,對于八段數(shù)碼顯示器來說,筆段引腳只有8根,即使顯示刷新頻率為50Hz,按字段掃描時,每一筆段顯示時間依然為1/(50×8)=2.5ms。顯示時每次點亮一個筆段(即掃描信號從筆段引腳輸入),顯示信息由位選擇電路控制,顯示程序比按位掃描方式要復雜一些,這里就不給出具體電路了。第48頁,課件共63頁,創(chuàng)作于2023年2月按位分組掃描動態(tài)顯示驅(qū)動電路第49頁,課件共63頁,創(chuàng)作于2023年2月在按位分組掃描方式中,每次同時顯示各組中的一位。例如,在圖7-16所示電路中,將16個LED數(shù)碼顯示管分成兩組,其中A口輸出第一組(1~8位)LED數(shù)碼顯示管的筆段代碼;B口輸出第二組(9~16位)LED數(shù)碼顯示管的筆段代碼;位掃描信號由U8輸出。顯示時,依次將第一組(即1~8位)筆段碼送A口,第二組(即9~16位)筆段碼送B口,然后再將掃描碼送C口,這樣一次掃描將同時顯示兩位,盡管顯示位數(shù)多了,但每一LED數(shù)碼顯示管的顯示時間并沒有縮短。顯然,在這種顯示方式中,每組需要一套筆段驅(qū)動電路,雖硬件成本略有上升,但顯示驅(qū)動程序與只有一組的動態(tài)顯示電路相似,相對較簡單。第50頁,課件共63頁,創(chuàng)作于2023年2月單片機驅(qū)動液晶顯示器lcd模塊1。Lcd分類

Lcd可分為兩種類型,一種是字符模式lcd,另一種是圖形模式lcd。其中,字符模式lcd是點陣型液晶顯示器,專門用來顯示字母,數(shù)字,符號。由于lcd的控制需專用的驅(qū)動電路,一般不會單獨使用,而是將lcd面板,驅(qū)動與控制電路組合成模塊一起使用,簡稱lcm。51

目前,常用的有16*1,16*2,20*2,40*2等字符模塊。這些lcm雖然顯示數(shù)字不同,但都有相同的輸入輸出界面。Lcm模塊第51頁,課件共63頁,創(chuàng)作于2023年2月522.lcd模塊的引腳下面介紹常用的20*2字符模塊,外型如下圖所示,引腳如圖所示。20*2lcd每行可以顯示20個字,可顯示的行數(shù)為兩行,有16只引腳,其中數(shù)據(jù)線db0-db7與控制信號線rs,r/w,e用來連接單片機,另外3只信號線vss,vdd,v0,其各腳功能如表第52頁,課件共63頁,創(chuàng)作于2023年2月第53頁,課件共63頁,創(chuàng)作于2023年2月3.寄存器選擇及顯示器地址

Lcd內(nèi)部有兩個寄存器,一個是指令寄存器IR,另一個是數(shù)據(jù)寄存器DR。IR用來存放由微控制器送來的指令代碼,如光標歸位,清除顯示等,dr用來存放顯示的數(shù)據(jù)。顯示的次序是先把欲存放數(shù)據(jù)地址寫入ir,再將欲顯示的數(shù)據(jù)寫入dr,dr就會第54頁,課件共63頁,創(chuàng)作于2023年2月自動的把數(shù)據(jù)送至相應的ddram和cgram地址,ddram是顯示數(shù)據(jù)的存儲器,存放lcd的顯示數(shù)據(jù);cgram是字符產(chǎn)生器,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論