《單片機項目化教程(C語言版)(第2版)》全套教學課件_第1頁
《單片機項目化教程(C語言版)(第2版)》全套教學課件_第2頁
《單片機項目化教程(C語言版)(第2版)》全套教學課件_第3頁
《單片機項目化教程(C語言版)(第2版)》全套教學課件_第4頁
《單片機項目化教程(C語言版)(第2版)》全套教學課件_第5頁
已閱讀5頁,還剩528頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

單片機項目化教程(C語言版)1-1

初識單片機一、什么是單片機單板機將CPU芯片、存儲器芯片、I/O接口芯片和簡單的輸入/輸出設(shè)備(小鍵盤、LED顯示器)等裝配在一塊印刷電路板上,再配上監(jiān)控程序(固化在ROM中),就構(gòu)成了一臺單板微型計算機(簡稱單板機)。單板機一、什么是單片機單板機單板機的輸入/輸出設(shè)備簡單,軟件資源少,使用不方便。早期主要用于微型計算機原理的教學及簡單的測控系統(tǒng),現(xiàn)在已很少使用。一、什么是單片機單片機是指集成在一個芯片上的微型計算機,它的各種功能部件,包括CPU、存儲器、基本輸入/輸出(I/O)接口電路、定時/計數(shù)器和中斷系統(tǒng)等,都制作在一塊集成芯片上,構(gòu)成一個完整的微型計算機。由于它的結(jié)構(gòu)與指令功能都是按照工業(yè)控制要求設(shè)計,因此單片機又被稱為微控制器(Micro-ControllerUnit,簡稱MCU)。一、什么是單片機單片機應用系統(tǒng)單片機+接口電路及外設(shè)等+軟件硬件單片機應用系統(tǒng)由硬件和軟件組成硬件是應用系統(tǒng)的基礎(chǔ)軟件是在硬件的基礎(chǔ)上對其資源進行合理調(diào)配和使用,從而完成應用系統(tǒng)所要求的任務,二者相互依賴,缺一不可。一、什么是單片機CPUROM/EPROMRAM定時/計數(shù)器并行接口串行接口中斷系統(tǒng)P0P1P2P3TXDRXDINT0INT1T0T1XTAL1XTAL2時鐘電路內(nèi)中斷外中斷外部事件計數(shù)64KB總線擴展控制器51單片機內(nèi)部結(jié)構(gòu)二、單片機的特點(1)體積小、結(jié)構(gòu)簡單、可靠性高

單片機把各功能部件集成在一個芯片上,內(nèi)部采用總線結(jié)構(gòu),減少了各芯片之間的連線,大大提高了單片機的可靠性與抗干擾能力。另外,其體積小,對于強磁場環(huán)境易于采取屏蔽措施,適合在惡劣環(huán)境下工作。二、單片機的特點

(2)控制能力強單片機雖然結(jié)構(gòu)簡單,但是它“五臟俱全”,已經(jīng)具備了足夠的控制功能。單片機具有較多的I/O口,CPU可以直接對I/O進行操作、算術(shù)操作、邏輯操作和位操作,指令簡單而豐富。所以單片機也是“面向控制”的計算機。二、單片機的特點(3)優(yōu)異的性能/價格比

由于單片機構(gòu)成的硬件結(jié)構(gòu)簡單、開發(fā)周期短、控制功能強、可靠性高,因此,在達到同樣功能的條件下,用單片機開發(fā)的控制系統(tǒng)比用其它類型的微型計算機開發(fā)的控制系統(tǒng)價格更便宜。二、單片機的特點(4)簡單易學由于單片機所需的外部器件很少,因此對于初學者只需要花費極少時間學習硬件電路的設(shè)計,而把大部分的時間放在程序設(shè)計上,這樣大大提高了學習效率。簡單易學感謝您的觀看Thanks

for

your

attention.

單片機項目化教程(C語言版)

