目 錄
前言
第一篇 單片機C51概述
第1章 單片機開發(fā)概述 1
1.1 單片機介紹 1
1.1.1 單片機簡介 1
1.1.2 單片機的主要組成部分 2
1.1.3 單片機引腳及功能 3
1.1.4 單片機的應用領域 4
1.2 單片機開發(fā)流程 5
1.2.1 系統(tǒng)分析 5
1.2.2 單片機選型 5
1.2.3 程序設計 8
1.2.4 仿真測試 9
1.2.5 程序下載 9
1.3 單片機開發(fā)語言概述 9
1.3.1 單片機匯編語言 9
1.3.2 單片機C51語言 10
1.4 小結 11
1.5 習題與上機實踐 11
第2章 構建C51集成開發(fā)環(huán)境 12
2.1 51系列單片機的最小硬件系統(tǒng) 12
2.1.1 時鐘振蕩電路 13
2.1.2 單片機的復位電路 14
2.2 Keil μ Vision3集成開發(fā)環(huán)境 15
2.2.1 Keil μ Vision3簡介 16
2.2.2 Keil μ Vision3安裝 16
2.2.3 Keil μ Vision3界面概覽 17
2.2.4 Keil μ Vision3的各種常用窗口 18
2.3 Keil μ Vision3中C51的開發(fā)流程 22
2.3.1 創(chuàng)建項目 22
2.3.2 創(chuàng)建源文件 22
2.3.3 編譯項目 24
2.3.4 仿真調試 24
2.3.5 程序下載 25
2.4 小結 25
2.5 習題與上機實踐 26
第二篇 C51語言程序設計指南
第3章 C51語言程序設計基礎 27
3.1 C51程序的基本結構 27
3.2 C51編程規(guī)范及注意事項 28
3.2.1 注釋 28
3.2.2 命名 29
3.2.3 格式 29
3.3 C51的標識符與關鍵字 30
3.3.1 標識符 30
3.3.2 關鍵字 30
3.4 C51的變量類型 32
3.4.1 C51的數(shù)據類型 32
3.4.2 整型變量 33
3.4.3 浮點型變量 34
3.4.4 字符型變量 35
3.4.5 指針型變量 36
3.4.6 無值型變量 37
3.5 C51的常量類型 37
3.5.1 整型常量 37
3.5.2 浮點型常量 38
3.5.3 字符型常量 39
3.5.4 轉義字符 40
3.6 變量作用域 40
3.6.1 變量作用域的基本規(guī)則 41
3.6.2 自動變量 42
3.6.3 全局變量 43
3.6.4 靜態(tài)變量 44
3.6.5 寄存器變量 45
3.7 分隔符與const修飾符 45
3.7.1 C51分隔符 45
3.7.2 const修飾符 45
3.8 C51的運算符 47
3.8.1 算術運算符 47
3.8.2 邏輯運算符 49
3.8.3 關系運算符 50
3.8.4 位運算符 50
3.8.5 “,”運算符 53
3.8.6 “?”運算符 54
3.8.7 “sizeof”運算符 54
3.8.8 地址操作運算符 55
3.8.9 聯(lián)合操作運算符 55
3.8.10 強制類型轉換運算符 56
3.8.11 運算符優(yōu)先級和結合性 57
3.9 C51的表達式 58
3.9.1 算術表達式 58
3.9.2 賦值表達式 59
3.9.3 逗號表達式 60
3.9.4 關系表達式 61
3.9.5 邏輯表達式 62
3.10 小結 63
3.11 上機實踐 63
第4章 C51語句和流程 65
4.1 C51語句 65
4.1.1 變量聲明語句 65
4.1.2 表達式語句 66
4.1.3 復合語句 66
4.1.4 循環(huán)語句 67
4.1.5 條件語句 70
4.1.6 開關語句 74
4.1.7 程序跳轉語句 76
4.1.8 函數(shù)調用語句 78
4.1.9 函數(shù)返回語句 79
4.1.10 空語句 80
4.2 C51的流程控制結構及程序示例 80
4.2.1 順序結構 80
4.2.2 選擇結構 80
4.2.3 循環(huán)結構 81
4.2.4 流程控制結構程序示例 81
4.3 小結 82
4.4 上機實踐 83
第5章 C51的數(shù)據結構 85
5.1 C51的數(shù)組 85
5.1.1 數(shù)組定義及數(shù)組元素 85
5.1.2 一維數(shù)組 87
5.1.3 一維字符串數(shù)組 90
5.1.4 二維數(shù)組 92
5.1.5 二維字符串數(shù)組 95
5.1.6 多維數(shù)組 96
5.2 C51的指針 96
5.2.1 指針及相關概念 97
5.2.2 指針變量的定義及賦值 97
5.2.3 取址運算符和取值運算符 100
5.2.4 指針變量的運算 102
5.2.5 C51的字符指針 103
5.2.6 C51的數(shù)組指針 104
5.2.7 C51的指針數(shù)組 109
5.3 C51的結構 110
5.3.1 結構的聲明 110
5.3.2 結構變量的聲明 111
5.3.3 結構變量的初始化 113
5.3.4 結構變量的使用 114
5.3.5 C51的結構數(shù)組 115
5.3.6 C51的結構指針 116
5.3.7 C51的嵌套式結構 119
5.3.8 C51的位結構 121
5.4 C51的聯(lián)合 122
5.4.1 聯(lián)合的聲明和使用 122
5.4.2 結構和聯(lián)合的區(qū)別 126
5.5 C51的枚舉 127
5.5.1 枚舉和枚舉變量的聲明 128
5.5.2 枚舉變量的賦值和使用 129
5.6 C51的位域 131
5.6.1 位域和位域變量的聲明 131
5.6.2 位域變量的使用 133
5.7 C51的類型聲明 134
5.7.1 類型聲明的定義 134
5.7.2 類型聲明的使用 135
5.8 小結 135
5.9 上機實踐 135
第6章 C51的函數(shù) 137
6.1 函數(shù) 137
6.1.1 函數(shù)的概述 137
6.1.2 函數(shù)的分類 138
6.1.3 函數(shù)的定義 139
6.1.4 函數(shù)的參數(shù) 141
6.1.5 函數(shù)的返回值 146
6.2 函數(shù)的作用域 146
6.2.1 函數(shù)的作用范圍 146
6.2.2 函數(shù)代碼的作用域 147
6.2.3 函數(shù)變量的作用域 147
6.3 函數(shù)的調用 148
6.3.1 賦值調用 149
6.3.2 引用調用 149
6.3.3 遞歸調用 150
6.3.4 嵌套調用 151
6.4 C51的main函數(shù) 153
6.4.1 無參main函數(shù) 153
6.4.2 有參main函數(shù) 153
6.5 C51的庫函數(shù) 154
6.5.1 I/O函數(shù)庫 154
6.5.2 標準函數(shù)庫 166
6.5.3 字符函數(shù)庫 173
6.5.4 字符串函數(shù)庫 184
6.5.5 內部函數(shù)庫 199
6.5.6 數(shù)學函數(shù)庫 201
6.5.7 絕對地址訪問函數(shù)庫 207
6.5.8 變量參數(shù)表函數(shù)庫 210
6.5.9 全程跳轉函數(shù)庫 211
6.5.10 偏移量函數(shù)庫 212
6.6 小結 213
6.7 上機實踐 213
第7章 C51的存儲結構 215
7.1 單片機的存儲器結構 215
7.1.1 51系列單片機的存儲區(qū)域 215
7.1.2 片內RAM的存儲器結構 216
7.2 C51的存儲類型 216
7.2.1 code存儲類型 217
7.2.2 data存儲類型 217
7.2.3 bdata存儲類型 218
7.2.4 idata存儲類型 218
7.2.5 pdata存儲類型 219
7.2.6 xdata存儲類型 219
7.3 C51的擴展數(shù)據類型 219
7.3.1 sfr和sfr16型變量 220
7.3.2 sbit型變量 220
7.3.3 bit型變量 221
7.3.4 51單片機寄存器的定義 221
7.4 C51變量的存儲模式 223
7.4.1 Small模式 224
7.4.2 Compact模式 224
7.4.3 Large模式 224
7.5 C51的存儲器指針 225
7.5.1 一般指針 225
7.5.2 存儲器指針 226
7.6 小結 228
7.7 上機實踐 228
第8章 C51的預處理命令和用戶配置文件 229
8.1 C51的預處理命令概述 229
8.2 文件包含指令 230
8.2.1 #include命令 230
8.2.2 C51常用的頭文件 231
8.3 宏定義指令 232
8.3.1 #define命令 232
8.3.2 #undef命令 234
8.4 條件編譯指令 235
8.4.1 #if、#else和#endif命令 235
8.4.2 #elif命令 236
8.4.3 #ifdef、#ifndef命令 237
8.5 其他編譯指令 238
8.5.1 #line命令 238
8.5.2 #error命令 238
8.5.3 #pragma命令 239
8.6 C51的用戶配置文件 240
8.6.1 C51的啟動代碼詳解 240
8.6.2 C51的變量初始化文件 246
8.6.3 C51的基本I/O函數(shù)文件 246
8.6.4 C51的分組配置文件 246
8.7 小結 247
8.8 上機實踐 247
第三篇 C51單片機編程指南
第9章 C51定時器/計數(shù)器程序設計 249
9.1 定時器/計數(shù)器簡介 249
9.1.1 定時器/計數(shù)器的結構 249
9.1.2 方式控制寄存器TMOD 250
9.1.3 中斷控制寄存器TCON 251
9.1.4 定時器/計數(shù)器的初值 253
9.1.5 定時器/計數(shù)器的初始化 253
9.2 定時器/計數(shù)器工作模式0的C51程序設計 253
9.2.1 定時器/計數(shù)器工作模式0 254
9.2.2 定時器/計數(shù)器模式0的程序設計 254
9.3 定時器/計數(shù)器工作模式1的C51程序設計 255
9.3.1 定時器/計數(shù)器工作模式1 255
9.3.2 定時器/計數(shù)器模式1的程序設計 256
9.4 定時器/計數(shù)器工作模式2的C51程序設計 257
9.4.1 定時器/計數(shù)器工作模式2 257
9.4.2 定時器/計數(shù)器模式2的程序設計 258
9.5 定時器/計數(shù)器工作模式3的C51程序設計 259
9.5.1 定時器/計數(shù)器工作模式3 259
9.5.2 定時器/計數(shù)器模式3的程序設計 259
9.6 小結 261
9.7 上機實踐 261
第10章 C51中斷程序設計 263
10.1 單片機的中斷系統(tǒng) 263
10.1.1 單片機中斷的典型概念 263
10.1.2 單片機的中斷類型 264
10.1.3 中斷請求標志及其C51訪問 265
10.1.4 中斷允許標志及其C51訪問 268
10.1.5 中斷優(yōu)先級標志及其C51訪問 269
10.1.6 中斷的C51處理過程 269
10.2 外部中斷源的C51程序設計 273
10.3 定時中斷源的C51程序設計 274
10.4 串行中斷源的C51程序設計 275
10.5 小結 276
10.6 上機實踐 276
第11章 C51串行接口程序設計 277
11.1 51系列單片機的串行接口 277
11.1.1 單片機串行通信概述 277
11.1.2 單片機串行接口的內部結構 278
11.1.3 串行接口控制寄存器SCON 279
11.1.4 特殊功能寄存器PCON 282
11.2 串行口工作模式0的C51程序設計 282
11.2.1 模式0的波特率 283
11.2.2 模式0的數(shù)據發(fā)送及C51程序設計 283
11.2.3 模式0的數(shù)據接收及C51程序設計 285
11.3 串行口工作模式1的C51程序設計 287
11.3.1 模式1的波特率 287
11.3.2 模式1的數(shù)據發(fā)送及C51程序設計 289
11.3.3 模式1的數(shù)據接收及C51程序設計 291
11.4 串行口工作模式2的C51程序設計 293
11.4.1 模式2的波特率 293
11.4.2 模式2的數(shù)據發(fā)送及C51程序設計 293
11.4.3 模式2的數(shù)據接收及C51程序設計 295
11.5 串行口工作模式3的C51程序設計 297
11.5.1 模式3的波特率 297
11.5.2 模式3的數(shù)據發(fā)送及C51程序設計 299
11.5.3 模式3的數(shù)據接收及C51程序設計 300
11.6 小結 303
11.7 上機實踐 303
第12章 C51下的RTX-51實時多任務操作系統(tǒng) 304
12.1 RTX-51實時多任務操作系統(tǒng)簡介 304
12.1.1 單任務程序與多任務程序的比較 304
12.1.2 RTX-51實時多任務操作系統(tǒng)種類 306
12.2 RTX-51的系統(tǒng)函數(shù) 308
12.2.1 中斷調用的發(fā)送信號函數(shù) 308
12.2.2 清除信號標志函數(shù) 308
12.2.3 啟動任務函數(shù) 309
12.2.4 刪除任務函數(shù) 309
12.2.5 獲取當前任務號函數(shù) 310
12.2.6 任務調用的發(fā)送信號函數(shù) 310
12.2.7 等待函數(shù) 311
12.3 RTX-51的任務調度 313
12.3.1 循環(huán)任務調度 314
12.3.2 事件任務調度 315
12.3.3 信號任務調度 316
12.3.4 優(yōu)先級及搶先任務切換 316
12.3.5 RTX-51的主要概念和特性 318
12.4 RTX-51 Tiny的任務管理 318
12.4.1 RTX-51 Tiny的任務狀態(tài) 319
12.4.2 RTX-51 Tiny的事件 319
12.4.3 RTX-51 Tiny的任務切換 319
12.5 RTX-51 Tiny的系統(tǒng)配置 320
12.5.1 RTX-51 Tiny系統(tǒng)配置文件 320
12.5.2 RTX-51 Tiny系統(tǒng)參數(shù) 322
12.6 RTX-51 Tiny的要求及注意事項 323
12.6.1 RTX-51 Tiny的要求及技術參數(shù) 323
12.6.2 RTX-51 Tiny的注意事項 324
12.7 RTX-51 FULL實時多任務操作系統(tǒng)簡介 325
12.7.1 RTX-51 FULL函數(shù)一覽 325
12.7.2 RTX-51的技術參數(shù) 327
12.8 小結 328
12.9 上機實踐 328
第13章 Keil μ Vision3的調試和仿真 329
13.1 Keil μ Vision3的程序調試 329
13.1.1 Keil μ Vision3的程序調試模式 329
13.1.2 斷點 331
13.1.3 性能分析器 332
13.1.4 代碼覆蓋分析器 334
13.1.5 調試命令 335
13.2 系統(tǒng)資源仿真 336
13.2.1 并行I/O端口仿真 337
13.2.2 寄存器仿真 338
13.2.3 中斷仿真 341
13.2.4 串行接口仿真 344
13.2.5 定時器/計數(shù)器仿真 348
13.2.6 看門狗定時器的仿真 354
13.2.7 低功耗仿真 356
13.3 小結 357
13.4 上機實踐 357
第四篇 C51程序設計典型案例
第14章 C51矩陣式鍵盤程序設計 359
14.1 鍵盤接口概述 359
14.1.1 獨立式按鍵和矩陣式鍵盤 359
14.1.2 鍵盤設計注意事項 360
14.2 矩陣式鍵盤C51程序設計 361
14.2.1 掃描法及C51程序設計 361
14.2.2 線反轉法及C51程序設計 364
14.2.3 中斷法及C51程序設計 365
14.3 C51矩陣式鍵盤設計實例 367
14.3.1 電路圖 367
14.3.2 程序設計 368
14.4 小結 371
14.5 上機實踐 371
第15章 C51液晶顯示模塊 372
15.1 液晶顯示模塊概述 372
15.1.1 液晶顯示模塊的分類 372
15.1.2 液晶顯示模塊的特點 373
15.2 液晶顯示控制驅動器 374
15.2.1 液晶顯示控制驅動器概述 374
15.2.2 液晶顯示控制驅動器功能說明 374
15.3 液晶顯示控制器指令集 378
15.3.1 基本指令集 378
15.3.2 擴充指令集 380
15.3.3 控制器指令操作方式 382
15.4 點陣圖形型液晶操作子函數(shù) 384
15.4.1 指令操作子函數(shù) 384
15.4.2 數(shù)據操作子函數(shù) 384
15.4.3 初始化子函數(shù) 385
15.4.4 清屏子函數(shù) 386
15.4.5 漢字顯示子函數(shù) 386
15.4.6 圖形顯示子函數(shù) 387
15.5 液晶漢字顯示實例 388
15.5.1 電路設計 388
15.5.2 程序設計 390
15.6 液晶圖形顯示實例 392
15.6.1 圖形數(shù)組的提取 392
15.6.2 圖形顯示程序設計 393
15.7 小結 395
15.8 上機實踐 396
第16章 C51模擬I2C總線 397
16.1 I2C總線概述 397
16.1.1 I2C總線工作原理 397
16.1.2 I2C總線器件的尋址方式 398
16.1.3 I2C總線數(shù)據操作 399
16.2 I2C總線接口EEPROM存儲器 400
16.3 C51模擬I2C總線協(xié)議 401
16.3.1 延時子函數(shù) 401
16.3.2 起始信號子函數(shù) 401
16.3.3 終止信號子函數(shù) 402
16.3.4 應答信號子函數(shù) 402
16.3.5 非應答信號子函數(shù) 403
16.3.6 應答位檢查子函數(shù) 403
16.3.7 單字節(jié)寫子函數(shù) 404
16.3.8 單字節(jié)讀子函數(shù) 404
16.3.9 多字節(jié)寫子函數(shù) 405
16.3.10 多字節(jié)讀子函數(shù) 405
16.4 C51讀寫EEPROM實例 407
16.4.1 電路設計 407
16.4.2 程序設計 408
16.4.3 仿真分析 410
16.5 小結 411
16.6 上機實踐 411
第17章 C51模擬單總線接口 412
17.1 單總線接口概述 412
17.1.1 單總線接口結構 412
17.1.2 單總線通信格式 412
17.1.3 單總線的特點 413
17.2 單總線溫度傳感器及C51操作 413
17.2.1 溫度傳感器DS18S20概述 413
17.2.2 DS18S20的數(shù)據操作及指令 414
17.2.3 DS18S20的訪問流程 417
17.2.4 溫度轉換操作 417
17.2.5 C51模擬單總線操作子函數(shù) 418
17.3 C51單總線溫度傳感器實例 426
17.3.1 電路設計 426
17.3.2 程序設計 428
17.3.3 仿真分析 431
17.4 小結 431
17.5 上機實踐 432
第18章 實時時鐘芯片應用 433
18.1 實時時鐘芯片DS1302概述 433
18.1.1 實時時鐘芯片DS1302引腳 433
18.1.2 實時時鐘芯片DS1302的日期操作 434
18.1.3 實時時鐘芯片DS1302的控制操作 435
18.1.4 實時時鐘芯片DS1302的RAM操作 436
18.1.5 實時時鐘芯片DS1302數(shù)據傳輸方式 437
18.2 DS1302的控制子函數(shù) 438
18.2.1 復位子函數(shù) 438
18.2.2 字節(jié)讀取子函數(shù) 439
18.2.3 字節(jié)寫入子函數(shù) 439
18.2.4 年設置子函數(shù) 439
18.2.5 月設置子函數(shù) 440
18.2.6 日設置子函數(shù) 440
18.2.7 星期設置子函數(shù) 440
18.2.8 小時設置子函數(shù) 441
18.2.9 分鐘設置子函數(shù) 441
18.2.10 秒設置子函數(shù) 441
18.2.11 寫保護子函數(shù) 442
18.2.12 寫允許子函數(shù) 442
18.2.13 充電控制子函數(shù) 442
18.2.14 初始化子函數(shù) 442
18.2.15 RAM字節(jié)寫入子函數(shù) 443
18.2.16 時鐘顯示子函數(shù) 444
18.2.17 多字節(jié)突發(fā)方式讀取RAM子函數(shù) 444
18.2.18 多字節(jié)突發(fā)方式寫入RAM子函數(shù) 445
18.3 C51讀寫實時時鐘芯片實例 445
18.3.1 電路圖 446
18.3.2 程序設計 446
18.3.3 仿真分析 450
18.4 小結 452
18.5 上機實踐 452
第19章 C51通信接口程序設計 453
19.1 串行接口通信概述 453
19.1.1 串行接口通信標準 453
19.1.2 串行接口芯片 458
19.1.3 雙機及多機通信原理 459
19.2 C51雙機通信實例 460
19.2.1 電路原理圖 460
19.2.2 發(fā)送方程序設計 461
19.2.3 接收方程序設計 463
19.3 C51多機通信實例 464
19.3.1 主機程序設計 464
19.3.2 從機程序設計 468
19.4 小結 472
19.5 上機實踐 472
第20章 道路交通燈多任務控制系統(tǒng) 473
20.1 交通燈多任務控制系統(tǒng)概述 473
20.2 C51交通燈多任務控制系統(tǒng) 474
20.2.1 電路原理圖 474
20.2.2 建立RTX-51 Tiny項目 475
20.2.3 多任務劃分 476
20.2.4 多任務程序設計 476
20.2.5 串行通信及命令獲取子函數(shù) 483
20.2.6 仿真調試 488
20.3 小結 490
20.4 上機實踐 490
第21章 常見面試題及解答 491
21.1 C51編程類面試題 491
21.1.1 預處理 491
21.1.2 C51語言基礎 492
21.1.3 循環(huán) 494
21.1.4 位操作 495
21.1.5 實用子函數(shù) 496
21.2 與MCS-51硬件相關的面試題 498
21.2.1 MCS-51硬件基礎 498
21.2.2 硬件編程 500