本書(shū)是普通高等教育\"十一五”國(guó)家級(jí)規(guī)劃教材,以51系列單片機(jī)和C語(yǔ)言為基礎(chǔ),全面系統(tǒng)地介紹單片機(jī)的C語(yǔ)言程序設(shè)計(jì)與應(yīng)用的基本問(wèn)題。本書(shū)主要內(nèi)容包括:?jiǎn)纹瑱C(jī)的C語(yǔ)言概述,51系列單片機(jī)硬件與C語(yǔ)言編程基礎(chǔ),P0~P3口輸入/輸出、中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器、串行口、并行擴(kuò)展、串行擴(kuò)展的C51編程,?Vision2與Proteus使用基礎(chǔ)等。本書(shū)提供大量實(shí)例及詳細(xì)說(shuō)明與注釋?zhuān)布O(shè)計(jì)實(shí)例均可在Keil和Proteus軟件平臺(tái)上直接運(yùn)行,每章后附本章小結(jié)、習(xí)題、實(shí)驗(yàn)與設(shè)計(jì)等,提供電子課件、Proteus仿真電路及程序代碼、習(xí)題參考答案。
前 言
在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)中,軟件編程占據(jù)著非常重要的地位。尤其是隨著單片機(jī)技術(shù)的發(fā)展,嵌入式系統(tǒng)的推廣和應(yīng)用,硬件的集成化程度越來(lái)越高,同時(shí)對(duì)軟件編程的要求也越來(lái)越高。這就要求單片機(jī)開(kāi)發(fā)人員能在短時(shí)間內(nèi)編寫(xiě)出執(zhí)行效率高、運(yùn)行可靠的代碼。同時(shí),由于實(shí)際系統(tǒng)的日趨復(fù)雜,對(duì)使用代碼的規(guī)范性、模塊化的要求越來(lái)越高,要方便多個(gè)設(shè)計(jì)參與者以軟件工程的形式進(jìn)行協(xié)同開(kāi)發(fā)。在這種形勢(shì)下,僅靠單片機(jī)在推廣應(yīng)用的初期使用的匯編語(yǔ)言來(lái)進(jìn)行軟件開(kāi)發(fā)是遠(yuǎn)遠(yuǎn)不夠的。
C語(yǔ)言是近年來(lái)在國(guó)內(nèi)外普遍使用的一種程序設(shè)計(jì)語(yǔ)言。C語(yǔ)言能直接對(duì)計(jì)算機(jī)硬件進(jìn)行操作,既有高級(jí)語(yǔ)言的特點(diǎn),又有匯編語(yǔ)言的特點(diǎn),因此在單片機(jī)應(yīng)用系統(tǒng)開(kāi)發(fā)過(guò)程中得到了非常廣泛的應(yīng)用。在單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)過(guò)程中,只要簡(jiǎn)單地熟悉相應(yīng)單片機(jī)的硬件結(jié)構(gòu),利用C語(yǔ)言作為編程語(yǔ)言,就可以大大縮短開(kāi)發(fā)周期。C語(yǔ)言已成為舉世公認(rèn)的高效簡(jiǎn)潔而又貼近硬件的編程語(yǔ)言之一。
以51單片機(jī)為硬件基礎(chǔ),以C語(yǔ)言為軟件編程基礎(chǔ),對(duì)于學(xué)習(xí)單片機(jī)的C語(yǔ)言程序設(shè)計(jì)是一種快捷的入門(mén)方式。51系列單片機(jī),由于其具有集成度高、處理能力強(qiáng)、可靠性高、系統(tǒng)結(jié)構(gòu)簡(jiǎn)單、價(jià)格低廉、易于使用等優(yōu)點(diǎn),迅速占領(lǐng)了自動(dòng)控制系統(tǒng)和智能儀器儀表行業(yè)的主要市場(chǎng),在我國(guó)得到了廣泛的應(yīng)用,并取得了令人矚目的成果。盡管目前世界各大公司研制的各種高性能、不同型號(hào)的單片機(jī)不斷問(wèn)世,但由于51單片機(jī)具有易于學(xué)習(xí)和掌握、性?xún)r(jià)比高等優(yōu)點(diǎn),并且以51單片機(jī)基本內(nèi)核為核心的各種擴(kuò)展和增強(qiáng)型的單片機(jī)不斷推出,另外由于51單片機(jī)內(nèi)核技術(shù)幾乎包含了單片機(jī)理論基礎(chǔ)和技術(shù)的全部,具有較好的系統(tǒng)性和完整性,再加上幾十年來(lái),國(guó)內(nèi)已積累了豐富的技術(shù)資料、完整的實(shí)驗(yàn)環(huán)境與開(kāi)發(fā)設(shè)備,因此51系列單片機(jī)技術(shù)非常適合課堂教學(xué),學(xué)懂、弄通51單片機(jī)的基本理論與應(yīng)用技術(shù),也就打好了學(xué)習(xí)、應(yīng)用單片機(jī)的基礎(chǔ),即使學(xué)、用其他系列的單片機(jī)也就不難了。
本書(shū)是一本專(zhuān)門(mén)講解單片機(jī)的C語(yǔ)言(C51)編程的教材,以由淺入深、相互貫穿、重點(diǎn)突出、文字?jǐn)⑹雠c典型代碼實(shí)例相結(jié)合為原則,向每位單片機(jī)、嵌入式愛(ài)好者和開(kāi)發(fā)者全面介紹C51語(yǔ)言程序的編寫(xiě)。本書(shū)第4版仍然保持第3版的寫(xiě)作風(fēng)格,在內(nèi)容上對(duì)第3版進(jìn)行了仔細(xì)的修訂,使敘述更加合理和順暢,更便于閱讀和理解。全書(shū)共9章,主要內(nèi)容包括:?jiǎn)纹瑱C(jī)的C語(yǔ)言概述,51系列單片機(jī)硬件與C51編程基礎(chǔ),51系列單片機(jī)P0~P3口輸入/輸出、中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器、串行口、并行擴(kuò)展、串行擴(kuò)展的C51編程、Keil ?Vision2與Proteus使用基礎(chǔ)等。每章后附本章小結(jié)、習(xí)題等。
本書(shū)提供大量實(shí)例供讀者學(xué)習(xí),在掌握了實(shí)例的基礎(chǔ)上又給讀者推出了“修改”內(nèi)容,目的是讓讀者根據(jù)實(shí)例能自己編寫(xiě)滿(mǎn)足要求的程序,所有實(shí)例均可在Keil和Proteus軟件平臺(tái)上直接運(yùn)行。主要章節(jié)提供了“實(shí)驗(yàn)與設(shè)計(jì)”內(nèi)容,在實(shí)驗(yàn)上給出實(shí)驗(yàn)的目的、電路、基本內(nèi)容、參考程序,讀者在掌握基本實(shí)驗(yàn)的基礎(chǔ)上可以根據(jù)具體情況對(duì)實(shí)驗(yàn)進(jìn)行豐富與設(shè)計(jì);設(shè)計(jì)部分是為了鍛煉學(xué)生綜合分析問(wèn)題與解決問(wèn)題的能力,在硬件和軟件上都提出了設(shè)計(jì)要求,學(xué)生可以根據(jù)所學(xué)知識(shí)在硬件和軟件上進(jìn)行詳細(xì)的設(shè)計(jì)。另外,對(duì)有些重要的內(nèi)容進(jìn)行了重點(diǎn)的“強(qiáng)調(diào)”,強(qiáng)調(diào)的目的是提醒讀者在學(xué)習(xí)該部分內(nèi)容時(shí)要重點(diǎn)注意這些問(wèn)題。本書(shū)提供相關(guān)的電子課件、程序代碼、習(xí)題參考答案,可登錄華信教育資源網(wǎng)http://www.hxedu.com.cn注冊(cè)下載。
本書(shū)的主要特色是,在介紹單片機(jī)的C語(yǔ)言程序設(shè)計(jì)的過(guò)程中清晰地說(shuō)明單片機(jī)的所有功能,并對(duì)每項(xiàng)功能給出實(shí)例代碼,同時(shí)詳細(xì)介紹單片機(jī)的C語(yǔ)言開(kāi)發(fā)與仿真環(huán)境的使用,透徹分析單片機(jī)的C語(yǔ)言語(yǔ)法和語(yǔ)義,以及開(kāi)發(fā)過(guò)程中可能存在的問(wèn)題和難點(diǎn)。
本書(shū)的另一個(gè)特點(diǎn)是突破了傳統(tǒng)的軟、硬件截然割裂的做法,使讀者對(duì)嵌入式系統(tǒng)的開(kāi)發(fā)有一個(gè)整體的了解。相信本書(shū)的這一特點(diǎn)會(huì)節(jié)省讀者進(jìn)入嵌入式C語(yǔ)言領(lǐng)域的時(shí)間,同時(shí)能夠更清楚地認(rèn)識(shí)應(yīng)用系統(tǒng)開(kāi)發(fā)的過(guò)程,深入理解單片機(jī)的C語(yǔ)言編程機(jī)制。
本書(shū)由山東理工大學(xué)姜志海、煙臺(tái)汽車(chē)工業(yè)職業(yè)學(xué)院姜沛勛編寫(xiě)。第3、4、5、6、7、8章由姜志海編寫(xiě);第1、2、9章由姜沛勛編寫(xiě);全書(shū)由姜志海負(fù)責(zé)整理與統(tǒng)稿。
本書(shū)在編寫(xiě)過(guò)程中得到了許多專(zhuān)家和同行的大力支持與熱情幫助,他們對(duì)本書(shū)提出了許多建設(shè)性的建議和意見(jiàn),在此一并表示衷心的感謝。
鑒于編者的水平有限,加之新的編程技術(shù)不斷涌現(xiàn),書(shū)中難免有不完善之處,懇請(qǐng)廣大讀者批評(píng)指正。反饋信息請(qǐng)發(fā)送至wyj@phei.com.cn。
作 者
2020年5月
目 錄
第1章 單片機(jī)的C語(yǔ)言概述 1
1.1 單片機(jī)的C語(yǔ)言 1
1.1.1 單片機(jī)的C語(yǔ)言(C51)的特點(diǎn) 1
1.1.2 單片機(jī)的C語(yǔ)言和標(biāo)準(zhǔn)C語(yǔ)言的
比較 2
1.1.3 單片機(jī)的C語(yǔ)言與匯編語(yǔ)言的優(yōu)
勢(shì)對(duì)比 2
1.2 硬件及軟件環(huán)境 6
1.2.1 硬件環(huán)境 6
1.2.2 軟件環(huán)境 8
本章小結(jié) 8
習(xí)題 8
第2章 51系列單片機(jī)硬件及C51編程
基礎(chǔ) 9
2.1 51單片機(jī)的總體結(jié)構(gòu) 9
2.1.1 內(nèi)部結(jié)構(gòu) 9
2.1.2 外部引腳說(shuō)明 10
2.1.3 CPU的時(shí)序周期 13
2.2 51單片機(jī)的存儲(chǔ)器 14
2.2.1 程序存儲(chǔ)器 14
2.2.2 數(shù)據(jù)存儲(chǔ)器 15
2.2.3 特殊功能寄存器 17
2.3 C51語(yǔ)言的數(shù)據(jù) 20
2.3.1 常量 20
2.3.2 變量 22
2.4 C51語(yǔ)言對(duì)單片機(jī)主要資源的
控制 25
2.4.1 特殊功能寄存器的C51語(yǔ)言
定義 25
2.4.2 絕對(duì)地址的訪問(wèn) 27
2.5 C51語(yǔ)言的基本運(yùn)算與流程控制
語(yǔ)句 28
2.5.1 基本運(yùn)算 28
2.5.2 分支判斷――if、switch語(yǔ)句 30
2.5.3 循環(huán)控制――while、for語(yǔ)句 32
2.5.4 break、continue、return和goto
語(yǔ)句 34
2.6 C51語(yǔ)言的數(shù)組、指針、函數(shù) 36
2.6.1 數(shù)組 36
2.6.2 指針 38
2.6.3 函數(shù) 39
2.7 C51語(yǔ)言的預(yù)處理命令及匯編語(yǔ)句
的嵌入 42
2.7.1 文件包含、宏定義、條件編譯 42
2.7.2 C51中匯編語(yǔ)句的嵌入 44
2.8 C51程序 45
2.8.1 C51的程序結(jié)構(gòu) 45
2.8.2 C51編程規(guī)范及注意事項(xiàng) 47
2.8.3 C51的標(biāo)識(shí)符與關(guān)鍵字 48
本章小結(jié) 50
習(xí)題 50
第3章 P0~P3口輸入/輸出的C51編程 52
3.1 51單片機(jī)的P0~P3口基礎(chǔ)知識(shí) 52
3.1.1 P0~P3口結(jié)構(gòu) 52
3.1.2 P0~P3口特點(diǎn)總結(jié) 53
3.2 輸出操作 54
3.2.1 基本輸出操作舉例――字節(jié)輸出
與位輸出 54
3.2.2 擴(kuò)展輸出操作舉例――流水燈與
霹靂燈 55
3.2.3 擴(kuò)展輸出操作舉例――8段LED
數(shù)碼顯示器 57
3.3 輸入操作 62
3.3.1 閘刀型開(kāi)關(guān)輸入信號(hào) 63
3.3.2 單個(gè)按鈕型開(kāi)關(guān)輸入信號(hào) 64
3.3.3 多個(gè)按鈕型開(kāi)關(guān)輸入信號(hào)――
鍵盤(pán) 66
3.4 實(shí)驗(yàn)與設(shè)計(jì) 72
實(shí)驗(yàn)1 閘刀型開(kāi)關(guān)輸入/8段LED靜態(tài)
顯示輸出 72
實(shí)驗(yàn)2 按鈕型開(kāi)關(guān)輸入/8段LED靜態(tài)
顯示輸出 72
設(shè)計(jì)1:計(jì)時(shí)秒表的設(shè)計(jì) 74
設(shè)計(jì)2:模擬交通信號(hào)燈控制裝置的
設(shè)計(jì) 74
本章小結(jié) 74
習(xí)題 75
第4章 中斷系統(tǒng)的C51編程 76
4.1 中斷系統(tǒng)結(jié)構(gòu)與中斷控制 76
4.1.1 中斷系統(tǒng)結(jié)構(gòu) 76
4.1.2 特殊功能寄存器 77
4.2 中斷優(yōu)先級(jí)與中斷函數(shù) 78
4.2.1 中斷優(yōu)先級(jí) 78
4.2.2 中斷函數(shù)的結(jié)構(gòu)形式 80
4.3 外部中斷源的C51編程 80
4.3.1 外部中斷源初始化 80
4.3.2 編程示例 81
4.4 實(shí)驗(yàn)與設(shè)計(jì) 84
實(shí)驗(yàn)1 按鈕型開(kāi)關(guān)模擬外部中斷
實(shí)驗(yàn) 84
實(shí)驗(yàn)2 外部中斷優(yōu)先級(jí)實(shí)驗(yàn) 85
設(shè)計(jì):出租車(chē)計(jì)價(jià)器里程計(jì)量裝置的
設(shè)計(jì) 87
本章小結(jié) 87
習(xí)題 88
第5章 定時(shí)器/計(jì)數(shù)器的C51編程 89
5.1 51單片機(jī)的定時(shí)器/計(jì)數(shù)器 89
5.1.1 結(jié)構(gòu) 89
5.1.2 特殊功能寄存器 90
5.2 定時(shí)器/計(jì)數(shù)器工作模式 91
5.3 定時(shí)器/計(jì)數(shù)器的應(yīng)用舉例 94
5.3.1 定時(shí)器/計(jì)數(shù)器的初始化 95
5.3.2 應(yīng)用舉例 96
5.4 實(shí)驗(yàn)與設(shè)計(jì) 102
實(shí)驗(yàn)1 按鈕型開(kāi)關(guān)模擬計(jì)數(shù)器實(shí)驗(yàn) 102
實(shí)驗(yàn)2 定時(shí)器實(shí)驗(yàn) 103
設(shè)計(jì)1:出租車(chē)計(jì)價(jià)器里程計(jì)量裝置
的設(shè)計(jì) 104
設(shè)計(jì)2:計(jì)時(shí)鐘的設(shè)計(jì)(倒計(jì)時(shí)) 104
本章小結(jié) 104
習(xí)題 105
第6章 串行口的C51編程 106
6.1 51單片機(jī)串行口基礎(chǔ)知識(shí) 106
6.1.1 串行口的結(jié)構(gòu)原理 106
6.1.2 串行口的應(yīng)用控制 107
6.2 51單片機(jī)串行口的工作方式 108
6.2.1 串行口工作方式0 108
6.2.2 串行口工作方式1 112
6.2.3 串行口工作方式2 116
6.2.4 串行口工作方式3 119
6.3 51單片機(jī)串行口的應(yīng)用舉例 122
6.3.1 串行口編程基礎(chǔ) 122
6.3.2 串行口應(yīng)用舉例 124
6.4 實(shí)驗(yàn)與設(shè)計(jì) 127
實(shí)驗(yàn)1 串行口控制的流水燈實(shí)驗(yàn) 127
實(shí)驗(yàn)2 兩個(gè)單片機(jī)通信實(shí)驗(yàn) 127
本章小結(jié) 129
習(xí)題 130
第7章 外部并行擴(kuò)展的C51編程 131
7.1 51單片機(jī)并行I/O口擴(kuò)展基礎(chǔ) 131
7.1.1 系統(tǒng)擴(kuò)展總線結(jié)構(gòu)圖 131
7.1.2 數(shù)據(jù)線、控制線的連接 132
7.1.3 譯碼信號(hào)的形成――系統(tǒng)擴(kuò)展
的尋址 132
7.2 可編程的I/O接口芯片8255A的
C51編程 135
7.2.1 8255A簡(jiǎn)介 135
7.2.2 利用8255A擴(kuò)展并行的輸入/輸出
口示例 139
7.2.3 利用Intel 8255A作為8段LED
靜態(tài)顯示輸出口的示例 140
7.2.4 利用Intel 8255A作為8段LED
動(dòng)態(tài)顯示輸出口的示例 141
7.3 D/A與A/D轉(zhuǎn)換器的C51編程 143
7.3.1 D/A轉(zhuǎn)換器基礎(chǔ) 143
7.3.2 8位并行D/A轉(zhuǎn)換器DAC0832 145
7.3.3 A/D轉(zhuǎn)換器基礎(chǔ) 150
7.3.4 8位并行A/D轉(zhuǎn)換器ADC0809 151
7.4 液晶顯示器的C51編程 155
7.4.1 字符型LCD1602液晶顯示模塊
的C51編程 155
7.4.2 點(diǎn)陣式帶漢字庫(kù)12864液晶顯示
模塊接口技術(shù) 160
7.5 實(shí)驗(yàn)與設(shè)計(jì) 168
實(shí)驗(yàn)1 DAC0832單緩沖實(shí)驗(yàn) 168
實(shí)驗(yàn)2 ADC0809實(shí)驗(yàn) 169
設(shè)計(jì)1:電子密碼鎖的設(shè)計(jì) 171
設(shè)計(jì)2:波形發(fā)生器的設(shè)計(jì) 171
本章小結(jié) 171
習(xí)題 172
第8章 外部串行擴(kuò)展的C51編程 173
8.1 I2C總線器件的C51編程 173
8.1.1 認(rèn)識(shí)I2C總線接口 173
8.1.2 I2C總線典型器件AT24C02
應(yīng)用舉例 175
8.2 SPI總線器件的C51編程 180
8.2.1 認(rèn)識(shí)SPI總線 181
8.2.2 SPI總線典型器件X25045應(yīng)用
舉例 182
8.3 單總線的C51編程 186
8.3.1 認(rèn)識(shí)單總線 186
8.3.2 單總線典型器件DS18B20應(yīng)用
舉例 187
8.4 串行A/D接口芯片TLC2543的
C51編程 193
本章小結(jié) 196
習(xí)題 197
第9章 μVision2與Proteus使用基礎(chǔ) 198
9.1 μVision2集成開(kāi)發(fā)環(huán)境 198
9.1.1 File、Edit和View菜單 199
9.1.2 Project、Debug和Flash菜單 201
9.1.3 Peripherals、Tools和Window
菜單 202
9.2 用μVision2建立與調(diào)試工程 203
9.2.1 工程創(chuàng)建、設(shè)置、編譯與鏈接 203
9.2.2 用μVision2調(diào)試工程 207
9.2.3 C51程序調(diào)試舉例說(shuō)明――
HELLO.C 211
9.2.4 Keil C51的調(diào)試技巧及舉例 213
9.3 Proteus快速入門(mén) 216
9.3.1 集成Proteus ISIS環(huán)境 216
9.3.2 電路原理圖設(shè)計(jì) 221
9.4 Proteus仿真工具介紹 226
9.4.1 探針 226
9.4.2 虛擬儀器 226
9.4.3 信號(hào)發(fā)生器 227
9.4.4 仿真圖表 227
9.5 Proteus軟件中的C51程序運(yùn)行與
調(diào)試 228
9.5.1 驅(qū)動(dòng)的安裝 228
9.5.2 Keil和Proteus的配置 228
9.5.3 Keil和Proteus的調(diào)試過(guò)程 229
本章小結(jié) 229
習(xí)題 230
附錄A ASCII碼字符表 231
附錄B 單片機(jī)應(yīng)用資料查詢(xún)方法 232
附錄C Proteus常用分離器件名稱(chēng) 233
參考文獻(xiàn) 234