1-2初識單片機一、進制十進制十進制數(shù)是我們最常用的,它的基數(shù)為“十”,所使用的數(shù)碼為0~9共10個數(shù)字?!胺晔M一,借一當十”是十進制數(shù)的特點。一、進制數(shù)字電路中只有兩種電平特性,即高電平和低電平,這也就決定了數(shù)字電路中使用二進制。二進制二進制是使用0和1兩個數(shù)碼來表示的數(shù),它的基數(shù)是2,二進制的特點是“逢二進一,借一當二”。一、進制二進制十進制數(shù)1二進制數(shù)是1B這里B是表示二進制數(shù)的后綴十進制數(shù)2二進制數(shù)是10B1+1=10B一、進制十進制的0~15表示成十六進制數(shù)分別為0~9,A,B,C,D,E,F(xiàn),即十進制的10對應十六進制的A,11對應B,12對應C,13對應D,14對應E,15對應F。十六進制特點是“逢十六進一,借一當十六”。是二進制的簡短表示形式。十六進制一、進制一般在十六進制數(shù)后面加上后綴H,表示該數(shù)為十六進制數(shù),如90H,ACH。十六進制表示方法在C語言編程時要寫成“0x90,0xac”,在數(shù)的最前面加上“0x”表示該數(shù)為十六進制數(shù)。一、進制二進制與十六進制的轉(zhuǎn)換當二進制數(shù)與十六進制數(shù)轉(zhuǎn)換時,因為四位二進制數(shù)正好可以表示0`F這16個數(shù)字,所以轉(zhuǎn)換時可以從最低位開始,每四位二進制數(shù)字分為一組,不足四位的用0補齊4位,對應進行相互轉(zhuǎn)換即可。例如,二進制數(shù)11110100101轉(zhuǎn)換成十六進制數(shù):(11110100101)2=(011110100101)2=(7A5)16一、進制二進制與十六進制的轉(zhuǎn)換十進制二進制十六進制十進制二進制十六進制000000810008100011910019200102101010A300113111011B401004121100C501015131101D601106141110E701117151111F一、進制我們在進行單片機編程時常常會用到其他較大的數(shù),這時我們用Windows系統(tǒng)自帶的計算器,可以很方便地進行二進制、八進制、十進制、十六進制數(shù)直接的任意轉(zhuǎn)換。感謝您的觀看Thanks

for

your

attention.

單片機項目化教程(C語言版)

1-2初識單片機二進制的邏輯運算與“與”運算是實現(xiàn)“必須都有,否則就沒有”這種邏輯關(guān)系的一種運算。C語言中運算符為“&”,其運算規(guī)則如下:0&0=0,0&1=1&0=0,1&1=1。其運算符號如圖所示。二進制的邏輯運算與0101010110101010&00000000二進制的邏輯運算或“或”運算是實現(xiàn)“只要其中之一有就有”這種邏輯關(guān)系的一種運算。C語言中運算符為“︱”其運算規(guī)則如下:0︱0=0,0︱1=1︱0=1,1︱1=1。其運算符號如圖所示。二進制的邏輯運算或0101010110101010|11111111二進制的邏輯運算非“非”運算是實現(xiàn)“求反”這種邏輯關(guān)系的一種運算。C語言中運算符為“!”,其運算規(guī)則如下:!0=1,!1=0。其運算符號如圖所示。二進制的邏輯運算非C語言中“~”表示“按位取反”運算。例如~01010101=(10101010)而上面講到的“!”運算只是對單一位進行運算。感謝您的觀看Thanks

for

your

attention.

單片機項目化教程(C語言版)

1-2初識單片機一、單片機的電平特性數(shù)字電路中只有兩種電平低電平高電平單片機的輸入和輸出為TTL電平一、單片機的電平特性低電平高電平單片機的輸入和輸出為TTL電平+5V

0V等價于邏輯1等價于邏輯0一、單片機的電平特性低電平高電平計算機的串口為RS-232C電平-12V

+12VRS-232C電平為負邏輯電平一、單片機的電平特性計算機單片機一、單片機的電平特性計算機與單片機之間通訊時需要加電平轉(zhuǎn)換芯片max232感謝您的觀看Thanks

for

your

attention.

單片機項目化教程(C語言版)1-3keil軟件使用Keil軟件使用打開keil軟件,版本μVision2,μvision3,μvision4都一樣,在這里用μvision4版本,如圖所示。Keil軟件使用Keil軟件使用我們要建立新的工程,選擇Project→newμvisionproject…Keil軟件使用選擇工程要保存的路徑,輸入工程文件名,如圖Keil軟件使用點擊保存后會彈出一個對話框,要求用戶選擇單片機型號,可以根據(jù)用戶使用的單片機來選擇,我們使用的STC89單片機是兼容51內(nèi)核的,KeilC51幾乎支持所有的51內(nèi)核單片機,51內(nèi)核具有通用型,如果程序用的資源不是太復雜,我們可以選擇任意一款51單片機內(nèi)核就行。Keil軟件使用如果出現(xiàn)下面的界面:單擊是就可以,意思是將單片機的啟動代碼添加到工程,我們不用修改。Keil軟件使用單擊菜單file→new選項,或者單擊界面上的快捷圖標Keil軟件使用

界面顯示的Text1就是我們剛剛加入的文件,但是這個文件與我們的工程還沒有直接聯(lián)系起來,單擊圖標,保存我們當前的text1文件,輸入要保存的文件名,同時要輸文件擴展名,擴展名很關(guān)鍵,用C語言編寫的程序,則必須為**.c,匯編語言必須為**.asm(**為文件名),文件名是用戶自己取的。填好文件名后單擊保存。Keil軟件使用回到編輯界面,單擊Target1前面的“+”號,然后在SourceGroup1上右鍵單擊,選擇AddFilestoGroupSourceGroup1,選中我們剛才建立的.c文件,這里是ledtest.c,單擊add,只需單擊一次。之后單擊Close就可以。

回到主界面后,單擊SourceGroup1前的“+”號,剛剛添加的文件顯示在里面。建立工程文件Keil軟件使用產(chǎn)生執(zhí)行文件感謝您的觀看Thanks

for

your

attention.

單片機應用技術(shù)項目二學習單片機硬件系統(tǒng)目錄contens任務一點亮第一個LED燈任務二LED燈閃爍任務三單片機控制蜂鳴器發(fā)聲教學目標單片機外部引腳及功能單片機最小系統(tǒng)單片機存儲器結(jié)構(gòu)單片機并行I/O端口重點、難點重點:單片機外部引腳及功能難點:單片機并行I/O端口教學目標及重點難點任務一

點亮第一個LED燈一、LED燈點亮二、89C51的信號引腳三、單片機最小系統(tǒng)電路四、51單片機的存儲器結(jié)構(gòu)一、LED燈點亮LED燈介紹半導體二極管的一種可以把電能轉(zhuǎn)化成光能;常簡寫為LED。發(fā)光二極管與普通二極管一樣是由一個PN結(jié)組成,也具有單向?qū)щ娦?。由鎵(Ga)與砷(AS)、磷(P)的化合物制成的二極管能發(fā)出不同的光。一、LED燈點亮

紅色貼片LED燈靠電流驅(qū)動,電壓1.8V~2.2V,電流1到20mA,在1到5mA亮度有所變化,5mA以上亮度基本無變化。一、LED燈點亮發(fā)光二極管規(guī)律:單向?qū)щ娦?,通過5mA左右電流即可發(fā)光,電流越大,亮度越強,但若電流過大會燒毀二極管,一般控制在3~20mA。工作電壓:

紅色發(fā)光二極管1.7-2.5V

綠色發(fā)光二極管2.0-2.4V

黃色發(fā)光二極管1.9-2.4V

藍/白色發(fā)光二極管3.0-3.8V一、LED燈點亮1.任務要求設(shè)計一個電路,STC89C51單片機的P0.0引腳連接一個LED燈,控制LED閃爍。以單片機為核心的電子設(shè)計硬件設(shè)計軟件設(shè)計單片機最小系統(tǒng)加上最簡單的輸出電路來驅(qū)動LED編程控制P0.0引腳的電平狀態(tài),使其持續(xù)一段時間的高電平,再持續(xù)一段時間的低電平2.任務分析一、LED燈點亮LED燈的工作原理陽極陰極1+2.2V0V0一、LED燈點亮10單片機限流LED燈的工作原理一、LED燈點亮LED燈的工作原理STC89C51

P0.00V單片機的I/O端口

單片機驅(qū)動一只發(fā)光二極管的原理電路圖一、LED燈點亮限流電阻二極管串聯(lián)電阻的目的是為了防止發(fā)光二極管和P0.0引腳流過的電流過大,燒毀二極管或單片機,所以該電阻也稱為“限流電阻”。限流電阻的選擇:假設(shè)電源電壓為VCC,發(fā)光二極管的導通壓降為VDD,導通時流過二極管的電流為I,則限流電阻R為:R=(VCC-VDD)/I例如,若二極管的導通壓降為2.2V,導通時流過的電流為5mA,則限流電阻為560Ω。一、LED燈點亮LED燈點亮程序voidmain(){

while(1) {

LED=1;

//點亮LED

}}#include<reg52.h>

//此文件中定義了單片機的一些特殊功能寄存器sbitLED=P0^0;

//將單片機的P0.0端口定義為led如何點亮LED燈?LED=1;如何熄滅LED燈?LED=0;sbit用法:sbit變量名=地址值;一、LED燈點亮LED燈電路連接圖二、89C51的信號引腳1.89C51單片機信號引腳簡介VCCVSSXTAL2

XTAL1RSTP0.0

P0.1

P0.2P0.3P0.4P0.5P0.6P0.7P1.0

P1.1

P1.2P1.3P1.4P1.5P1.6P1.7P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0ALEP3.0

P3.1

P3.2P3.3P3.4P3.5P3.6P3.72.振蕩電路:XTAL1、XTAL23.復位引腳:RST4.并行口:P0、P1、P2、P37.ALE:地址鎖存控制信號1.電源線:VCC(+5V)、VSS(地)EAPSEN5.EA:訪問程序存儲控制信號6.PSEN:外部ROM讀選通信號RXD/

TXD/

INT0/INT1/

T0/

T1/

WR/

RD/1

2

3

4

5

6

7

8

9

10111213141516171819

2040

39

38

37

36

35

34

33

32

313029282726252424222180318051875189C51二、89C51的信號引腳89C51系列單片機芯片引腳及其功能89C51是標準的40引腳雙列直插封裝(DIP)集成電路芯片1.主電源和時鐘振蕩電路引腳VCC(40腳) 運行和程序校驗時接+5V電源VSS

(20腳) 地線XTAL1(19腳)用作晶體振蕩電路的反相器輸入端,內(nèi)部接至振蕩器的反相放大器。當采用外部時鐘時,對于HMOS單片機,該引腳接地;對于CHMOS單片機,該引腳作為外部振蕩信號的輸入端。

XTAL2(18腳)用作晶體振蕩電路的反相器輸出端,內(nèi)部接至時鐘發(fā)生器。當采用外部時鐘時,對于HMOS單片機,該引腳接收振蕩器信號;對于CHMOS單片機,該引腳懸浮。二、89C51的信號引腳2.輸入/輸出(I/O)引腳P0.0~P0.7(39腳~32腳):8位漏極開路的雙向I/O口

當使用片外ROM和RAM時,用作低8位地址和數(shù)據(jù)分時復用。P1.0~P1.7(1腳~8腳):8位帶上拉電阻的準雙向I/O口

在編程/校驗期間,用作輸入低8位地址。對于8052,P1.0是定時器T2的計數(shù)輸入端;P1.1是定時器T2的外部輸入端。

P2.0~P2.7(21腳~28腳):8位帶上拉電阻的準雙向I/O口

當使用片外ROM和RAM時,輸出高8位地址。

P3.0~P3.7(10腳~17腳):8位帶上拉電阻的準雙向I/O口

P3口具有第二功能在單片機中,“口”是一個集數(shù)據(jù)輸入緩沖、輸出驅(qū)動及鎖存等多項功能于一體的I/O電路。二、89C51的信號引腳3.控制信號引腳RST/VPD(9引腳):RST為復位信號輸入端。當RST端保持2個機器周期以上高電平時,單片機完成復位操作。第二功能VPD為內(nèi)部RAM的備用電源輸入端。當主電源VCC發(fā)生斷電,降到一定電壓值時,可通過VPD為單片機內(nèi)部RAM提供電源,以保護片內(nèi)RAM中的信息不丟失,上電后能繼續(xù)正常運行。ALE /PROG(30引腳):ALE為地址鎖存允許信號在系統(tǒng)擴展時,ALE用于控制把P0口輸出的低8位地址送入鎖存器鎖存起來,以實現(xiàn)低8位地址和數(shù)據(jù)的分時傳送。由于ALE是以1/6晶振頻率的固定頻率輸出的正脈沖,故可作為外部時鐘或外部定時脈沖使用。ALE可驅(qū)動8個LSTTL門。第二功能PROG是對8751內(nèi)部EPROM編程時的編程脈沖輸入端。二、89C51的信號引腳PSEN(29引腳):外部程序存儲器(ROM)讀選通信號訪問外部ROM時,PSEN產(chǎn)生負脈沖作為外部ROM選通信號。訪問外部RAM或內(nèi)部ROM時,不會產(chǎn)生有效的PSEN信號。

PSEN可驅(qū)動8個LSTTL門。EA/VPP(31引腳):EA為訪問程序存儲器(ROM)控制信號對8051和8751,它們的片內(nèi)有4KB的ROM,當EA為高電平時,若訪問的地址空間在0~4KB范圍內(nèi),CPU訪問片內(nèi)ROM;若訪問的地址范圍超過4KB時,CPU將自動訪問外部ROM。EA保持低電平,則訪問外部ROM。對于8031,EA必須接地,只能訪問外部ROM。二、89C51的信號引腳P3口的第二功能口線第二功能功能含義P3.0RXD串行數(shù)據(jù)接收P3.1TXD串行數(shù)據(jù)發(fā)送P3.2INT0外部中斷0申請P3.3INT1外部中斷1申請P3.4T0定時器/計數(shù)器0計數(shù)輸入P3.5T1定時器/計數(shù)器1計數(shù)輸入P3.6WR外部RAM寫選通P3.7RD外部RAM讀選通三、單片機最小系統(tǒng)電路三、單片機最小系統(tǒng)電路三、單片機最小系統(tǒng)電路1.單片機時鐘電路單片機本身是一個復雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路應在唯一的時鐘信號控制下嚴格地按時序協(xié)調(diào)工作。時鐘電路用于產(chǎn)生單片機工作所需要的時鐘信號。三、單片機最小系統(tǒng)電路1.單片機時鐘電路時鐘信號的產(chǎn)生(內(nèi)部方式時鐘)89C51芯片內(nèi)部有一個高增益反相放大器,其輸入端為芯片引腳XTAL1,輸出端為引腳XTAL2。外接作為反饋元件的晶體后成為自激振蕩器,晶體呈感性,與微調(diào)電容C1、C2構(gòu)成并聯(lián)諧振回路。

振蕩器的頻率主要取決于晶體,電容有微調(diào)作用。晶體的振蕩頻率范圍通常是1.2~12MHz,電容C1、C2一般取30pF。晶體振蕩頻率越高,系統(tǒng)的時鐘頻率越高,單片機運行速度越快。三、單片機最小系統(tǒng)電路1.單片機時鐘電路

關(guān)于89C51系列單片機的時序概念有4個,可用定時單位來說明,從小到大依次是:節(jié)拍、狀態(tài)、機器周期和指令周期,下面分別加以說明。1)節(jié)拍把振蕩脈沖的周期定義為節(jié)拍,用P表示,也就是晶振的振蕩頻率fosc。2)狀態(tài)振蕩脈沖fosc經(jīng)過二分頻后,就是單片機時鐘信號的周期,定義為狀態(tài),用S表示。一個狀態(tài)包含兩個節(jié)拍,其前半周期對應的節(jié)拍叫P1,后半周期對應的節(jié)拍叫P2。3)機器周期

89C51系列單片機采用定時控制方式,有固定的機器周期。規(guī)定一個機器周期的寬度為6個狀態(tài),即12個振蕩脈沖周期,因此機器周期就是振蕩脈沖的十二分頻。小提示當振蕩脈沖頻率為12MHz時,一個機器周期為1μs;當振蕩脈沖頻率為6MHz時,一個機器周期為2μs。三、單片機最小系統(tǒng)電路1.單片機時鐘電路牢牢記住振蕩周期=晶振頻率fosc的倒數(shù);1個機器周期=12個振蕩周期;1個指令周期=1、2、4個機器周期三、單片機最小系統(tǒng)電路2.單片機復位電路

復位方式和復位電路復位是單片機的初始化操作,其主要功能是把PC初始化為0000H,使單片機從0000H單元開始執(zhí)行程序。復位后,單片機才能開始正常工作。RST引腳是復位信號的輸入端,在單片機的RST端加上高電平(持續(xù)2個機器周期以上),單片機即進入復位工作方式。復位不影響MCS-51單片機內(nèi)部RAM的狀態(tài),只要RST輸入端保持高電平,將循環(huán)復位。RST返回低電平后,CPU從0000H地址開始執(zhí)行程序。單片機系統(tǒng)在運行出錯或進入死循環(huán)時,可按復位鍵重新啟動。三、單片機最小系統(tǒng)電路2.單片機復位電路復位后單片機有關(guān)寄存器的狀態(tài)寄存器復位狀態(tài)PC0000HACC00HPSW00HSP07HDPTR0000HIP×××00000BIE0××00000BP0~P3FFHTCON00H寄存器復位狀態(tài)TMOD00HTL000HTH000HTL100HTH100HSCON00HSBUF未定PCON(HMOS)0×××××××BPCON(CHMOS)0×××0000B三、單片機最小系統(tǒng)電路2.單片機復位電路(PC)=0000H表示復位后程序的入口地址為0000H;(PSW)=00H,其中RS1(PSW.4)=0,RS0(PSW.3)=0,表示復位后單片機選擇工作寄存器第0組;(SP)=07H表示復位后堆棧在片內(nèi)RAM的08H單元處建立;P0口~P3口鎖存器為全1狀態(tài),說明復位后這些并行接口可以直接作輸入口,無須向端口寫1;定時器/計數(shù)器、串行口、中斷系統(tǒng)等特殊功能寄存器復位后的狀態(tài)對各功能部件工作狀態(tài)的影響,將在后續(xù)有關(guān)章節(jié)介紹。三、單片機最小系統(tǒng)電路2.單片機復位電路89C51基本復位電路有3種:上電復位、按鍵電平復位和按鍵脈沖復位。上電自動復位:通過電容充電來實現(xiàn)。接通電源即可完成系統(tǒng)的復位。按鍵手動復位:按下復位按鈕即可復位。分為電平方式和脈沖方式兩種。四、51單片機的存儲器結(jié)構(gòu)1

2

3

4

5

6

7

8

9

10

11

12

13

1428

27

26

25

24

23

22

2120

19

18

17

16

15EPROM27641

2

3

4

5

6

7

8

9

10

11

12

13

1428

27

26

25

24

23

22

2120

19

18

17

16

15EPROM27641

2

3

4

5

6

7

8

9

10111213141516171819

2040

39

38

37

36

35

34

33

32

31302928272625242422211

2

3

4

5

6

7

8

9

10

11

12

13

1428

27

26

25

24

23

22

2120

19

18

17

16

15RAM62641

2

3

4

5

6

7

8

9

10

11

12

13

1428

27

26

25

24

23

22

2120

19

18

17

16

15RAM6264

器80318751805189C51片內(nèi)RAM片內(nèi)ROM256B(字節(jié))4K64K64K四、51單片機的存儲器結(jié)構(gòu)(1)程序存儲器(ROM)程序存儲器內(nèi)部外部0000H0FFFH(4K)0000HFFFFH(64K)0000H0FFFH(4K)0000H0001H0002H(PC)0000H是程序執(zhí)行的起始單元,

在這三個單元存放一條

無條件轉(zhuǎn)移指令中斷5中斷4中斷3中斷2中斷10003H000BH0013H001BH0023H002BH外部中斷0定時器0中斷外部中斷1定時器1中斷串行口中斷8位...0FFFH0FFEHEA=1EA=0程序存儲器資源分布中斷入口地址四、51單片機的存儲器結(jié)構(gòu)(1)程序存儲器(ROM)當芯片引腳EA為高電平時,89C51的程序計數(shù)器PC在0000H~0FFFH(4KB)地址時從內(nèi)部ROM取指令,超過4KB時,CPU自動轉(zhuǎn)向外部ROM執(zhí)行程序。如果EA為低電平(接地),則所有取指令操作均在外部ROM中進行,這時外部擴展的ROM從0000H開始編址。四、51單片機的存儲器結(jié)構(gòu)0000HFFFFH(64K)內(nèi)部外部(2)數(shù)據(jù)存儲器(RAM)數(shù)據(jù)存儲器00HFFH7FH80H(高128B)(低128B)RAM專用

寄存器00H07H08H0FH10H17H18H1FH0區(qū)R0R7R0R7R0R7R0R71區(qū)2區(qū)3區(qū)工作寄存器區(qū)可位尋址區(qū)20H2FH7F78070030H7FH數(shù)據(jù)緩沖區(qū)/堆棧區(qū)內(nèi)部RAM存儲器

11第3區(qū)18H~1FH

01第1區(qū)08H~0FHRS1RS0寄存器區(qū)片內(nèi)RAM地址

00第0區(qū)00H~07H

10第2區(qū)10H~17H工作寄存器區(qū)選擇位RS0、RS1PSW位地址

CYACF0RS1RS0OVF1P四、51單片機的存儲器結(jié)構(gòu)RAM用于存放運算中間結(jié)果,用作緩沖和數(shù)據(jù)暫存,以及設(shè)置特征標志等。8051片內(nèi)有256B的RAM空間,片外有64KB的RAM空間,兩個存儲空間獨立尋址。內(nèi)部RAM低128字節(jié)地址空間(00H~7FH)為內(nèi)部RAM區(qū),是供用戶使用的數(shù)據(jù)存儲器單元,作為處理問題的數(shù)據(jù)緩沖器。高128字節(jié)地址空間(80H~FFH)為特殊功能寄存器區(qū)(SFR區(qū)),共21個特殊功能寄存器,也就是128個字節(jié)單元中只有21個字節(jié)單元能夠被用戶使用。內(nèi)部RAM存儲空間小,僅用8位地址尋址,但存取速度比外部RAM快。(2)數(shù)據(jù)存儲器(RAM)四、51單片機的存儲器結(jié)構(gòu)RAM用于存放運算中間結(jié)果,用作緩沖和數(shù)據(jù)暫存,以及設(shè)置特征標志等。8051片內(nèi)有256B的RAM空間,片外有64KB的RAM空間,兩個存儲空間獨立尋址。內(nèi)部RAM低128字節(jié)地址空間(00H~7FH)為內(nèi)部RAM區(qū),是供用戶使用的數(shù)據(jù)存儲器單元,作為處理問題的數(shù)據(jù)緩沖器。高128字節(jié)地址空間(80H~FFH)為特殊功能寄存器區(qū)(SFR區(qū)),共21個特殊功能寄存器,也就是128個字節(jié)單元中只有21個字節(jié)單元能夠被用戶使用。內(nèi)部RAM存儲空間小,僅用8位地址尋址,但存取速度比外部RAM快。(2)數(shù)據(jù)存儲器(RAM)任務二

單片機控制LED燈閃爍一、LED燈閃爍設(shè)計二、LED閃爍的延時方法一、LED燈閃爍設(shè)計如何點亮LED燈?如何熄滅LED燈?單向?qū)ㄐ躁枠O陰極1+3V00VSTC89C51

P0.00V單片機的I/O端口

單片機驅(qū)動一只發(fā)光二極管的原理電路一、LED燈閃爍設(shè)計LED燈點亮程序如何點亮LED燈?如何熄滅LED燈?voidmain(){

while(1) {

}}#include<reg52.h>LED=1;//點亮LEDLED=0;//熄滅LEDsbitLED=P0^0;LED=1;LED=0;點亮和熄滅的間隔時間怎么調(diào)控?二、LED閃爍的延時方法常用的延時方法1.非精確延時方法

1.for(i=0;i<100;i++); 2.i=100;while(i--);2.精確延時方法

1.利用庫函數(shù)_nop_();(需要include<intrins.h>) 2.利用定時器進行定時 (后邊的課程進行介紹)二、LED閃爍的延時方法1.非精確控制方法-延時函數(shù)總循環(huán)次數(shù)已確定的情況下,可采用for語句形式為:for語句的一般形式:

for(循環(huán)變量賦初值;循環(huán)繼續(xù)條件;循環(huán)變量增值)

{

循環(huán)體語句組;

} 分隔符為分號請問:下述程序?qū)崿F(xiàn)了什么功能?main(){inti,y=0;for(i=1;i<=10;i++){y=y+i;}}二、LED閃爍的延時方法1.非精確控制方法-延時函數(shù)while語句用來實現(xiàn)“當型”循環(huán),執(zhí)行過程:首先判斷表達式,當表達式的值為真(非0)時,反復執(zhí)行循環(huán)體。為假(0)時執(zhí)行循環(huán)體外面的語句。循環(huán)體循環(huán)繼續(xù)的條件表達式下一條語句非0(真)0(假)循環(huán)體語句組while執(zhí)行過程格式:while(循環(huán)繼續(xù)的條件表達式)

{

語句組;}花括號不能丟掉!二、LED閃爍的延時方法請問:下述程序?qū)崿F(xiàn)了什么功能?main(){inti,sum=0;while(i<=10) { sum=sum+i; i++; }}1.非精確控制方法-延時函數(shù)二、LED閃爍的延時方法延時子函數(shù)按照規(guī)定的格式,將一個子任務編寫成一個函數(shù)。函數(shù)的定義函數(shù)的劃分函數(shù)從形式上劃分,分為無參數(shù)函數(shù)和有參數(shù)函數(shù)及空函數(shù)。二、LED閃爍的延時方法延時子函數(shù)(1)無參函數(shù):僅完成某個功能,不需回送到執(zhí)行的具體結(jié)果。例如:無參數(shù)傳遞的延時子程序:循環(huán)的次數(shù)決定了你延時的時間長短。形式1:voiddelay(){unsignedinti;for(i=0;i<10000;i++);}形式2:voiddelay(){unsignedinti,j;for(i=0;i<100;i++)for(j=0;j<200;j++);}二、LED閃爍的延時方法延時子函數(shù)(2)有參函數(shù):通過執(zhí)行函數(shù)得到一個明確的執(zhí)行結(jié)果,該結(jié)果需要回送到調(diào)用函數(shù)中。例如:有參數(shù)傳遞的延時子程序:可以隨時改變k的傳遞值以達到不同的延時。voiddelay(unsignedintk){ unsignedinti,j; for(i=0;i<k;i++)for(j=0;j<200;j++);}二、LED閃爍的延時方法函數(shù)定義的格式延時子函數(shù)函數(shù)類型函數(shù)名(類型形參1,類型形參2,…)

{

說明部分語句部分

}二、LED閃爍的延時方法函數(shù)定義的格式延時子函數(shù)

1.類型符表示函數(shù)的返回值類型:

若無返回值:類型符void;若有返回值:函數(shù)名前有類型符,且利用return語句將函數(shù)值返回調(diào)用函數(shù)。2.return語句:格式return表達式;return(表達式);編寫函數(shù)時,若求函數(shù)值,就要用return,若函數(shù)類型為void,則不用return語句。二、LED閃爍的延時方法延時子函數(shù)功能:return語句先計算表達式的值,再將該值作為函數(shù)運算的結(jié)果回送給調(diào)用者。如果函數(shù)類型與return語句中表達式類型不一致,系統(tǒng)以函數(shù)類型為準,返回時自動進行類型轉(zhuǎn)換。二、LED閃爍的延時方法延時子函數(shù)注意:在這里我使用的變量定義為unsignedint代表的是無符號整型,其取值范圍是0~65535,循環(huán)變量的值不要超過這個數(shù)值,否則就會出現(xiàn)死循環(huán),就走不出延時子程序了。這也是大家經(jīng)常犯的一個錯誤。例:下面就是一個錯誤的實例。voiddelay(){unsignedintk;for(k=0;k<70000;k++);}該程序錯誤的原因是K永遠加不到70000,所以無法跳出死循環(huán)。二、LED閃爍的延時方法基本數(shù)據(jù)類型類型符號關(guān)鍵字數(shù)的表示范圍所占位數(shù)整型字符型實型有無(signed)int16-32768~32767(signed)short16-32768~32767(signed)long32-2147483648~214748364716unsignedint0~65535320~4294967295unsignedlongintunsignedshortint160~65535有float323.4e-38~3.4e38有double641.7e-308~1.7e308有char8-128~127無unsignedchar80~255二、LED閃爍的延時方法LED燈點亮程序如何點亮LED燈?如何熄滅LED燈?voidmain(){

while(1) {

}}#include<reg52.h>LED=1;//點亮LEDLED=0;//熄滅LEDsbitLED=P0^0;LED=1;LED=0;點亮和熄滅的間隔時間怎么調(diào)控?好了,現(xiàn)在有了延時函數(shù)了,那么整個程序應該如何去修改呢?二、LED閃爍的延時方法LED燈點亮程序#include<reg52.h>sbitLED=P0^0;voiddelay(unsignedinti){ while(i--); }voidmain(){

while(1)

{ LED=1;

//點亮LED delay(10000);LED=0;

//熄滅LEDdelay(10000);

}}任務三

單片機控制蜂鳴器發(fā)聲一、蜂鳴器結(jié)構(gòu)認識二、蜂鳴器模塊電路三、單片機控制蜂鳴器設(shè)計一、蜂鳴器結(jié)構(gòu)認識蜂鳴器結(jié)構(gòu)認識蜂鳴器從結(jié)構(gòu)上分為有源和無源,有綠色電路板的一種是無源蜂鳴器,沒有電路板而用黑膠封閉的一種是有源蜂鳴器。一、蜂鳴器結(jié)構(gòu)認識蜂鳴器結(jié)構(gòu)認識電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場,振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。多諧振蕩器由晶體管或集成電路構(gòu)成,當接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。一、蜂鳴器結(jié)構(gòu)認識蜂鳴器結(jié)構(gòu)認識在單片機應用的設(shè)計上,很多方案都會用到蜂鳴器,大部分都是使用蜂鳴器來做提示或報警,比如按鍵按下、開始工作、工作結(jié)束或是故障等等。自激蜂鳴器是直流電壓驅(qū)動的,不需要利用交流信號進行驅(qū)動,只需對驅(qū)動口輸出驅(qū)動電平并通過放大電路放大驅(qū)動電流就能使蜂鳴器發(fā)出聲音,非常簡單。一、蜂鳴器結(jié)構(gòu)認識蜂鳴器結(jié)構(gòu)認識改變單片機引腳輸出波形的頻率,就可以調(diào)整控制蜂鳴器音調(diào),產(chǎn)生各種不同音色、音調(diào)的聲音。改變輸出電平的高低電平占空比,則可以控制蜂鳴器的聲音大小。二、蜂鳴器模塊電路蜂鳴器模塊電路三、單片機控制蜂鳴器設(shè)計程序設(shè)計/************************************************************************

蜂鳴器實驗 ************************************************************************/#include"reg52.h" //此文件中定義了單片機的一些特殊功能寄存器typedefunsignedintu16; //對數(shù)據(jù)類型進行聲明定義typedefunsignedcharu8;sbitbeep=P1^5; 三、單片機控制蜂鳴器設(shè)計程序設(shè)計voiddelay(u16i){ while(i--); }voidmain(){ while(1) { beep=~beep;

delay(100);//延時大約100us通過修改此延時時間達到不同的發(fā)聲

}}三、單片機控制蜂鳴器設(shè)計硬件設(shè)計蜂鳴器硬件連接1.單片機的程序計數(shù)器PC用來_________________。A.存放指令B.存放正在執(zhí)行的指令地址C.存放下一條指令地址D.存放上一條指令地址練習題2.PSW中RS1和RS0用來______________。A.選擇工作寄存器組B.指示復位C.選擇定時器D.選擇工作方式3.單片機上電復位后,PC的內(nèi)容為___________。A.0x0000B.0x0003C.0x000BD.0x08004.使用單片機開發(fā)系統(tǒng)測試C語言程序時,首先應新建文件,該文件的擴展名是___。A..cB..hexC..binD..asm練習題5.單片機能夠直接運行的程序是_________。A.匯編源程序B.C語言源程序C.高級語言程序D.機器語言源程序1.51系列單片機的存儲器主要由4個物理存儲空間,即_______、_______、________、________。2.51系列單片機的應用程序一般存放在____________中。感謝您的觀看單片機項目化教程(C語言版)

3-1控制8個LED發(fā)光二極管閃爍任務說明本任務通過51系列單片機控制8個發(fā)光二極管閃爍,熟悉單片機I/O端口控制及其編程方法。任務分析用單片機的P1端口控制8個發(fā)光二極管,下載編寫好的C程序到單片機中,實現(xiàn)LED二極管閃爍。電路設(shè)計采用單片機P1端口控制8個發(fā)光二極管閃爍的硬件電路如圖所示電路設(shè)計單片機P1口經(jīng)過限流電阻R直接控制發(fā)光二極管,電阻起到限流作用。8個發(fā)光二極管的陽極并接在一起與電源相聯(lián)接。當P1端口的引腳輸出為低電平“0”時,相應的發(fā)光二極管被點亮。程序設(shè)計1#include<reg51.h> //包含頭文件2voiddelay(unsignedinti); //延時函數(shù)聲明3voidmain() //主函數(shù)4{5while(1){6P1=0xff; //將P1口的八位引腳置1,熄滅八個LED7delay(1000); //延時8P1=0x00; //將P1口的八位引腳清0,點亮八個LED9delay(500); //延時10}11}12voiddelay(unsignedchari) //延時函數(shù),無符號字符型變量i為形式參數(shù)13{14unsignedcharj,k; //定義無符號字符型變量j和k15for(k=0;k<i;k++) //雙重for循環(huán)語句實現(xiàn)軟件延時16for(j=0;j<200;j++);17}1.并行I/O端口MCS-51系列單片機共有四個8位并行I/O口,分別用P0、P1、P2、P3表示,以實現(xiàn)數(shù)據(jù)的輸入輸出功能。每個I/O口既可以使用單個引腳按位操作,也可以按字節(jié)操作使用8個引腳。1.并行I/O端口MCS-51是標準的40引腳雙列直插式集成電路芯片,引腳分布如圖3.2所示。P0.0-P0.7P0口8位雙向口線(在引腳的39-32號端子)。P1.0-P1.7P1口8位雙向口線(在引腳的1-8號端子)。P2.0-P2.7P2口8位雙向口線(在引腳的21-28號端子)。P3.0-P3.7P3口8位雙向口線(在引腳的10-17號端子)。1.并行I/O端口P0口的口線邏輯電路如圖3.3所示。由圖可見,P0端口由鎖存器、輸入緩沖器、切換開關(guān)、一個與非門、一個與門及場效應管驅(qū)動電路構(gòu)成。標號為P0.X引腳的圖標,表示P0.X引腳可以是P0.0到P0.7的任何一位。(1)P0口①P0口的結(jié)構(gòu)1.并行I/O端口在電路中包含一個數(shù)據(jù)輸出D鎖存器、兩個三態(tài)數(shù)據(jù)輸入緩沖器、一個輸出控制電路和一個數(shù)據(jù)輸出的驅(qū)動電路。輸出控制電路有一個與門、一個非門和一個多路開關(guān)MUX構(gòu)成;輸出驅(qū)動電路由場效應晶體管T1和T2組成,受輸出控制電路控制,當柵極輸入低電平時,T1、T2截止;當柵極輸入高電平時,T1、T2導通。(1)P0口①P0口的結(jié)構(gòu)1.并行I/O端口當P0口作為輸出口使用時,內(nèi)部總線將數(shù)據(jù)送入鎖存器,內(nèi)部的寫脈沖加在鎖存器時鐘端CP上,鎖存數(shù)據(jù)到Q端。經(jīng)過MUX,T2反相后正好是內(nèi)部總線的數(shù)據(jù),送到P0口引腳輸出。當P0口作為輸入口使用時,應區(qū)分讀引腳和讀端口兩種情況。所謂讀引腳,就是讀芯片引腳的狀態(tài),這時使用下方的數(shù)據(jù)緩沖器,“讀引腳”信號把緩沖器打開,把端口引腳上的數(shù)據(jù)從緩沖器通過內(nèi)部總線讀進來。讀端口是指通過上面的緩沖器讀鎖存器Q端的狀態(tài)。讀端口是為了適應對I/O口進行“讀-修改-寫”操作語句的需要。(1)P0口②P0作為通用I/O端口使用1.并行I/O端口P1口的結(jié)構(gòu)最簡單,用途也單一,僅作為數(shù)據(jù)輸入/輸出端口使用。輸出的信息有鎖存,輸入有讀引腳和讀鎖存器之分。P1的口線邏輯電路如圖3.4所示。(2)P1口①P1口的結(jié)構(gòu)1.并行I/O端口由圖3.4可見,P1端口與P0端口的主要差別在于,P1端口用內(nèi)部上拉電阻R代替了P0端口的場效應管T1,并且輸出的信息僅來自內(nèi)部總線。由內(nèi)部總線輸出的數(shù)據(jù)經(jīng)鎖存器反相和場效應管反相后,鎖存在端口線上,因此,P1端口是具有輸出鎖存的靜態(tài)口。注意:P1口是準雙向口,只能作為通用I/O口使用。P1口作為輸出口使用時,無需再外接上拉電阻。P1口作為輸入口使用時,應區(qū)分讀引腳和讀端口。讀引腳時,必須先向電路中的鎖存器寫入“1”,使輸出級的FET截止。(2)P1口①P1口的結(jié)構(gòu)1.并行I/O端口由圖可見,P2端口在片內(nèi)既有上拉電阻,又有切換開關(guān)MUX,所以P2端口在功能上兼有P0端口和P1端口的特點。這主要表現(xiàn)在輸出功能上,當切換開關(guān)向下接通時,從內(nèi)部總線輸出的一位數(shù)據(jù)經(jīng)反相器和場效應管反相后,輸出在端口引腳線上;當多路開關(guān)向上時,輸出的一位地址信號也經(jīng)反相器和場效應管反相后,輸出在端口引腳線上。因此,P2端口的多路開關(guān)總是在進行切換,分時地輸出從內(nèi)部總線來的數(shù)據(jù)和從地址信號線上來的地址。因此P2端口是動態(tài)的I/O端口,輸出數(shù)據(jù)雖被鎖存,但不是穩(wěn)定地出現(xiàn)在端口線上。在輸入功能方面,P2端口與P0端口相同,有讀引腳和讀鎖存器之分,并且P2端口也是準雙向口。(3)P2口①P2口的結(jié)構(gòu)1.并行I/O端口注意:P2口是準雙向口,在實際應用中,可以用于為系統(tǒng)提供高8位地址,也能作為通用I/O口使用。P2口作為通用I/O口的輸出口使用時,與P1口一樣無需再外接上拉電阻。P2口作為通用I/O口的輸入口使用時,應區(qū)分讀引腳和讀端口。讀引腳時,必須先向鎖存器寫入“1”。(3)P2口①P2口的結(jié)構(gòu)1.并行I/O端口P3端口和Pl端口的結(jié)構(gòu)相似,區(qū)別僅在于P3端口的各端口線有兩種功能選擇。當處于第一功能時,第二輸出功能線為1,此時,內(nèi)部總線信號經(jīng)鎖存器和場效應管輸入/輸出,其作用與P1端口作用相同,也是靜態(tài)準雙向I/O端口。當處于第二功能時,鎖存器輸出1,通過第二輸出功能線輸出特定的內(nèi)含信號,在輸入方面,即可以通過緩沖器讀入引腳信號,還可以通過替代輸入功能讀入片內(nèi)的第二功能信號。由于輸出信號鎖存并且有雙重功能,故P3端口為靜態(tài)雙功能端口。(4)P3口①P3口的結(jié)構(gòu)1.并行I/O端口P3端口處于第二功能的條件是:①串行I/O處于運行狀態(tài)(RXD,TXD)②打開了處部中斷(INT0,INT1)③定時器/計數(shù)器處于外部計數(shù)狀態(tài)(T0,T1)④執(zhí)行讀寫外部RAM的指令(RD,WR)在應用中,如不設(shè)定P3端口各位的第二功能(WR,RD信號的產(chǎn)生不用設(shè)置),則P3端口線自動處于第一功能狀態(tài),也就是靜態(tài)I/O端口的工作狀態(tài)。在更多的場合是根據(jù)應用的需要,把幾條端口線設(shè)置為第二功能,而另外幾條端口線處于第一功能運行狀態(tài)。在這種情況下,不宜對P3端口作字節(jié)操作,需采用位操作的形式。(4)P3口口線

第二功能信號名稱

P3.0RXD串行數(shù)據(jù)接收P3.1

TXD串行數(shù)據(jù)發(fā)送P3.2INT0外部中斷0申請P3.3INT1外部中斷1申請P3.4T0定時器/計數(shù)器0計數(shù)輸入P3.5

T1定時器/計數(shù)器1計數(shù)輸入P3.6WR外部RAM寫選通P3.7RD外部RAM讀選通2.簡單C語言1//功能:控制八個信號燈閃爍程序2#include<reg51.h> //包含頭文件3voiddelay(unsignedchari); //延時函數(shù)聲明4voidmain() //主函數(shù)5{6while(1){7P1=0xf0; //將P1口的高四位引腳置1,低四位置08delay(250); //延時9P1=0x0f; //將P1口的高四位引腳置0,低四位置110delay(250); //延時11}12}13voiddelay(unsignedchari) //延時函數(shù),無符號字符型變量i為形式參數(shù)14{15unsignedcharj,k; //定義無符號字符型變量j和k16for(k=0;k<i;k++) //雙重for循環(huán)語句實現(xiàn)軟件延時17for(j=0;j<200;j++);18}(1)第一個C語言程序2.簡單C語言上述程序中,第1行:對程序進行說明,包括程序名稱和功能?!?/”是單行注釋符號,用來說明相應語句的意義,方便程序的編寫、調(diào)試及維護工作,提高程序的可讀性。第二行:#include<reg51.h>是文件包含語句,表示將語句中指定文件的全部內(nèi)容復制到程序中,reg51.h是KeilC51編譯器提供的頭文件,該文件包含了MCS-51系列單片機特殊功能寄存器SFR和位名稱的定義。reg51.h是為了通知C51編譯器,程序中用到的符號P1是MCS-51單片機的P1口。第三行:延時函數(shù)聲明。在C語言中,函數(shù)遵循先聲明、后調(diào)用的原則。第4-12行:定義主函數(shù)main()。main函數(shù)是C語言中的主函數(shù),也是程序開始執(zhí)行的函數(shù)。第13-18行:定義延時函數(shù)delay(),控制發(fā)光二極管的閃爍速度。(1)第一個C語言程序2.簡單C語言一個C語言源程序是由一個或若干個函數(shù)組成,每一個函數(shù)完成相對獨立的功能。每個C程序都必須有(且僅有)一個主函數(shù)main(),程序的執(zhí)行總是從主函數(shù)開始,調(diào)用其他函數(shù)后返回主函數(shù)main(),不管函數(shù)的排列順序如何,最后在主函數(shù)中結(jié)束整個程序。一個函數(shù)有兩部分組成:函數(shù)定義和函數(shù)體。函數(shù)定義部分包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)名、參數(shù)類型等。main()函數(shù)后面大括號內(nèi)的部分稱為函數(shù)體,函數(shù)體由定義數(shù)據(jù)類型的說明部分和實現(xiàn)函數(shù)功能的執(zhí)行部分組成。C語言程序中可以有預處理命令,預處理命令通常放在源程序的最前面。C語言程序使用“;”作為語句的結(jié)束符,一條語句可以多行書寫,也可以一行書寫多條語句。(2)C語言基本結(jié)構(gòu)2.簡單C語言①簡潔緊湊、靈活方便,運算符豐富②數(shù)據(jù)結(jié)構(gòu)豐富③C是結(jié)構(gòu)式語言④C語法限制不太嚴格、程序設(shè)計自由度大⑤C語言適用范圍大,可移植性好。(3)C語句特點2.簡單C語言C語言程序的執(zhí)行部分由語句組成。C語言提供了豐富的程序控制語句,按照結(jié)構(gòu)化程序設(shè)計的基本結(jié)構(gòu):順序結(jié)構(gòu)、選擇結(jié)構(gòu)和循環(huán)結(jié)構(gòu),組成各種復雜程序。這些語句主要包括表達式語句、復合語句、選擇語句和循環(huán)語句等。表達式語句是最基本的C語言語句。表達式語句由表達式加上分號“;”組成,其一般形式如下:表達式;執(zhí)行表達式語句就是計算表達式的值。在C語言中有一個特殊的表達式語句,稱為空語句??照Z句中只有一個分號“;”,程序執(zhí)行空語句時需要占用一條指令的執(zhí)行時間,但是什么也不做。在C51程序中常常把空語句作為循環(huán)體,用于消耗CPU時間等待事件發(fā)生。把多個語句用大括號{}括起來,組合在一起形成具有一定功能的模塊,這種由若干條語句組合而成的語句塊稱為復合語句。在程序中應把復合語句看成是單條語句,而不是多條語句。復合語句在程序運行時,{}中的各行單語句是依次順序執(zhí)行的。在C語言的函數(shù)中,函數(shù)體就是一個復合語句。(4)C語言表達式語句和復合語句3.C語言數(shù)據(jù)單片機程序中處理的數(shù)據(jù)有常量和變量兩種形式:常量的值在執(zhí)行期間是不能發(fā)生變化的,而變量的值在程序執(zhí)行期間可以發(fā)生變化。(1)C語言標識符、常量和變量①標識符C語言用來標識變量名、符號常量名、函數(shù)名、數(shù)組名、類型名、文件名的有效字符序列稱為標識符。標識符的長度可以是一個或多個字符。C語言規(guī)定標識符只能由字母(A~Z,a~z)、數(shù)字(0~9)和下劃線(_)3種字符組成,而且第一個字符必須為字母或下劃線。例如,a1、s_1、_3、ggde2f_1、PI都是合法的標識符,而123、d@si、s*b、+d、b>3都是不合法的標識符。3.C語言數(shù)據(jù)(1)C語言標識符、常量和變量①標識符下面列出的是C語言常用的關(guān)鍵字:break case char classconst continue delete dodouble else for friendfloat int if longnew private protected publicreturn short sizeof staticswitch void whlie 3.C語言數(shù)據(jù)(1)C語言標識符、常量和變量②常量與符號常量常量的數(shù)據(jù)類型有整型、浮點型、字符型、字符串型和位類型。a.整型常量可以表示為十進制,如123,0,-89等。十六進制則以0x開頭如0x34,-0x3B等。長整型就在數(shù)字后面加字母L,如104L,034L,0xF340等。b.浮點型常量可分為十進制和指數(shù)表示形式。十進制由數(shù)字和小數(shù)點組成,如0.888,3345.345,0.0等,整數(shù)或小數(shù)部分為0,可以省略但必須有小數(shù)點。指數(shù)表示形式為[±]數(shù)字[.數(shù)字]e[±]數(shù)字,[]中的內(nèi)容為可選項,其中內(nèi)容根據(jù)具體情況可有可無,但其余部分必須有,如125e3,7e9,-3.0e-3。c.字符型常量是單引號內(nèi)的字符,如‘a(chǎn)',‘d'等,不可以顯示的控制字符,可以在該字符前面加一個反斜杠"\"組成專用轉(zhuǎn)義字符。3.C語言數(shù)據(jù)(1)C語言標識符、常量和變量②常量與符號常量d.字符串型常量由雙引號內(nèi)的字符組成,如"test","OK"等。當引號內(nèi)沒有字符時為空字符串。在使用特殊字符時同樣要使用轉(zhuǎn)義字符如雙引號。在C中字符串常量是做為字符類型數(shù)組來處理的,在存儲字符串時系統(tǒng)會在字符串尾部加上’\o’轉(zhuǎn)義字符以作為該字符串的結(jié)束符。字符串常量"A"和字符常量‘A'是不同的,前者在存儲時多占用一個字節(jié)。e.位標量,它的值是一個二進制,如1或0。常量可以是數(shù)值型常量,也可以是符號常量。數(shù)值型常量就是常說的常數(shù),如10、1.5、0x16、‘A’等,數(shù)值型常量不用說明就可以直接使用。符號常量是指程序中用標識符代表常量,符號常量使用前必須用編譯預處理命令“#define”先進行定義。例如:#defineFalse0x0//用預定義語句可以定義常量constunsignedintc=100;//用const定義c為無符號int常量并賦值3.C語言數(shù)據(jù)(1)C語言標識符、常量和變量③變量一個變量實質(zhì)上是代表了內(nèi)存中的一個存儲單元。在程序中,定義了一個變量a,實際上是給用a命名的變量分配了一個存儲單元,用戶對變量a進行的操作就是對該存儲單元進行的操作;給變量a賦值,實質(zhì)上就是把數(shù)據(jù)存入該變量所代表的存儲單元中。C語言規(guī)定,程序中所有變量必須先定義后使用。變量也有整型變量、實型變量、字符變量等不同的類型。在定義變量的同時要說明其類型,系統(tǒng)在編譯時就能根據(jù)其類型為其分配相應的存儲單元。定義一個變量的格式如下:

[存儲種類]數(shù)據(jù)類型[存儲器類型]變量名表在定義格式中除了數(shù)據(jù)類型和變量名表是必要的,其它都是可選項。存儲種類有四種:自動(auto),外部(extern),靜態(tài)(static)和寄存器(register),缺省類型為自動(auto)。3.C語言數(shù)據(jù)(2)C語言的數(shù)據(jù)類型C語言數(shù)據(jù)類型基本類型數(shù)值型字符型char整型實型短整型short整型int長整型long單精度型float

長實型longdouble雙精度型double構(gòu)造類型

指針類型結(jié)構(gòu)體stru共用體union枚舉型enum空類型數(shù)組3.C語言數(shù)據(jù)(3)C語言運算符和表達式運算符可按其操作數(shù)的個數(shù)分為三類,它們是單目運算符(一個操作數(shù))、雙目運算符(兩個操作數(shù))、三目運算符(三個操作數(shù))。運算符按其優(yōu)先級的高低分為15類。優(yōu)先級最高的為1級,其次為2級等,具體見附錄B。運算符按其功能分為算術(shù)運算符、關(guān)系運算符、邏輯運算符、賦值運算符、逗號運算符、條件運算符等。3.C語言數(shù)據(jù)(3)C語言運算符和表達式①算術(shù)運算符和算術(shù)表達式常見的算術(shù)運算符有雙目運算符(+、-、*、/、%)和單目運算符正負號。運算規(guī)則與代數(shù)運算基本相同,但有以下不同之處:a.除法運算(/)兩個整數(shù)相除,則商為整數(shù),小數(shù)部分舍棄。例如:5/2=2而5.0/2=2.5b.求余數(shù)運算(%)參加運算的兩個操作數(shù)均應為整數(shù),否則出錯。運算結(jié)果是整除以后的余數(shù)。在VC++6.0中運算結(jié)果的符號與被除數(shù)相同。3.C語言數(shù)據(jù)(3)C語言運算符和表達式例如:9%5=4-7%3=-17%-3=1用算術(shù)運算符和圓括號將運算對象(也稱操作數(shù))連接起來的、符合C語言語法的式子,稱為算術(shù)表達式。運算對象可以是常量、變量、函數(shù)等。算術(shù)運算符和圓括號的優(yōu)先級高低次序如下:以上所列的運算符中,只有正負號運算是自右向左的結(jié)合性,其余運算符都是自左向右的結(jié)合性。3.C語言數(shù)據(jù)(3)C語言運算符和表達式C語言中,符號“=”是一個運算符,稱為賦值運算符,由賦值運算符構(gòu)成的表達式稱為賦值表達式,其基本格式如下;變量名=表達式;賦值運算的功能是先計算右邊表達式的值,然后將此值賦給左邊的變量,即存入以該變量為標識的存儲單元中。例如:i=0xff;/*將十六進制數(shù)FFH賦予變量K*/d=m;/*將變量m的值賦予變量d*/②賦值運算符和賦值表達式3.C語言數(shù)據(jù)(3)C語言運算符和表達式自增自減運算屬于單目運算,自增運算符是++,使單個變量的值增1。自減運算符是--,使單個變量的值減1。其表達式有兩種格式:a.++i、--i(前置運算):先自增、減,再參與運算;b.i++、i--(后置運算):先參與運算,再自增、減。自增、自減運算符只用于變量,而不能用于常量或表達式。自增、自減運算的結(jié)合方向是“自右向左”(與一般算術(shù)運算符不同)。運算優(yōu)先級僅次于圓括號。③自增自減運算符和表達式3.C語言數(shù)據(jù)(3)C語言運算符和表達式C語言還允許編程者按照自己的需要,把指定的數(shù)據(jù)轉(zhuǎn)換成指定的類型,這樣的轉(zhuǎn)換稱為“顯式轉(zhuǎn)換”或“強制類型轉(zhuǎn)換”。強制類型轉(zhuǎn)換的一般格式為:(類型標識符)(表達式)例如:(int)a;(int)(x+y);(float)(a+b);說明:a.無論是隱式轉(zhuǎn)換還是強制轉(zhuǎn)換都是臨時轉(zhuǎn)換,不改變數(shù)據(jù)本身的類型和值。b.強制類型轉(zhuǎn)換的結(jié)合方向是“自右向左”。運算優(yōu)先級高于雙目運算符,但低于正、負號運算符。④強制類型轉(zhuǎn)換運算符3.C語言數(shù)據(jù)(3)C語言運算符和表達式a.關(guān)系運算符C語言提供了6種關(guān)系運算符,它們分別是:<(小于)<=(小于或等于)>(大于)>=(大于或等于)==(等于)!=(不等于)關(guān)系運算符是雙目運算符,具有自左向右的結(jié)合性。關(guān)系運算符的優(yōu)先級低于算術(shù)運算符,但高于賦值運算符。其中,<、<=、>、>=的優(yōu)先級相同,==、!=的優(yōu)先級相同,且前四種的優(yōu)先級高于后兩種。⑤關(guān)系運算符和關(guān)系運算表達式3.C語言數(shù)據(jù)(3)C語言運算符和表達式b.關(guān)系表達式關(guān)系表達式就是用關(guān)系運算符將合法的表達式用關(guān)系運算符連接起來的式子。例如:c>a+b 等價于 c>(a+b)a>b==c 等價于 (a>b)==ca=b>c 等價于 a=(b>c)關(guān)系表達式的值是一個邏輯值,即“真”或“假”。C語言沒有邏輯型數(shù)據(jù),以1代表“真”,以0代表“假”⑤關(guān)系運算符和關(guān)系運算表達式3.C語言數(shù)據(jù)(3)C語言運算符和表達式a.邏輯運算符C語言提供三種邏輯運算符,分別是:!邏輯非(相當于“否定”,條件為真,運算后為“假”,條件為假,運算后為“真”)。&&邏輯與(相當于“并且”,只在兩條件同時成立時為“真”,否則為“假”)。||邏輯或(相當于“或者”,兩個條件只要有一個成立時即為“真”,否則為“假”)。其中,“&&”和“||

溫馨提示

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

評論

0/150

提交評論