本書在前3版的基礎(chǔ)上,以MCS—51單片機為主體,從實際應(yīng)用入手,結(jié)合大量實例循序漸進地講述51單片機C語言編程方法,以及51單片機的硬件結(jié)構(gòu)和功能應(yīng)用。全書分為基礎(chǔ)篇、應(yīng)用篇和綜合提高篇。本書所有實例均采用仿真軟件Proteus仿真和實驗板實驗,使讀者真正做到“邊理論、邊實踐”,在實踐中逐步掌握單片機的硬件結(jié)構(gòu)和開發(fā)方法。本書在編寫時力求通俗、易懂,硬件原理以“有用、夠用”為原則,內(nèi)容講解以“緊密結(jié)合實踐”為特色。本書特別適合單片機零起點的初學(xué)者使用,可作為高等院?刂祁悓I(yè)學(xué)生、電子愛好者及各類工程技術(shù)人員的參考用書,也可作為高職、高專及中專院校的單片機課程教學(xué)用書。
王會良,男,1974年生,河南偃師人,河南科技大學(xué)副教授,工學(xué)博士,碩士研究生導(dǎo)師。主要研究方向為:齒輪數(shù)字化設(shè)計與智能制造技術(shù)、智能控制技術(shù)、數(shù)控機床與可靠性技術(shù)。兼職為洛陽市設(shè)備維修協(xié)會、洛陽市設(shè)備管理學(xué)會會員。 近年來,參與完成的著作或教材有4部,電子工業(yè)出版社出版的《單片機C語言應(yīng)用100例》第3版、《Protel DXP 2004應(yīng)用100例》、清華大學(xué)出版社出版的《質(zhì)量工程》、華中科技大學(xué)出版社出版的《工業(yè)機器人第三版》。
基 礎(chǔ) 篇
第1章 單片機概述及實驗器材介紹 2
1.1 單片機概述 2
1.1.1 單片機的定義、分類與內(nèi)部組成 2
1.1.2 單片機應(yīng)用系統(tǒng)的結(jié)構(gòu)及其工作過程 5
1.1.3 單片機的應(yīng)用 6
1.2 單片機基礎(chǔ)知識 7
1.2.1 數(shù)制與數(shù)制間的轉(zhuǎn)換 7
1.2.2 單片機中數(shù)的表示方法及常用數(shù)制的對應(yīng)關(guān)系 9
1.2.3 邏輯數(shù)據(jù)的表示 10
1.2.4 單片機中常用的基本術(shù)語 11
1.3 單片機入門的有效方法與途徑 12
1.4 學(xué)習(xí)單片機的基本條件 12
1.4.1 軟件條件 13
1.4.2 硬件條件 14
習(xí)題 15
第2章 單片機開發(fā)軟件及開發(fā)過程 16
2.1 仿真軟件Proteus的使用 16
2.1.1 Proteus的主要功能特點 16
2.1.2 實例1:功能感受—利用Proteus仿真單片機播放《渴望》主題曲 16
2.1.3 Proteus軟件的界面與操作介紹 17
2.1.4 實例2:Proteus仿真設(shè)計快速入門 20
2.2 Keil C51的使用 30
2.2.1 單片機最小系統(tǒng) 30
2.2.2 實例3:用Keil C51編寫點亮一個發(fā)光二極管的程序 30
2.3 程序燒錄器及燒錄軟件的使用 37
習(xí)題與實驗 37
第3章 逐步認識單片機基本結(jié)構(gòu) 39
3.1 實例4:用單片機控制一個燈閃爍 39
3.1.1 實現(xiàn)方法 39
3.1.2 程序設(shè)計 39
3.1.3 用Proteus軟件仿真 40
3.1.4 延時程序分析 42
3.2 實例5:將 P1口狀態(tài)送入P0、P2和P3口 43
3.2.1 實現(xiàn)方法 43
3.2.2 程序設(shè)計 44
3.2.3 用Proteus軟件仿真 44
3.2.4 用實驗板實驗 45
3.2.5 I/O口功能介紹 45
3.2.6 I/O口的結(jié)構(gòu)分析 45
3.3 實例6:使用P3口流水點亮8位LED 48
3.3.1 實現(xiàn)方法 48
3.3.2 程序設(shè)計 49
3.3.3 用Proteus軟件仿真 50
3.3.4 用實驗板實驗 50
3.4 實例7:通過對P3口地址的操作流水點亮8位LED 50
3.4.1 實現(xiàn)方法 50
3.4.2 程序設(shè)計 51
3.4.3 用Proteus軟件仿真 52
3.4.4 用實驗板實驗 52
3.5 MCS—51單片機存儲器的基本結(jié)構(gòu) 52
3.5.1 程序存儲器 52
3.5.2 數(shù)據(jù)存儲器 52
3.6 單片機的復(fù)位電路 54
習(xí)題與實驗 54
第4章 單片機C語言開發(fā)基礎(chǔ) 55
4.1 C語言源程序的結(jié)構(gòu)特點 55
4.2 標志符與關(guān)鍵字 56
4.3 C語言的數(shù)據(jù)類型與運算符 58
4.3.1 數(shù)據(jù)類型 58
4.3.2 運算符 61
4.3.3 實例8:用不同數(shù)據(jù)類型控制LED的閃爍 64
4.3.4 實例9:用P0口、P1 口分別顯示加法和減法運算結(jié)果 67
4.3.5 實例10:用P0口、P1口顯示乘法運算結(jié)果 69
4.3.6 實例11:用P1口、P0口顯示除法運算結(jié)果 70
4.3.7 實例12:用自增運算控制P0口8位LED的閃爍花樣 72
4.3.8 實例13:用P0口顯示邏輯“與”運算結(jié)果 73
4.3.9 實例14:用P0口顯示條件運算結(jié)果 73
4.3.10 實例15:用P0口顯示按位“異或”運算結(jié)果 74
4.3.11 實例16:用P0顯示左移運算結(jié)果 75
4.3.12 實例17:“萬能邏輯電路”實驗 76
4.3.13 實例18:用右移運算流水點亮P1口8位LED 77
4.4 C語言的語句 78
4.4.1 概述 78
4.4.2 控制語句 79
4.4.3 實例19:用if語句控制P0口8位LED的點亮狀態(tài) 83
4.4.4 實例20:用switch語句控制P0口8位LED的點亮狀態(tài) 85
4.4.5 實例21:用for語句設(shè)計鳴笛報警程序 87
4.4.6 實例22:用while語句控制P0口8位LED閃爍花樣 91
4.4.7 實例23:用do-while語句控制P0口8位LED流水點亮 92
4.5 C語言的數(shù)組 94
4.5.1 數(shù)組的定義和引用 94
4.5.2 實例24:用字符型數(shù)組控制P0口8位LED流水點亮 96
4.5.3 實例25:用P0口顯示字符串常量 97
4.6 C語言的指針 98
4.6.1 指針的定義與引用 99
4.6.2 實例26:用P0口顯示指針運算結(jié)果 101
4.6.3 實例27:用指針數(shù)組控制P0口8位LED流水點亮 102
4.6.4 實例28:用數(shù)組的指針控制P0 口8 位LED流水點亮 103
4.7 C語言的函數(shù) 105
4.7.1 函數(shù)的定義與調(diào)用 105
4.7.2 實例29:用P0口、P1口顯示整型函數(shù)返回值 108
4.7.3 實例30:用有參數(shù)函數(shù)控制P0口8位LED流水速度 110
4.7.4 實例31:用數(shù)組作為函數(shù)參數(shù)控制P0口8位LED流水點亮 111
4.7.5 實例32:用指針作為函數(shù)參數(shù)控制P0口8位LED流水點亮 112
4.7.6 實例33:用函數(shù)型指針控制P0口8位LED流水點亮 114
4.7.7 實例34:用指針數(shù)組作為函數(shù)的參數(shù)顯示多個字符串 115
4.7.8 實例35:字符函數(shù)ctype.h應(yīng)用舉例 117
4.7.9 實例36:內(nèi)部函數(shù)intrins.h應(yīng)用舉例 118
4.7.10 實例37:標準函數(shù)stdlib.h應(yīng)用舉例 120
4.7.11 實例38:字符串函數(shù)string.h應(yīng)用舉例 121
4.8 C語言的編譯預(yù)處理 122
4.8.1 常用預(yù)處理命令介紹 122
4.8.2 實例39:宏定義應(yīng)用舉例 124
4.8.3 實例40:文件包含應(yīng)用舉例 126
4.8.4 實例41:條件編譯應(yīng)用舉例 127
習(xí)題與實驗 128
第5章 單片機的定時器/計數(shù)器 130
5.1 定時器/計數(shù)器的基本概念 130
5.2 定時器/計數(shù)器的結(jié)構(gòu)及工作原理 131
5.2.1 定時器/計數(shù)器的結(jié)構(gòu) 132
5.2.2 定時器/計數(shù)器的工作原理 132
5.3 定時器/計數(shù)器的控制 133
5.3.1 定時器/計數(shù)器的方式控制寄存器(TMOD) 133
5.3.2 定時器/計數(shù)器控制寄存器(TCON) 133
5.3.3 定時器/計數(shù)器的4種工作方式 134
5.3.4 定時器/計數(shù)器中定時/計數(shù)初值的計算 137
5.4 定時器/計數(shù)器應(yīng)用舉例 137
5.4.1 實例42:用定時器T0控制跑馬燈實現(xiàn) 137
5.4.2 實例43:用定時器T1的查詢方式控制報警器鳴笛實現(xiàn) 139
習(xí)題與實驗 141
第6章 單片機的中斷系統(tǒng) 142
6.1 中斷系統(tǒng)的基本概念 142
6.2 中斷系統(tǒng)的結(jié)構(gòu)及控制 143
6.2.1 中斷系統(tǒng)的結(jié)構(gòu) 143
6.2.2 中斷系統(tǒng)的控制 144
6.3 中斷系統(tǒng)應(yīng)用舉例 147
6.3.1 實例44:用定時器T0的中斷方式控制跑馬燈實現(xiàn) 147
6.3.2 實例45:煙霧報警器設(shè)計與制作 148
6.3.3 實例46:用定時器T0的中斷方式控制PWM波模擬舵機轉(zhuǎn)動 152
6.3.4 實例47:用定時器T0實現(xiàn)音樂播放器功能 155
6.3.5 實例48:用定時器T0的門控制位測量外部正脈沖寬度 160
6.3.6 實例49:用外中斷 測量負跳變信號累計數(shù) 162
習(xí)題與實驗 164
第7章 串行通信技術(shù) 165
7.1 串行通信的基本概念 165
7.2 串行通信口的結(jié)構(gòu) 167
7.3 串行通信口的控制 167
7.3.1 串行口控制寄存器SCON 168
7.3.2 電源控制寄存器PCON 168
7.3.3 4種工作方式與波特率的設(shè)置 169
7.4 串行通信口應(yīng)用舉例 172
7.4.1 實例50:基于方式1的單工通信 172
7.4.2 實例51:基于方式3的單工通信 174
7.4.3 實例52:單片機使用print函數(shù)向計算機發(fā)送數(shù)據(jù) 177
7.4.4 實例53:計算機控制單片機LED顯示 179
習(xí)題與實驗 181
應(yīng) 用 篇
第8章 接口技術(shù) 184
8.1 LED數(shù)碼管接口技術(shù) 184
8.1.1 LED數(shù)碼管的原理和接口電路 184
8.1.2 實例54:用LED數(shù)碼管循環(huán)顯示數(shù)字0~9 185
8.1.3 實例55:用三八譯碼器控制數(shù)碼管慢速動態(tài)掃描顯示數(shù)字 187
8.1.4 實例56:交通信號的處理與控制 189
8.1.5 實例57:超聲波測距-數(shù)碼管顯示 192
8.1.6 實例58:點陣LED動態(tài)顯示實現(xiàn) 194
8.2 鍵盤接口技術(shù) 196
8.2.1 獨立式鍵盤的工作原理 196
8.2.2 實例59:無軟件消抖的獨立式鍵盤輸入實驗 197
8.2.3 實例60:簡易門鈴設(shè)計 199
8.2.4 實例61:簡易密碼鎖設(shè)計 202
8.2.5 實例62:定時器中斷控制的鍵盤掃描實驗 206
8.2.6 實例63:“一鍵多能”實驗 207
8.2.7 實例64:獨立式鍵盤控制步進電動機實驗 210
8.2.8 矩陣鍵盤的工作原理 215
8.2.9 實例65:簡易計算器設(shè)計 216
8.2.10 實例66:簡易電子琴設(shè)計 220
8.3 字符型LCD接口技術(shù) 226
8.3.1 1602字符型LCD簡介 226
8.3.2 實例67:用LCD顯示字符“A” 231
8.3.3 實例68:數(shù)字秒表設(shè)計 236
習(xí)題與實驗 237
第9章 新型串行接口芯片應(yīng)用 238
9.1 I2C總線器件及其應(yīng)用實例 238
9.1.1 I2C總線接口 238
9.1.2 實例69:將按鍵次數(shù)寫入AT24C02,再讀出后送LCD顯示 241
9.1.3 實例70:對I2C總線上掛接兩個AT24C02的讀/寫操作 242
9.2 單總線器件及其應(yīng)用實例 244
9.2.1 單總線簡介 244
9.2.2 實例71:DS18B20溫度檢測及其LCD顯示 248
9.2.3 單總線溫、濕度傳感器DHT11介紹 250
9.2.4 實例72:DHT11溫度檢測及其LCD顯示 251
9.3 SPI總線接口芯片及其應(yīng)用實例 254
9.3.1 SPI串行總線簡介 254
9.3.2 實例73:將數(shù)據(jù)“0xaa”寫入X5045再讀出后送P1口顯示 257
9.3.3 實例74:將流水燈控制碼寫入X5045并讀出后送P1口顯示 259
9.3.4 實例75:對SPI總線上掛接的兩個X5045的讀/寫操作 260
習(xí)題與實驗 261
第10章 常用功能器件應(yīng)用舉例 263
10.1 模/數(shù)(A/D)轉(zhuǎn)換器件 263
10.1.1 A/D轉(zhuǎn)換基礎(chǔ) 263
10.1.2 實例76:基于ADC0832的5V直流數(shù)字電壓表 265
10.2 數(shù)/模(D/A)轉(zhuǎn)換器件 267
10.2.1 D/A轉(zhuǎn)換基礎(chǔ) 267
10.2.2 實例77:用DAC0832產(chǎn)生鋸齒波電壓 269
10.3 紅外線遙控信號接收器件 270
10.3.1 紅外線信號接收基礎(chǔ) 270
10.3.2 實例78:用P1口顯示紅外遙控器的按鍵值 272
10.3.3 實例79:用紅外線遙控器控制繼電器 274
10.4 適時時鐘芯片 275
10.4.1 常用適時時鐘芯片介紹 276
10.4.2 實例80:基于DS1302的日歷時鐘 278
習(xí)題與實驗 280
綜合提高篇
第11章 綜合應(yīng)用實例 282
11.1 實例81:中文字符的液晶顯示 282
11.1.1 圖形點陣顯示器簡介 282
11.1.2 仿真原理圖設(shè)計 286
11.1.3 程序設(shè)計與仿真 287
11.2 實例82:12位A/D轉(zhuǎn)換器TLC2543的使用 292
11.2.1 TLC2543介紹 292
11.2.2 仿真原理圖設(shè)計 294
11.2.3 程序設(shè)計與仿真 296
11.3 實例83:ASC712電流傳感器的使用 301
11.3.1 ASC712電流傳感器介紹 301
11.3.2 仿真原理圖設(shè)計 302
11.3.3 程序設(shè)計與仿真 302
11.4 實例84:電壓型傳感器的使用 305
11.4.1 FS4003傳感器介紹 305
11.4.2 仿真原理圖設(shè)計 307
11.4.3 程序設(shè)計與仿真 308
11.5 實例85:RS—232型數(shù)字傳感器的使用 313
11.5.1 FS4003傳感器的串口通信協(xié)議介紹 313
11.5.2 仿真原理圖設(shè)計 313
11.5.3 程序設(shè)計與仿真 314
11.6 實例86:電流型傳感器應(yīng)用舉例 321
11.6.1 電流型傳感器的使用基礎(chǔ) 321
11.6.2 仿真原理圖設(shè)計 322
11.6.3 程序設(shè)計與仿真 324
11.7 實例87:基于化學(xué)傳感器的氧濃度檢測儀設(shè)計 326
11.7.1 R—17MED化學(xué)傳感器簡介 326
11.7.2 硬件仿真電路設(shè)計 327
11.7.3 程序設(shè)計與仿真 328
11.8 實例88:單片機向RS—485型傳感器發(fā)送讀取命令 330
11.8.1 RS—485通信簡介 331
11.8.2 TTL/RS—485轉(zhuǎn)換的仿真原理圖設(shè)計 332
11.8.3 程序設(shè)計與仿真 334
11.9 實例89:單片機從RS—485型傳感器接收數(shù)據(jù) 336
11.9.1 RS—485傳感器返回數(shù)據(jù)的格式 336
11.9.2 仿真原理圖設(shè)計 337
11.9.3 程序設(shè)計與仿真 337
11.10 實例90:用VB實現(xiàn)單片機和計算機的串行通信 340
11.10.1 開發(fā)背景 340
11.10.2 開發(fā)要求 340
11.10.3 Visual Basic 6.0 簡介 340
11.10.4 添加MSComm控件與基本屬性設(shè)置 341
11.10.5 Visual Basic 6.0實現(xiàn)串行通信的過程 342
11.11 實例91:LabVIEW環(huán)境下串行通信編程 348
11.11.1 開發(fā)環(huán)境 348
11.11.2 上下位機程序設(shè)計 349
11.11.3 程序結(jié)果 356
11.12 實例92:手部握力評估儀設(shè)計 356
11.12.1 系統(tǒng)工作原理 356
11.12.2 仿真原理圖設(shè)計 357
11.12.3 程序設(shè)計與仿真 358
11.13 實例93:心率測量系統(tǒng)設(shè)計 362
11.13.1 系統(tǒng)工作原理 362
11.13.2 仿真原理圖設(shè)計 363
11.13.3 程序設(shè)計與仿真 364
11.14 實例94:基于鉑熱電阻的防火系統(tǒng)設(shè)計 370
11.14.1 系統(tǒng)的工作原理 370
11.14.2 仿真原理圖設(shè)計 371
11.14.3 程序設(shè)計與仿真 373
11.15 實例95:基于LabVIEW和Proteus的溫度控制仿真 375
11.15.1 系統(tǒng)工作原理 375
11.15.2 仿真原理圖設(shè)計 376
11.15.3 程序設(shè)計與仿真 379
11.16 實例96:K型熱電偶的冷端自動補償設(shè)計 384
11.16.1 系統(tǒng)工作原理 384
11.16.2 仿真原理圖設(shè)計 385
11.16.3 程序設(shè)計與仿真 386
11.17 實例97:電動機測速表設(shè)計 388
11.17.1 系統(tǒng)工作原理 388
11.17.2 仿真原理圖設(shè)計 389
11.17.3 程序設(shè)計與仿真 390
11.18 實例98:基于PWM的直流電動機調(diào)速系統(tǒng)設(shè)計 392
11.18.1 系統(tǒng)工作原理 392
11.18.2 仿真原理圖設(shè)計 392
11.18.3 程序設(shè)計與仿真 393
11.19 實例99:基于L298N的可調(diào)速四驅(qū)小車設(shè)計 395
11.19.1 系統(tǒng)工作原理 395
11.19.2 仿真原理圖設(shè)計 396
11.19.3 程序設(shè)計 396
11.20 實例100:航空發(fā)動機熱電偶信號模擬電壓源設(shè)計 401
11.20.1 系統(tǒng)工作原理 401
11.20.2 仿真原理圖設(shè)計 401
11.20.3 程序設(shè)計 402
參考文獻 405