本書在前3版的基礎上,以MCS—51單片機為主體,從實際應用入手,結合大量實例循序漸進地講述51單片機C語言編程方法,以及51單片機的硬件結構和功能應用。全書分為基礎篇、應用篇和綜合提高篇。本書所有實例均采用仿真軟件Proteus仿真和實驗板實驗,使讀者真正做到“邊理論、邊實踐”,在實踐中逐步掌握單片機的硬件結構和開發(fā)方法。本書在編寫時力求通俗、易懂,硬件原理以“有用、夠用”為原則,內容講解以“緊密結合實踐”為特色。本書特別適合單片機零起點的初學者使用,可作為高等院?刂祁悓I(yè)學生、電子愛好者及各類工程技術人員的參考用書,也可作為高職、高專及中專院校的單片機課程教學用書。
王會良,男,1974年生,河南偃師人,河南科技大學副教授,工學博士,碩士研究生導師。主要研究方向為:齒輪數字化設計與智能制造技術、智能控制技術、數控機床與可靠性技術。兼職為洛陽市設備維修協會、洛陽市設備管理學會會員。 近年來,參與完成的著作或教材有4部,電子工業(yè)出版社出版的《單片機C語言應用100例》第3版、《Protel DXP 2004應用100例》、清華大學出版社出版的《質量工程》、華中科技大學出版社出版的《工業(yè)機器人第三版》。
基 礎 篇
第1章 單片機概述及實驗器材介紹 2
1.1 單片機概述 2
1.1.1 單片機的定義、分類與內部組成 2
1.1.2 單片機應用系統(tǒng)的結構及其工作過程 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章 單片機開發(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仿真設計快速入門 20
2.2 Keil C51的使用 30
2.2.1 單片機最小系統(tǒng) 30
2.2.2 實例3:用Keil C51編寫點亮一個發(fā)光二極管的程序 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口狀態(tài)送入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語言開發(fā)基礎 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的點亮狀態(tài) 83
4.4.4 實例20:用switch語句控制P0口8位LED的點亮狀態(tài) 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章 單片機的中斷系統(tǒng) 142
6.1 中斷系統(tǒng)的基本概念 142
6.2 中斷系統(tǒng)的結構及控制 143
6.2.1 中斷系統(tǒng)的結構 143
6.2.2 中斷系統(tǒng)的控制 144
6.3 中斷系統(tǒng)應用舉例 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的門控制位測量外部正脈沖寬度 160
6.3.6 實例49:用外中斷 測量負跳變信號累計數 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函數向計算機發(fā)送數據 177
7.4.4 實例53:計算機控制單片機LED顯示 179
習題與實驗 181
應 用 篇
第8章 接口技術 184
8.1 LED數碼管接口技術 184
8.1.1 LED數碼管的原理和接口電路 184
8.1.2 實例54:用LED數碼管循環(huán)顯示數字0~9 185
8.1.3 實例55:用三八譯碼器控制數碼管慢速動態(tài)掃描顯示數字 187
8.1.4 實例56:交通信號的處理與控制 189
8.1.5 實例57:超聲波測距-數碼管顯示 192
8.1.6 實例58:點陣LED動態(tài)顯示實現 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的5V直流數字電壓表 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:ASC712電流傳感器的使用 301
11.3.1 ASC712電流傳感器介紹 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型傳感器發(fā)送讀取命令 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 開發(fā)背景 340
11.10.2 開發(fā)要求 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環(huán)境下串行通信編程 348
11.11.1 開發(fā)環(huán)境 348
11.11.2 上下位機程序設計 349
11.11.3 程序結果 356
11.12 實例92:手部握力評估儀設計 356
11.12.1 系統(tǒng)工作原理 356
11.12.2 仿真原理圖設計 357
11.12.3 程序設計與仿真 358
11.13 實例93:心率測量系統(tǒng)設計 362
11.13.1 系統(tǒng)工作原理 362
11.13.2 仿真原理圖設計 363
11.13.3 程序設計與仿真 364
11.14 實例94:基于鉑熱電阻的防火系統(tǒng)設計 370
11.14.1 系統(tǒng)的工作原理 370
11.14.2 仿真原理圖設計 371
11.14.3 程序設計與仿真 373
11.15 實例95:基于LabVIEW和Proteus的溫度控制仿真 375
11.15.1 系統(tǒng)工作原理 375
11.15.2 仿真原理圖設計 376
11.15.3 程序設計與仿真 379
11.16 實例96:K型熱電偶的冷端自動補償設計 384
11.16.1 系統(tǒng)工作原理 384
11.16.2 仿真原理圖設計 385
11.16.3 程序設計與仿真 386
11.17 實例97:電動機測速表設計 388
11.17.1 系統(tǒng)工作原理 388
11.17.2 仿真原理圖設計 389
11.17.3 程序設計與仿真 390
11.18 實例98:基于PWM的直流電動機調速系統(tǒng)設計 392
11.18.1 系統(tǒng)工作原理 392
11.18.2 仿真原理圖設計 392
11.18.3 程序設計與仿真 393
11.19 實例99:基于L298N的可調速四驅小車設計 395
11.19.1 系統(tǒng)工作原理 395
11.19.2 仿真原理圖設計 396
11.19.3 程序設計 396
11.20 實例100:航空發(fā)動機熱電偶信號模擬電壓源設計 401
11.20.1 系統(tǒng)工作原理 401
11.20.2 仿真原理圖設計 401
11.20.3 程序設計 402
參考文獻 405