商品簡介
《零基礎學單片機C語言程序設計(第2版)(附DVD光盤1張)》單片機C51語言是目前最流行的單片機程序設計語言。本書由淺入深、循序漸進地講解了C51語言的方方面面。《零基礎學單片機C語言程序設計(第2版)(附DVD光盤1張)》知識點覆蓋全面、結構安排緊湊、講解詳細、通俗易懂、實例豐富。內容包括51系列單片機開發環境和流程、程序設計基礎以及編程指南,并給出了一些常用的典型案例。《零基礎學單片機C語言程序設計(第2版)(附DVD光盤1張)》分為四篇,共21章,全面詳細地講述了單片機的程序設計基礎、編程指南及應用案例。首先介紹了51系列單片機的基本結構以及單片機的開發概述,其次詳細介紹了單片機程序設計的C51語言,隨後結合單片機的硬件資源細致講解了如何應用C51語言進行編程操作,最後結合實際應用,重點分析了在各個領域中常用到的一些典型案例,使讀者更加融會貫通地掌握C51語言,以供讀者在學習和工作中進行參考。在第21章中還介紹了部分常見的面試題及解答,方便讀者做好入職前的準備工作。
《零基礎學單片機C語言程序設計(第2版)(附DVD光盤1張)》適合廣大單片機程序開發人員、電子設計愛好者、工程師和大專院校師生閱讀,尤其是適用于單片機及其編程語言的初學者。
名人推薦
《零基礎學單片機C語言程序設計(第2版)(附DVD光盤1張)》內容全面,由淺入深;結合實例,強化理解;聯系硬件,切合需求;仿真調試,熟練應用;案例豐富,分析全面;精選習題加強訓練,面試題讓您輕松應對職場。
目次
前言
第一篇 單片機C51概述
第1章 單片機開發概述 1
1.1 單片機介紹 1
1.1.1 單片機簡介 1
1.1.2 單片機的主要組成部分 1
1.1.3 單片機引腳及功能 2
1.1.4 單片機的應用領域 4
1.2 單片機開發流程 5
1.2.1 系統分析 5
1.2.2 單片機選型 5
1.2.3 程序設計 8
1.2.4 仿真測試 8
1.2.5 程序下載 9
1.3 單片機開發語言概述 9
1.3.1 單片機匯編語言 9
1.3.2 單片機C51語言 10
1.4 小結 11
1.5 習題與上機實踐 11
第2章 構建C51集成開發環境 12
2.1 51系列單片機的最小硬件系統 12
2.1.1 時鐘振蕩電路 13
2.1.2 單片機的復位電路 14
2.2 Keil m Vision3集成開發環境 15
2.2.1 Keil m Vision3簡介 15
2.2.2 Keil m Vision3安裝 15
2.2.3 Keil m Vision3界面概覽 17
2.2.4 Keil m Vision3的各種常用窗口 17
2.3 Keil m Vision3中C51的開發流程 21
2.3.1 創建項目 21
2.3.2 創建源文件 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編程規范及注意事項 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的數據類型 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 變量作用域 41
3.6.1 變量作用域的基本規則 41
3.6.2 自動變量 42
3.6.3 全局變量 43
3.6.4 靜態變量 44
3.6.5 寄存器變量 45
3.7 分隔符與const修飾符 45
3.7.1 C51分隔符 45
3.7.2 const修飾符 46
3.8 C51的運算符 47
3.8.1 算術運算符 47
3.8.2 邏輯運算符 49
3.8.3 關系運算符 50
3.8.4 位運算符 51
3.8.5 “,”運算符 53
3.8.6 “?”運算符 54
3.8.7 “sizeof”運算符 55
3.8.8 地址操作運算符 55
3.8.9 聯合操作運算符 56
3.8.10 類型轉換運算符 56
3.8.11 運算符優先級和結合性 57
3.9 C51的表達式 59
3.9.1 算術表達式 59
3.9.2 賦值表達式 59
3.9.3 逗號表達式 61
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 循環語句 67
4.1.5 條件語句 70
4.1.6 開關語句 75
4.1.7 程序跳轉語句 76
4.1.8 函數調用語句 78
4.1.9 函數返回語句 79
4.1.10 空語句 80
4.2 C51的流程控制結構及程序示例 81
4.2.1 順序結構 81
4.2.2 選擇結構 81
4.2.3 循環結構 81
4.2.4 流程控制結構程序示例 82
4.3 小結 83
4.4 上機實踐 83
第5章 C51的數據結構 85
5.1 C51的數組 85
5.1.1 數組定義及數組元素 85
5.1.2 一維數組 87
5.1.3 一維字符串數組 90
5.1.4 二維數組 92
5.1.5 二維字符串數組 95
5.1.6 多維數組 96
5.2 C51的指針 97
5.2.1 指針及相關概念 97
5.2.2 指針變量的定義及賦值 98
5.2.3 取址運算符和取值運算符 101
5.2.4 指針變量的運算 102
5.2.5 C51的字符指針 103
5.2.6 C51的數組指針 104
5.2.7 C51的指針數組 109
5.3 C51的結構 111
5.3.1 結構的聲明 111
5.3.2 結構變量的聲明 112
5.3.3 結構變量的初始化 114
5.3.4 結構變量的使用 115
5.3.5 C51的結構數組 116
5.3.6 C51的結構指針 117
5.3.7 C51的嵌套式結構 121
5.3.8 C51的位結構 122
5.4 C51的聯合 123
5.4.1 聯合的聲明和使用 123
5.4.2 結構和聯合的區別 128
5.5 C51的枚舉 129
5.5.1 枚舉和枚舉變量的聲明 129
5.5.2 枚舉變量的賦值和使用 131
5.6 C51的位域 133
5.6.1 位域和位域變量的聲明 133
5.6.2 位域變量的使用 135
5.7 C51的自定義類型 136
5.7.1 自定義類型的聲明 136
5.7.2 自定義類型的使用 136
5.8 小結 137
5.9 上機實踐 137
第6章 C51的函數 138
6.1 函數 138
6.1.1 函數的概述 138
6.1.2 函數的分類 139
6.1.3 函數的定義 140
6.1.4 函數的參數 142
6.1.5 函數的返回值 146
6.2 函數的作用域 147
6.2.1 函數的作用范圍 147
6.2.2 函數變量的作用域 147
6.3 函數的調用 149
6.3.1 賦值調用 149
6.3.2 引用調用 150
6.3.3 遞歸調用 150
6.3.4 嵌套調用 152
6.4 C51的main函數 153
6.4.1 無參main函數 153
6.4.2 有參main函數 154
6.5 C51的庫函數 154
6.5.1 I/O函數庫 154
6.5.2 標準函數庫 166
6.5.3 字符函數庫 174
6.5.4 字符串函數庫 186
6.5.5 內部函數庫 201
6.5.6 數學函數庫 204
6.5.7 絕對地址訪問函數庫 209
6.5.8 變量參數表函數庫 212
6.5.9 全程跳轉函數庫 214
6.5.10 偏移量函數庫 215
6.6 小結 216
6.7 上機實踐 216
第7章 C51的存儲結構 218
7.1 單片機的存儲器結構 218
7.1.1 51系列單片機的存儲區域 218
7.1.2 片內RAM的存儲器結構 218
7.2 C51的存儲類型 219
7.2.1 code存儲類型 220
7.2.2 data存儲類型 220
7.2.3 bdata存儲類型 220
7.2.4 idata存儲類型 221
7.2.5 pdata存儲類型 221
7.2.6 xdata存儲類型 222
7.3 C51的擴展數據類型 222
7.3.1 sfr和sfr16型變量 223
7.3.2 sbit型變量 223
7.3.3 bit型變量 224
7.3.4 51單片機寄存器的定義 224
7.4 C51變量的存儲模式 226
7.4.1 Small模式 227
7.4.2 Compact模式 227
7.4.3 Large模式 227
7.5 C51的存儲器指針 228
7.5.1 一般指針 228
7.5.2 存儲器指針 229
7.6 小結 231
7.7 上機實踐 231
第8章 C51的預處理命令和用戶配置文件 232
8.1 C51的預處理命令概述 232
8.2 文件包含指令 233
8.2.1 #include命令 233
8.2.2 C51常用的頭文件 234
8.3 宏定義指令 234
8.3.1 #define命令 235
8.3.2 #undef命令 237
8.4 條件編譯指令 238
8.4.1 #if、#else和#endif命令 238
8.4.2 #elif命令 239
8.4.3 #ifdef、#ifndef命令 239
8.5 其他編譯指令 241
8.5.1 #line命令 241
8.5.2 #error命令 241
8.5.3 #pragma命令 242
8.6 C51的用戶配置文件 243
8.6.1 C51的啟動代碼詳解 243
8.6.2 C51的變量初始化文件 248
8.6.3 C51的基本I/O函數文件 249
8.6.4 C51的分組配置文件 249
8.7 小結 250
8.8 上機實踐 250
第三篇 C51單片機編程指南
第9章 C51定時器/計數器程序設計 253
9.1 定時器/計數器簡介 253
9.1.1 定時器/計數器的結構 253
9.1.2 方式控制寄存器TMOD 254
9.1.3 中斷控制寄存器TCON 255
9.1.4 定時器/計數器的初值 257
9.1.5 定時器/計數器的初始化 257
9.2 定時器/計數器工作模式0的C51程序設計 257
9.2.1 定時器/計數器工作模式0 258
9.2.2 定時器/計數器模式0的程序設計 258
9.3 定時器/計數器工作模式1的C51程序設計 259
9.3.1 定時器/計數器工作模式1 259
9.3.2 定時器/計數器模式1的程序設計 260
9.4 定時器/計數器工作模式2的C51程序設計 261
9.4.1 定時器/計數器工作模式2 261
9.4.2 定時器/計數器模式2的程序設計 261
9.5 定時器/計數器工作模式3的C51程序設計 262
9.5.1 定時器/計數器工作模式3 262
9.5.2 定時器/計數器模式3的程序設計 263
9.6 小結 264
9.7 上機實踐 264
第10章 C51中斷程序設計 266
10.1 單片機的中斷系統 266
10.1.1 單片機的中斷類型 266
10.1.2 中斷請求標志及其C51訪問 267
10.1.3 中斷允許標志及其C51訪問 270
10.1.4 中斷優先級標志及其C51訪問 270
10.1.5 中斷的C51處理過程 271
10.2 外部中斷源的C51程序設計 274
10.3 定時中斷源的C51程序設計 275
10.4 串行中斷源的C51程序設計 276
10.5 小結 277
10.6 上機實踐 277
第11章 C51串行接口程序設計 279
11.1 51系列單片機的串行接口 279
11.1.1 單片機串行通信概述 279
11.1.2 單片機串行接口的內部結構 280
11.1.3 串行接口控制寄存器SCON 281
11.1.4 特殊功能寄存器PCON 284
11.2 串行口工作模式0的C51程序設計 284
11.2.1 模式0的波特率 285
11.2.2 模式0的數據發送及C51程序設計 285
11.2.3 模式0的數據接收及C51程序設計 287
11.3 串行口工作模式1的C51程序設計 289
11.3.1 模式1的波特率 290
11.3.2 模式1的數據發送及C51程序設計 291
11.3.3 模式1的數據接收及C51程序設計 293
11.4 串行口工作模式2的C51程序設計 295
11.4.1 模式2的波特率 295
11.4.2 模式2的數據發送及C51程序設計 295
11.4.3 模式2的數據接收及C51程序設計 297
11.5 串行口工作模式3的C51程序設計 299
11.5.1 模式3的波特率 300
11.5.2 模式3的數據發送及C51程序設計 301
11.5.3 模式3的數據接收及C51程序設計 303
11.6 小結 305
11.7 上機實踐 305
第12章 C51下的RTX-51實時多任務操作系統 307
12.1 RTX-51實時多任務操作系統簡介 307
12.1.1 單任務程序與多任務程序的比較 307
12.1.2 RTX-51實時多任務操作系統種類 309
12.2 RTX-51的系統函數 310
12.2.1 中斷調用的發送信號函數 310
12.2.2 清除信號標志函數 311
12.2.3 啟動任務函數 311
12.2.4 刪除任務函數 312
12.2.5 當前任務號函數 312
12.2.6 任務調用的發送信號函數 313
12.2.7 等待函數 313
12.3 RTX-51的任務調度 316
12.3.1 循環任務調度 316
12.3.2 事件任務調度 316
12.3.3 信號任務調度 317
12.3.4 優先級及搶先任務切換 318
12.3.5 RTX-51的主要概念和特性 319
12.4 RTX-51 Tiny的任務管理 320
12.4.1 RTX-51 Tiny的任務狀態 320
12.4.2 RTX-51 Tiny的事件 321
12.4.3 RTX-51 Tiny的任務切換 321
12.5 RTX-51 Tiny的系統配置 321
12.5.1 RTX-51 Tiny系統配置文件 321
12.5.2 RTX-51 Tiny系統參數 324
12.6 RTX-51 Tiny的要求及注意事項 325
12.6.1 RTX-51 Tiny的要求及技術參數 325
12.6.2 RTX-51 Tiny的注意事項 326
12.7 RTX-51 FULL實時多任務操作系統簡介 327
12.7.1 RTX-51 FULL函數一覽 327
12.7.2 RTX-51的技術參數 329
12.8 小結 329
12.9 上機實踐 329
第13章 Keil m Vision3的調試和仿真 330
13.1 Keil m Vision3的程序調試 330
13.1.1 Keil m Vision3的程序調試模式 330
13.1.2 斷點 332
13.1.3 性能分析器 333
13.1.4 代碼覆蓋分析器 335
13.1.5 調試命令 336
13.2 系統資源仿真 337
13.2.1 并行I/O端口仿真 338
13.2.2 寄存器仿真 339
13.2.3 中斷仿真 342
13.2.4 串行接口仿真 345
13.2.5 定時器/計數器仿真 350
13.2.6 看門狗定時器的仿真 356
13.2.7 低功耗仿真 357
13.3 小結 358
13.4 上機實踐 359
第四篇 C51程序設計典型案例
第14章 C51矩陣式鍵盤程序設計 361
14.1 鍵盤接口概述 361
14.1.1 獨立式按鍵和矩陣式鍵盤 361
14.1.2 鍵盤設計注意事項 362
14.2 矩陣式鍵盤C51程序設計 363
14.2.1 掃描法及C51程序設計 363
14.2.2 線反轉法及C51程序設計 365
14.2.3 中斷法及C51程序設計 367
14.3 C51矩陣式鍵盤設計實例 369
14.3.1 電路圖 369
14.3.2 程序設計 370
14.4 小結 373
14.5 上機實踐 373
第15章 C51液晶顯示模塊 374
15.1 液晶顯示模塊概述 374
15.1.1 液晶顯示模塊的分類 374
15.1.2 液晶顯示模塊的特點 375
15.2 液晶顯示控制驅動器 376
15.2.1 液晶顯示控制驅動器概述 376
15.2.2 液晶顯示控制驅動器功能說明 376
15.3 液晶顯示控制器指令集 380
15.3.1 基本指令集 380
15.3.2 擴充指令集 383
15.3.3 控制器指令操作方式 385
15.4 點陣圖形型液晶操作子函數 386
15.4.1 指令操作子函數 387
15.4.2 數據操作子函數 387
15.4.3 初始化子函數 388
15.4.4 清屏子函數 388
15.4.5 漢字顯示子函數 389
15.4.6 圖形顯示子函數 390
15.5 液晶漢字顯示實例 390
15.5.1 電路設計 391
15.5.2 程序設計 393
15.6 液晶圖形顯示實例 395
15.6.1 圖形數組的提取 395
15.6.2 圖形顯示程序設計 397
15.7 小結 399
15.8 上機實踐 399
第16章 C51模擬I2C總線 400
16.1 I2C總線概述 400
16.1.1 I2C總線工作原理 400
16.1.2 I2C總線器件的尋址方式 401
16.1.3 I2C總線數據操作 402
16.2 I2C總線接口EEPROM存儲器 403
16.3 C51模擬I2C總線協議 403
16.3.1 延時子函數 403
16.3.2 起始信號子函數 404
16.3.3 終止信號子函數 404
16.3.4 應答信號子函數 405
16.3.5 非應答信號子函數 405
16.3.6 應答位檢查子函數 406
16.3.7 單字節寫子函數 406
16.3.8 單字節讀子函數 407
16.3.9 多字節寫子函數 407
16.3.10 多字節讀子函數 409
16.4 C51讀寫EEPROM實例 410
16.4.1 電路設計 410
16.4.2 程序設計 411
16.4.3 仿真分析 413
16.5 小結 414
16.6 上機實踐 414
第17章 C51模擬單總線接口 415
17.1 單總線接口概述 415
17.2 單總線溫度傳感器及C51操作 416
17.2.1 溫度傳感器DS18S20概述 416
17.2.2 DS18S20的數據操作及指令 417
17.2.3 DS18S20的訪問流程 419
17.2.4 溫度轉換操作 420
17.2.5 C51模擬單總線操作子函數 421
17.3 C51單總線溫度傳感器實例 428
17.3.1 電路設計 428
17.3.2 程序設計 430
17.3.3 仿真分析 433
17.4 小結 433
17.5 上機實踐 434
第18章 實時時鐘芯片應用 435
18.1 實時時鐘芯片DS1302概述 435
18.1.1 實時時鐘芯片DS1302引腳 435
18.1.2 實時時鐘芯片DS1302的日期操作 436
18.1.3 實時時鐘芯片DS1302的控制操作 437
18.1.4 實時時鐘芯片DS1302的RAM操作 438
18.1.5 實時時鐘芯片DS1302數據傳輸方式 438
18.2 DS1302的控制子函數 440
18.2.1 復位子函數 440
18.2.2 字節讀取子函數 440
18.2.3 字節寫入子函數 441
18.2.4 年設置子函數 441
18.2.5 月設置子函數 442
18.2.6 日設置子函數 442
18.2.7 星期設置子函數 442
18.2.8 小時設置子函數 443
18.2.9 分鐘設置子函數 443
18.2.10 秒設置子函數 443
18.2.11 寫保護子函數 444
18.2.12 寫允許子函數 444
18.2.13 充電控制子函數 444
18.2.14 初始化子函數 444
18.2.15 RAM字節寫入子函數 445
18.2.16 時鐘顯示子函數 446
18.2.17 多字節突發方式讀取RAM子函數 446
18.2.18 多字節突發方式寫入RAM子函數 447
18.3 C51讀寫實時時鐘芯片實例 448
18.3.1 電路圖 448
18.3.2 程序設計 448
18.3.3 仿真分析 453
18.4 小結 454
18.5 上機實踐 454
第19章 C51通信接口程序設計 456
19.1 串行接口通信概述 456
19.1.1 串行接口通信標準 456
19.1.2 串行接口芯片 460
19.1.3 雙機及多機通信原理 462
19.2 C51雙機通信實例 462
19.2.1 電路原理圖 462
19.2.2 發送方程序設計 463
19.2.3 接收方程序設計 465
19.3 C51多機通信實例 466
19.3.1 主機程序設計 467
19.3.2 從機程序設計 471
19.4 小結 475
19.5 上機實踐 475
第20章 道路交通燈多任務控制系統 476
20.1 交通燈多任務控制系統概述 476
20.2 C51交通燈多任務控制系統 476
20.2.1 電路原理圖 477
20.2.2 建立RTX-51 Tiny項目 477
20.2.3 多任務劃分 478
20.2.4 多任務程序設計 479
20.2.5 串行通信及命令獲取子函數 487
20.2.6 仿真調試 492
20.3 小結 493
20.4 上機實踐 493
第21章 常見面試題及解答 495
21.1 C51編程類面試題 495
21.1.1 預處理 495
21.1.2 C51語言基礎 496
21.1.3 循環 498
21.1.4 位操作 499
21.1.5 實用子函數 500
21.2 與MCS-51硬件相關的面試題 502
21.2.1 MCS-51硬件基礎 502
21.2.2 硬件編程 504
書摘/試閱
第1章 單片機開發概述
單片機是目前應用最為廣泛的微處理器,具有價格低廉、功能強大、性能穩定等優點,深受廣大電子設計愛好者的喜愛。其中,51系列單片機是最早興起的、發展最為成熟的一類。目前,市場上的各類產品均能看到單片機的身影,小到報警器、玩具和智能充電器,大到冰箱、電視、空調、數據采集系統和控制終端等。本章首先簡略介紹一下單片機,然後重點介紹一下單片機開發流程以及開發語言。
1.1 單片機介紹
1946年,世界上第一臺電子數字計算機ENIAC由美國賓夕法尼亞大學研制成功。隨後,便引發了20世紀的電子工業革命。如今,計算機特別是單片微型計算機(簡稱單片機)得到了迅猛的發展。市場上的單片機種類繁多,覆蓋各種功能和價位為應用設計者提供了多種選擇。
1.1.1 單片機簡介
單片機是將中央處理器(CentralProcessingUnit,CPU)、只讀存儲器(ReadOnlyMemory,ROM)、隨機存取存儲器(RandomAccessMemory,RAM)、定時器/計數器以及I/O(Input/Output)接口等部件集成在一起的微芯片。單片機從產生至今,經過30多年的發展,從4位單片機發展到8位、16位乃至32位單片機,其性能越來越強,價格越來越低。其中,應用最為廣泛的便是51系列單片機。51系列單片機是指由Intel公司發展起來的MCS-51系列以及和其具有兼容內核的單片機。MCS-51系列單片機是最早、最基本的單片機,功能也最簡單,包括8031、8051、8032及8052等。隨後,各大芯片公司均推出了51內核的單片機,和MCS-51系列單片機完全兼容,同時提高了性能并增加了更多功能。如Atmel公司的AT89C系列、AT89S系列和AT89LP系列,Philips公司的8XC552系列,SiliconLaboratories公司的C8051F系列等。