版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
單片機項目化教程(C語言版)1-1
初識單片機一、什么是單片機單板機將CPU芯片、存儲器芯片、I/O接口芯片和簡單的輸入/輸出設(shè)備(小鍵盤、LED顯示器)等裝配在一塊印刷電路板上,再配上監(jiān)控程序(固化在ROM中),就構(gòu)成了一臺單板微型計算機(簡稱單板機)。單板機一、什么是單片機單板機單板機的輸入/輸出設(shè)備簡單,軟件資源少,使用不方便。早期主要用于微型計算機原理的教學(xué)及簡單的測控系統(tǒng),現(xiàn)在已很少使用。一、什么是單片機單片機是指集成在一個芯片上的微型計算機,它的各種功能部件,包括CPU、存儲器、基本輸入/輸出(I/O)接口電路、定時/計數(shù)器和中斷系統(tǒng)等,都制作在一塊集成芯片上,構(gòu)成一個完整的微型計算機。由于它的結(jié)構(gòu)與指令功能都是按照工業(yè)控制要求設(shè)計,因此單片機又被稱為微控制器(Micro-ControllerUnit,簡稱MCU)。一、什么是單片機單片機應(yīng)用系統(tǒng)單片機+接口電路及外設(shè)等+軟件硬件單片機應(yīng)用系統(tǒng)由硬件和軟件組成硬件是應(yīng)用系統(tǒng)的基礎(chǔ)軟件是在硬件的基礎(chǔ)上對其資源進行合理調(diào)配和使用,從而完成應(yīng)用系統(tǒng)所要求的任務(wù),二者相互依賴,缺一不可。一、什么是單片機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)簡單易學(xué)由于單片機所需的外部器件很少,因此對于初學(xué)者只需要花費極少時間學(xué)習(xí)硬件電路的設(shè)計,而把大部分的時間放在程序設(shè)計上,這樣大大提高了學(xué)習(xí)效率。簡單易學(xué)感謝您的觀看Thanks
for
your
attention.
單片機項目化教程(C語言版)
1-2初識單片機一、進制十進制十進制數(shù)是我們最常用的,它的基數(shù)為“十”,所使用的數(shù)碼為0~9共10個數(shù)字。“逢十進一,借一當(dāng)十”是十進制數(shù)的特點。一、進制數(shù)字電路中只有兩種電平特性,即高電平和低電平,這也就決定了數(shù)字電路中使用二進制。二進制二進制是使用0和1兩個數(shù)碼來表示的數(shù),它的基數(shù)是2,二進制的特點是“逢二進一,借一當(dāng)二”。一、進制二進制十進制數(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對應(yīng)十六進制的A,11對應(yīng)B,12對應(yīng)C,13對應(yīng)D,14對應(yīng)E,15對應(yīng)F。十六進制特點是“逢十六進一,借一當(dāng)十六”。是二進制的簡短表示形式。十六進制一、進制一般在十六進制數(shù)后面加上后綴H,表示該數(shù)為十六進制數(shù),如90H,ACH。十六進制表示方法在C語言編程時要寫成“0x90,0xac”,在數(shù)的最前面加上“0x”表示該數(shù)為十六進制數(shù)。一、進制二進制與十六進制的轉(zhuǎn)換當(dāng)二進制數(shù)與十六進制數(shù)轉(zhuǎn)換時,因為四位二進制數(shù)正好可以表示0`F這16個數(shù)字,所以轉(zhuǎn)換時可以從最低位開始,每四位二進制數(shù)字分為一組,不足四位的用0補齊4位,對應(yīng)進行相互轉(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)核具有通用型,如果程序用的資源不是太復(fù)雜,我們可以選擇任意一款51單片機內(nèi)核就行。Keil軟件使用如果出現(xiàn)下面的界面:單擊是就可以,意思是將單片機的啟動代碼添加到工程,我們不用修改。Keil軟件使用單擊菜單file→new選項,或者單擊界面上的快捷圖標Keil軟件使用
界面顯示的Text1就是我們剛剛加入的文件,但是這個文件與我們的工程還沒有直接聯(lián)系起來,單擊圖標,保存我們當(dāng)前的text1文件,輸入要保存的文件名,同時要輸文件擴展名,擴展名很關(guān)鍵,用C語言編寫的程序,則必須為**.c,匯編語言必須為**.asm(**為文件名),文件名是用戶自己取的。填好文件名后單擊保存。Keil軟件使用回到編輯界面,單擊Target1前面的“+”號,然后在SourceGroup1上右鍵單擊,選擇AddFilestoGroupSourceGroup1,選中我們剛才建立的.c文件,這里是ledtest.c,單擊add,只需單擊一次。之后單擊Close就可以。
回到主界面后,單擊SourceGroup1前的“+”號,剛剛添加的文件顯示在里面。建立工程文件Keil軟件使用產(chǎn)生執(zhí)行文件感謝您的觀看Thanks
for
your
attention.
單片機應(yīng)用技術(shù)項目二學(xué)習(xí)單片機硬件系統(tǒng)目錄contens任務(wù)一點亮第一個LED燈任務(wù)二LED燈閃爍任務(wù)三單片機控制蜂鳴器發(fā)聲教學(xué)目標單片機外部引腳及功能單片機最小系統(tǒng)單片機存儲器結(jié)構(gòu)單片機并行I/O端口重點、難點重點:單片機外部引腳及功能難點:單片機并行I/O端口教學(xué)目標及重點難點任務(wù)一
點亮第一個LED燈一、LED燈點亮二、89C51的信號引腳三、單片機最小系統(tǒng)電路四、51單片機的存儲器結(jié)構(gòu)一、LED燈點亮LED燈介紹半導(dǎo)體二極管的一種可以把電能轉(zhuǎn)化成光能;常簡寫為LED。發(fā)光二極管與普通二極管一樣是由一個PN結(jié)組成,也具有單向?qū)щ娦浴S涉墸℅a)與砷(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.任務(wù)要求設(shè)計一個電路,STC89C51單片機的P0.0引腳連接一個LED燈,控制LED閃爍。以單片機為核心的電子設(shè)計硬件設(shè)計軟件設(shè)計單片機最小系統(tǒng)加上最簡單的輸出電路來驅(qū)動LED編程控制P0.0引腳的電平狀態(tài),使其持續(xù)一段時間的高電平,再持續(xù)一段時間的低電平2.任務(wù)分析一、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ā)光二極管的導(dǎo)通壓降為VDD,導(dǎo)通時流過二極管的電流為I,則限流電阻R為:R=(VCC-VDD)/I例如,若二極管的導(dǎo)通壓降為2.2V,導(dǎo)通時流過的電流為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.復(fù)位引腳: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)部接至振蕩器的反相放大器。當(dāng)采用外部時鐘時,對于HMOS單片機,該引腳接地;對于CHMOS單片機,該引腳作為外部振蕩信號的輸入端。
XTAL2(18腳)用作晶體振蕩電路的反相器輸出端,內(nèi)部接至?xí)r鐘發(fā)生器。當(dāng)采用外部時鐘時,對于HMOS單片機,該引腳接收振蕩器信號;對于CHMOS單片機,該引腳懸浮。二、89C51的信號引腳2.輸入/輸出(I/O)引腳P0.0~P0.7(39腳~32腳):8位漏極開路的雙向I/O口
當(dāng)使用片外ROM和RAM時,用作低8位地址和數(shù)據(jù)分時復(fù)用。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口
當(dāng)使用片外ROM和RAM時,輸出高8位地址。
P3.0~P3.7(10腳~17腳):8位帶上拉電阻的準雙向I/O口
P3口具有第二功能在單片機中,“口”是一個集數(shù)據(jù)輸入緩沖、輸出驅(qū)動及鎖存等多項功能于一體的I/O電路。二、89C51的信號引腳3.控制信號引腳RST/VPD(9引腳):RST為復(fù)位信號輸入端。當(dāng)RST端保持2個機器周期以上高電平時,單片機完成復(fù)位操作。第二功能VPD為內(nèi)部RAM的備用電源輸入端。當(dāng)主電源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,當(dāng)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.單片機時鐘電路單片機本身是一個復(fù)雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路應(yīng)在唯一的時鐘信號控制下嚴格地按時序協(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é)拍,其前半周期對應(yīng)的節(jié)拍叫P1,后半周期對應(yīng)的節(jié)拍叫P2。3)機器周期
89C51系列單片機采用定時控制方式,有固定的機器周期。規(guī)定一個機器周期的寬度為6個狀態(tài),即12個振蕩脈沖周期,因此機器周期就是振蕩脈沖的十二分頻。小提示當(dāng)振蕩脈沖頻率為12MHz時,一個機器周期為1μs;當(dāng)振蕩脈沖頻率為6MHz時,一個機器周期為2μs。三、單片機最小系統(tǒng)電路1.單片機時鐘電路牢牢記住振蕩周期=晶振頻率fosc的倒數(shù);1個機器周期=12個振蕩周期;1個指令周期=1、2、4個機器周期三、單片機最小系統(tǒng)電路2.單片機復(fù)位電路
復(fù)位方式和復(fù)位電路復(fù)位是單片機的初始化操作,其主要功能是把PC初始化為0000H,使單片機從0000H單元開始執(zhí)行程序。復(fù)位后,單片機才能開始正常工作。RST引腳是復(fù)位信號的輸入端,在單片機的RST端加上高電平(持續(xù)2個機器周期以上),單片機即進入復(fù)位工作方式。復(fù)位不影響MCS-51單片機內(nèi)部RAM的狀態(tài),只要RST輸入端保持高電平,將循環(huán)復(fù)位。RST返回低電平后,CPU從0000H地址開始執(zhí)行程序。單片機系統(tǒng)在運行出錯或進入死循環(huán)時,可按復(fù)位鍵重新啟動。三、單片機最小系統(tǒng)電路2.單片機復(fù)位電路復(fù)位后單片機有關(guān)寄存器的狀態(tài)寄存器復(fù)位狀態(tài)PC0000HACC00HPSW00HSP07HDPTR0000HIP×××00000BIE0××00000BP0~P3FFHTCON00H寄存器復(fù)位狀態(tài)TMOD00HTL000HTH000HTL100HTH100HSCON00HSBUF未定PCON(HMOS)0×××××××BPCON(CHMOS)0×××0000B三、單片機最小系統(tǒng)電路2.單片機復(fù)位電路(PC)=0000H表示復(fù)位后程序的入口地址為0000H;(PSW)=00H,其中RS1(PSW.4)=0,RS0(PSW.3)=0,表示復(fù)位后單片機選擇工作寄存器第0組;(SP)=07H表示復(fù)位后堆棧在片內(nèi)RAM的08H單元處建立;P0口~P3口鎖存器為全1狀態(tài),說明復(fù)位后這些并行接口可以直接作輸入口,無須向端口寫1;定時器/計數(shù)器、串行口、中斷系統(tǒng)等特殊功能寄存器復(fù)位后的狀態(tài)對各功能部件工作狀態(tài)的影響,將在后續(xù)有關(guān)章節(jié)介紹。三、單片機最小系統(tǒng)電路2.單片機復(fù)位電路89C51基本復(fù)位電路有3種:上電復(fù)位、按鍵電平復(fù)位和按鍵脈沖復(fù)位。上電自動復(fù)位:通過電容充電來實現(xiàn)。接通電源即可完成系統(tǒng)的復(fù)位。按鍵手動復(fù)位:按下復(fù)位按鈕即可復(fù)位。分為電平方式和脈沖方式兩種。四、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)當(dāng)芯片引腳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)任務(wù)二
單片機控制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)“當(dāng)型”循環(huán),執(zhí)行過程:首先判斷表達式,當(dāng)表達式的值為真(非0)時,反復(fù)執(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ī)定的格式,將一個子任務(wù)編寫成一個函數(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ù)了,那么整個程序應(yīng)該如何去修改呢?二、LED閃爍的延時方法LED燈點亮程序#include<reg52.h>sbitLED=P0^0;voiddelay(unsignedinti){ while(i--); }voidmain(){
while(1)
{ LED=1;
//點亮LED delay(10000);LED=0;
//熄滅LEDdelay(10000);
}}任務(wù)三
單片機控制蜂鳴器發(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)成,當(dāng)接通電源后(1.5~15V直流工作電壓),多諧振蕩器起振,輸出1.5~2.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。一、蜂鳴器結(jié)構(gòu)認識蜂鳴器結(jié)構(gòu)認識在單片機應(yīng)用的設(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.存放上一條指令地址練習(xí)題2.PSW中RS1和RS0用來______________。A.選擇工作寄存器組B.指示復(fù)位C.選擇定時器D.選擇工作方式3.單片機上電復(fù)位后,PC的內(nèi)容為___________。A.0x0000B.0x0003C.0x000BD.0x08004.使用單片機開發(fā)系統(tǒng)測試C語言程序時,首先應(yīng)新建文件,該文件的擴展名是___。A..cB..hexC..binD..asm練習(xí)題5.單片機能夠直接運行的程序是_________。A.匯編源程序B.C語言源程序C.高級語言程序D.機器語言源程序1.51系列單片機的存儲器主要由4個物理存儲空間,即_______、_______、________、________。2.51系列單片機的應(yīng)用程序一般存放在____________中。感謝您的觀看單片機項目化教程(C語言版)
3-1控制8個LED發(fā)光二極管閃爍任務(wù)說明本任務(wù)通過51系列單片機控制8個發(fā)光二極管閃爍,熟悉單片機I/O端口控制及其編程方法。任務(wù)分析用單片機的P1端口控制8個發(fā)光二極管,下載編寫好的C程序到單片機中,實現(xiàn)LED二極管閃爍。電路設(shè)計采用單片機P1端口控制8個發(fā)光二極管閃爍的硬件電路如圖所示電路設(shè)計單片機P1口經(jīng)過限流電阻R直接控制發(fā)光二極管,電阻起到限流作用。8個發(fā)光二極管的陽極并接在一起與電源相聯(lián)接。當(dāng)P1端口的引腳輸出為低電平“0”時,相應(yīng)的發(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)、一個與非門、一個與門及場效應(yīng)管驅(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ū)動電路由場效應(yīng)晶體管T1和T2組成,受輸出控制電路控制,當(dāng)柵極輸入低電平時,T1、T2截止;當(dāng)柵極輸入高電平時,T1、T2導(dǎo)通。(1)P0口①P0口的結(jié)構(gòu)1.并行I/O端口當(dāng)P0口作為輸出口使用時,內(nèi)部總線將數(shù)據(jù)送入鎖存器,內(nèi)部的寫脈沖加在鎖存器時鐘端CP上,鎖存數(shù)據(jù)到Q端。經(jīng)過MUX,T2反相后正好是內(nèi)部總線的數(shù)據(jù),送到P0口引腳輸出。當(dāng)P0口作為輸入口使用時,應(yīng)區(qū)分讀引腳和讀端口兩種情況。所謂讀引腳,就是讀芯片引腳的狀態(tài),這時使用下方的數(shù)據(jù)緩沖器,“讀引腳”信號把緩沖器打開,把端口引腳上的數(shù)據(jù)從緩沖器通過內(nèi)部總線讀進來。讀端口是指通過上面的緩沖器讀鎖存器Q端的狀態(tài)。讀端口是為了適應(yīng)對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端口的場效應(yīng)管T1,并且輸出的信息僅來自內(nèi)部總線。由內(nèi)部總線輸出的數(shù)據(jù)經(jīng)鎖存器反相和場效應(yīng)管反相后,鎖存在端口線上,因此,P1端口是具有輸出鎖存的靜態(tài)口。注意:P1口是準雙向口,只能作為通用I/O口使用。P1口作為輸出口使用時,無需再外接上拉電阻。P1口作為輸入口使用時,應(yīng)區(qū)分讀引腳和讀端口。讀引腳時,必須先向電路中的鎖存器寫入“1”,使輸出級的FET截止。(2)P1口①P1口的結(jié)構(gòu)1.并行I/O端口由圖可見,P2端口在片內(nèi)既有上拉電阻,又有切換開關(guān)MUX,所以P2端口在功能上兼有P0端口和P1端口的特點。這主要表現(xiàn)在輸出功能上,當(dāng)切換開關(guān)向下接通時,從內(nèi)部總線輸出的一位數(shù)據(jù)經(jīng)反相器和場效應(yīng)管反相后,輸出在端口引腳線上;當(dāng)多路開關(guān)向上時,輸出的一位地址信號也經(jīng)反相器和場效應(yī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口是準雙向口,在實際應(yīng)用中,可以用于為系統(tǒng)提供高8位地址,也能作為通用I/O口使用。P2口作為通用I/O口的輸出口使用時,與P1口一樣無需再外接上拉電阻。P2口作為通用I/O口的輸入口使用時,應(yīng)區(qū)分讀引腳和讀端口。讀引腳時,必須先向鎖存器寫入“1”。(3)P2口①P2口的結(jié)構(gòu)1.并行I/O端口P3端口和Pl端口的結(jié)構(gòu)相似,區(qū)別僅在于P3端口的各端口線有兩種功能選擇。當(dāng)處于第一功能時,第二輸出功能線為1,此時,內(nèi)部總線信號經(jīng)鎖存器和場效應(yīng)管輸入/輸出,其作用與P1端口作用相同,也是靜態(tài)準雙向I/O端口。當(dāng)處于第二功能時,鎖存器輸出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)在應(yīng)用中,如不設(shè)定P3端口各位的第二功能(WR,RD信號的產(chǎn)生不用設(shè)置),則P3端口線自動處于第一功能狀態(tài),也就是靜態(tài)I/O端口的工作狀態(tài)。在更多的場合是根據(jù)應(yīng)用的需要,把幾條端口線設(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行:對程序進行說明,包括程序名稱和功能。“//”是單行注釋符號,用來說明相應(yīng)語句的意義,方便程序的編寫、調(diào)試及維護工作,提高程序的可讀性。第二行:#include<reg51.h>是文件包含語句,表示將語句中指定文件的全部內(nèi)容復(fù)制到程序中,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語言程序中可以有預(yù)處理命令,預(yù)處理命令通常放在源程序的最前面。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),組成各種復(fù)雜程序。這些語句主要包括表達式語句、復(fù)合語句、選擇語句和循環(huán)語句等。表達式語句是最基本的C語言語句。表達式語句由表達式加上分號“;”組成,其一般形式如下:表達式;執(zhí)行表達式語句就是計算表達式的值。在C語言中有一個特殊的表達式語句,稱為空語句??照Z句中只有一個分號“;”,程序執(zhí)行空語句時需要占用一條指令的執(zhí)行時間,但是什么也不做。在C51程序中常常把空語句作為循環(huán)體,用于消耗CPU時間等待事件發(fā)生。把多個語句用大括號{}括起來,組合在一起形成具有一定功能的模塊,這種由若干條語句組合而成的語句塊稱為復(fù)合語句。在程序中應(yīng)把復(fù)合語句看成是單條語句,而不是多條語句。復(fù)合語句在程序運行時,{}中的各行單語句是依次順序執(zhí)行的。在C語言的函數(shù)中,函數(shù)體就是一個復(fù)合語句。(4)C語言表達式語句和復(fù)合語句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"等。當(dāng)引號內(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ù)值型常量不用說明就可以直接使用。符號常量是指程序中用標識符代表常量,符號常量使用前必須用編譯預(yù)處理命令“#define”先進行定義。例如:#defineFalse0x0//用預(yù)定義語句可以定義常量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ù)其類型為其分配相應(yīng)的存儲單元。定義一個變量的格式如下:
[存儲種類]數(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ù)均應(yīng)為整數(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語言提供三種邏輯運算符,分別是:!邏輯非(相當(dāng)于“否定”,條件為真,運算后為“假”,條件為假,運算后為“真”)。&&邏輯與(相當(dāng)于“并且”,只在兩條件同時成立時為“真”,否則為“假”)。||邏輯或(相當(dāng)于“或者”,兩個條件只要有一個成立時即為“真”,否則為“假”)。其中,“&&”和“||
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年新版中國刀套項目可行性研究報告
- 2024-2030年撰寫:中國肥料分篩機項目風(fēng)險評估報告
- 智能餐飲培訓(xùn)課程設(shè)計
- 旅游專業(yè)托盤課程設(shè)計
- 2024-2030年卡車和公共汽車后視鏡行業(yè)市場現(xiàn)狀供需分析及重點企業(yè)投資評估規(guī)劃分析研究報告
- 2024-2030年北京養(yǎng)老機構(gòu)行業(yè)發(fā)展動態(tài)及前景規(guī)劃研究報告
- 2024-2030年六氯丙酮搬遷改造項目可行性研究報告
- 2024-2030年全球機械密封市場發(fā)展前景與投資風(fēng)險分析報告
- 2024-2030年全球及中國調(diào)酒用糖漿行業(yè)銷售情況及競爭前景預(yù)測報告
- 2024-2030年全球及中國聚硅氧烷季銨鹽8行業(yè)產(chǎn)銷需求及投資潛力預(yù)測報告
- 公司法(上海財經(jīng)大學(xué))智慧樹知到期末考試答案2024年
- 金融數(shù)據(jù)分析 課件 第2章金融時間序列線性模型
- 軟件工程項目預(yù)算表-模板
- 2023秋國開(專)《生產(chǎn)與運作管理》歷屆期末考試試題及答案
- 《機械制圖16螺栓》課件
- 銷售人員招聘計劃書
- 產(chǎn)值分析報告
- 《樹莓派應(yīng)用開發(fā)》課件 第01、2章 樹莓派介紹、樹莓派操作系統(tǒng)
- 模具熱分析報告
- 2024年湖南現(xiàn)代物流職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 多西他賽化療方案
評論
0/150
提交評論