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