标题：51单片机C语言应用程序设计实例精讲(第2版)
图书信息
作　者：戴佳 戴卫恒 刘博文 编著 
出 版 社： 电子工业出版社
出版时间： 2008-12-1
字　数： 840000 
页　数： 492页
开　本： 16开
I S B N ： 9787121072642 
分类： 图书 >> 计算机/电子工程 >> 编程/C语言
内 容 简 介
本书通过大量的典型实例，详细介绍了51单片机各种C语言应用专题程序设计的流程、方法、技巧及设计思想。全书共分31章，第1章～第3章为基础知识，介绍了51单片机开发的硬件结构、指令系统、C语言设计以及Keil 8051 C编译器知识；第4章～第31章为本书的重点，通过28个典型的C语言应用实例，详细介绍了51单片机的各种应用开发和使用技术，包括输入/输出、数据采集、控制系统、存储系统与外设扩展、信号与算法实现、网络通信与传输、电源监控与抗干扰设计。全书实例丰富、代表性强，涉及领域广，每个例子都调试通过，都有具体的设计思路、硬件电路、软件设计以及程序代码分析，同时附录里专门提供了本书实例配套实验箱内容，对于读者学习51单片机的应用开发提供了良好的参考和指导价值。
本书语言简洁，层次清晰，书中的所有程序代码都使用C语言实现，简单易学、易懂。本书适合计算机、自动化、电子及硬件等相关专业的学生进行学习，同时也可供从事51单片机开发的科研设计人员参考使用。
本书配有一张光盘，光盘里包括了书中所有的程序代码和电路图，读者稍加修改即可用于自己的设计，物超所值。
丛书说明
工程技术的电子化、集成化和系统化促进了电子工程技术的发展，同时也促进了电子工程技术在社会各行业中的广泛应用，从近年的人才招聘市场来看，电子工程师的人才需求更是一路走高。
电子工程师如此紧俏，除需求不断走高，人才供不应求外，另一重要原因则是电子工程师的门槛相对而言比较高，这个高门槛则来自于工程师的“经验”和“实践”！
因此，为了满足读者学习和工作需要，解决各种工作中的专业问题，我们紧紧围绕“经验”和“实践”，精心策划组织了此套丛书。
1．丛书范围
现代电子科学技术的一个特点是多学科交叉，因此，工程师应当了解、掌握2门以上的相关学科，知识既精深又广博是优秀的工程师成长为某领域专家的重要标志。本丛书内容涉及软件开发、研发电子以及嵌入式项目开发等，包括单片机、USB接口、ARM、CPLD/FPGA、DSP、移动通信系统等。
2．读者对象
本套书面向各领域的初、中级用户。具体为高校计算机、电子信息、通信工程、自动化控制专业在校大学生，以及从事电子开发和应用行业的科研人员。
3．内容组织形式
本套书紧紧围绕“经验”和“实践”，首先介绍一些相关的基础知识，然后根据不同的模块或应用领域，分篇安排应用程序实例的精讲。基础知识用来为一些初级读者打下一定的知识功底；基础好一点的读者则可以跳过这一部分，直接进入实例的学习。
4．实例特色
在应用实例的安排上，着重突出“应用”和“实用”两个基本原则，安排具有代表性、技术领先性，以及应用广泛的典型实例，让读者学习借鉴。这些实例是从作者多年程序开发项目中挑选出的，也是经验的归纳与总结。
在应用实例的讲解上，既介绍了设计原理、基本步骤和流程，也穿插了一些经验、技巧与注意事项。特别在程序设计思路上，在决定项目开发的质量和成功与否的细节上，尽可能地用简洁的语言来清晰阐述大众易于理解的概念和思想；同时，程序代码部分做了很详细的中文注释，有利于读者举一反三，快速应用和提高。
5．光盘内容
本套书的光盘中包含了丰富的实例原图文件和程序源代码，读者稍加修改便可应用于自己的工作中或者完成自己的课题（毕业设计），物超所值。读者使用之前，最好先将光盘内容全部复制到电脑硬盘中，以便于以后可以直接调用，而不需要反复使用光盘，提高操作速度和学习效率。
6．学习指南
对于有一定基础的读者，建议直接从实例部分入手，边看边上机练习，这样印象会比较深，效果更好。基础差一点的读者请先详细学习书中基础部分的理论知识，然后再进行应用实例的学习。在学习中，尽量做到反复理解和演练，以达到融会贯通、举一反三的功效；特别希望尽量和自己的工作设计联系起来，以达到“即学即会，学以致用”的最大化境界。
本套书主要偏重于实用性，具有很强的工程实践指导性。期望读者在学习中顺利、如意！
前 言
1976年，Intel公司推出第一款8位单片机MCS-48，宣告了单片机时代的到来。在短短几十年里，单片机技术获得了长足的发展，在越来越广泛的领域内大显身手。
随着科学技术的日新月异，单片机也从一开始的8位单片机发展到16位、32位等诸多系列，其中51系列单片机由于其灵活方便、价格便宜的优点，在众多制造厂商的支持下发展成为具有上百个品种的大家族，至今为止，其他任何一个单片机系列均未发展到如此的规模。
单片机系统的开发是硬件、软件相结合的过程。要完成单片机系统的开发，不仅需要掌握编程技术，还需要针对实际应用选择合理的单片机芯片和外围器件，并以此为基础，设计硬件电路。事实证明，通过具体的实例来学习单片机系统的开发是一条科学的途径，本书作者根据多年积累的单片机开发经验编写此书，旨在通过介绍各种典型的单片机系统的开发实例来为读者提供开发单片机系统的一条“捷径”。
本书内容
本书以第1版为基础，另外增加了C语言程序设计基础、存储系统与外设扩展、CAN总线通信、软件滤波设计等实例内容，使其在内容上更加完美、全面。与此同时，剔除了第1版中一些理论上正确、但实际因为市场芯片停产而无法实现的例子（包括：单片机实现GPS定位、实现接触式IC卡读写、实现非接触式IC卡读写、基于双口RAM的单片机间通信、实现短距离无线传输），补充一些新的例子内容，这样读者选择本书，将可以通过实验箱全部调试成功，完全达到学以致用的目的。
本书共分为31章，主要内容安排如下：
篇 名 内容介绍 页 码
第一篇
基础知识篇 包括第1～3章，介绍了51单片机的硬件结构和指令系统、C语言设计，以及Keil 8051 C 编译器知识 1
第4～33章全部为C语言应用程序设计实例，其中又根据不同的应用领域分为7篇 第二篇
输入/输出系统设计 包括第4～7章，由4个实例构成，涵盖了51单片机系统主要输入/输出方法的实现 87
第三篇
数据采集系统设计 包括第8～13章，由6个实例构成，介绍了51单片机在数据采集领域的应用，包括A/D与D/A转换、基于SHT71数字温/湿度传感器的采集实现，以及 基于DS1624的数字温度计 129
第四篇
控制系统设计 包括第14～16章，由3个实例构成，介绍了51单片机在控制领域的应用，包括步进电机控制、智能充电器、日历时钟 195
第五篇
存储系统与外设扩展 包括第17～19章，由3个实例构成，包括基于NOR Flash的数据存储实例、基于XC95144的串口扩展，以及基于8255扩展并行口 233
第六篇
信号与算法实现 包括第20～23章，，由4个实例构成，介绍了51单片机在信号与算法领域的应用，包括智能信号发生器、步进式PWM信号、CRC算法，以及软件滤波的实现 291
第七篇
通信传输系统设计 包括第24～29章，由6个实例构成，介绍了51单片机在通信传输领域的应用，包括232串口传输、以太网接口、I2C总线传输、485总线传输，以及CAN总线接口通信设计 327
第八篇
电源监控与抗干扰设计 包括第30,31章，由2个实例构成，包括单片机监控电路设计、 光电隔离输出接口电路设计实例 415
本书特点
本书作者长期从事51单片机方面的系统设计工作，曾经开发过许多51单片机应用设计的项目。具有丰富的实践经验，从而保证了本书良好的实用性和指导性。归纳本书，主要具有以下一些特点：
（1）在第1版基础上，增加了C语言程序设计基础、存储系统与外设扩展、CAN总线通信、软件滤波设计等实例内容，在内容上更加完美、全面。
（2）本书提供了28个典型设计实例，例子种类丰富，覆盖领域广，代表性强，可成为大多数51单片机开发人员的参考手册。
（3）本书不但详细介绍了实例的硬件接口设计，也对实例的程序代码做了重点分析，提供了深入的程序设计思想，利于读者举一反三。
（4）本书盘书结合，光盘中附有丰富的实例硬件图源文件和程序源代码，读者稍加修改，便可应用于自己的工作中去，物超所值。
（5）广东无忧电子开发网专门为本书提供了C51实验箱的实验验证，这一实验箱很适合教学使用，也是很好的通用开发板，可供从事51单片机开发的广大科研人员使用；实验箱可以使用ATMEL微控制器，也可使用其他厂商的C51系列单片机。读者在使用实验箱中如果有疑问、困难、意见与建议，可以发邮件进行交流咨询。同时有关本实验箱的C51程序设计的完善和更新，读者可以通过登录无忧电子开发网进行了解。
本书由戴佳、戴卫恒、刘博文编写。另外，秦龙、苗龙、田莉、钱林杰、张晓平、王渝梅、金成江、李志江、肖毅、刘轶、刘云志、廖日坤、金镇、李宁宇、黄小慧、廖济林、庞丽梅、邱远彬、黄乘传、黄小欢等在资料收集、整理和技术支持方面做了大量的工作，在此一并向他们表示感谢！
由于时间仓促，再加之作者的水平有限，书中难免存在一些不足之处，欢迎广大读者批评和指正。
目 录
第一篇 基础知识篇
第1章 51单片机开发的基础知识 2
1.1 51单片机的硬件结构 2
1.1.1 功能模块 2
1.1.2 CPU 2
1.1.3 并行I/O端口 4
1.1.4 存储器结构 6
1.1.5 定时/计数器 10
1.1.6 串行口 14
1.1.7 中断系统 20
1.2 51单片机的指令系统 22
1.2.1 寻址方式 22
1.2.2 指令说明 26
1.2.3 指令系统表 29
1.3 本章总结 32
第2章 C语言程序各语句
第2章 用法与意义 33
2.1 数据结构 33
2.1.1 数据类型 34
2.1.2 变量与常量 36
2.1.3 数组 40
2.1.4 指针 44
2.1.5 结构 47
2.1.6 共用体 51
2.1.7 枚举 52
2.2 运算符与表达式 53
2.2.1 运算符分类与优先级 53
2.2.2 算术运算符与表达式 54
2.2.3 关系运算符与表达式 55
2.2.4 逻辑运算符与表达式 55
2.2.5 位操作运算符与表达式 55
2.2.6 赋值运算符与表达式 56
2.3 程序结构与函数 57
2.3.1 程序结构 57
2.3.2 函数 58
2.4 流程控制语句 64
2.4.1 选择语句 65
2.4.2 循环语句 68
2.4.3 转移语句 70
2.5 本章总结 72
第3章 Keil 8051 C编译器 73
3.1 Keil编译器简介 73
3.2 使用Keil开发应用软件 74
3.2.1 建立工程 75
3.2.2 工程的设置 77
3.2.3 编译与连接 79
3.3 dScope for Windows的使用 80
3.3.1 如何启动 80
3.3.2 如何调试 81
3.3.3 调试窗口 83
3.4 本章总结 85
第二篇 输入/输出系统设计
第 4章 单片机实现液晶显示 88
4.1 实例说明 88
4.2 设计思路分析 88
4.2.1 液晶显示模块 88
4.2.2 液晶显示工作原理 89
4.2.3 设计思路 91
4.3 硬件电路设计 91
4.3.1 器件选取 91
4.3.2 电源模块 92
4.3.3 液晶显示模块 93
4.3.4 单片机模块 95
4.4 软件设计 96
4.4.1 液晶控制驱动器指令集 96
4.4.2 程序说明 97
4.5 实例总结 100
第5章 基于MAX7219的8位
第5章 数码管显示 101
5.1 实例说明 101
5.2 设计思路分析 101
5.2.1 LED显示驱动芯片的选取 101
5.2.2 MAX7219的工作原理 102
5.3 硬件电路设计 103
5.3.1 主要器件 103
5.3.2 电路原理图 104
5.4 软件设计 106
5.4.1 MAX7219的工作时序
5.4.1 和寄存器描述 106
5.4.2 程序说明 108
5.5 实例总结 111
第6章 键盘输入实例——实现
第6章 44键盘 112
6.1 实例说明 112
6.2 设计思路分析 112
6.3 硬件电路设计 113
6.4 软件设计 114
6.5 实例总结 118
第7章 单片机实现语音录放 119
7.1 实例说明 119
7.2 设计思路分析 120
7.2.1 语音芯片选取 120
7.2.2 语音芯片ISD2560简介 120
7.3 硬件电路设计 121
7.3.1 主要器件 121
7.3.2 电路原理图及说明 124
7.4 软件设计 125
7.4.1 程序流程 125
7.4.2 程序说明 126
7.5 实例总结 128
第三篇 数据采集系统设计
第8章 基于MAX197的
第8章 并行A/D转换 130
8.1 实例说明 130
8.2 设计思路分析 130
8.2.1 A/D转换原理 131
8.2.2 如何选择A/D转换器件 131
8.2.3 A/D转换器对电源
8.2.3 电路的要求 132
8.3 硬件电路设计 133
8.3.1 主要器件 133
8.3.2 电路原理图及说明 136
8.4 软件设计 138
8.4.1 MAX197控制字 138
8.4.2 程序流程 139
8.4.3 程序说明 140
8.5 实例总结 141
第9章 基于TLC549的
第9章 串行A/D转换 142
9.1 实例说明 142
9.2 设计思路分析 142
9.2.1 芯片选取 143
9.2.2 工作原理 143
9.3 硬件电路设计 145
9.3.1 主要器件 145
9.3.2 电路原理图及说明 145
9.4 软件设计 146
9.4.1 转换过程和时序要求 147
9.4.2 程序流程 147
9.4.3 程序说明 148
9.5 实例总结 149
第10章 基于MAX527的
第10章 并行D/A转换 150
10.1 实例说明 150
10.2 设计思路分析 150
10.2.1 D/A转换原理 151
10.2.2 如何选择D/A转换器件 151
10.2.3 D/A转换器对电源
10.2.3 电路的要求 152
10.3 硬件电路设计 152
10.3.1 主要器件 152
10.3.2 电路原理图及说明 154
10.4 软件设计 156
10.4.1 MAX527的地址和
10.4.1 重要引脚 156
10.4.2 程序流程 157
10.4.3 程序说明 158
10.5 实例总结 159
第11章 基于MAX517的
第11章 串行D/A转换 160
11.1 实例说明 160
11.2 设计思路分析 160
11.2.1 芯片选取 161
11.2.2 工作原理 161
11.3 硬件电路设计 162
11.3.1 主要器件 162
11.3.2 电路原理图及说明 163
11.4 软件设计 164
11.4.1 时序要求和转换过程 164
11.4.2 程序说明 165
11.5 实例总结 167
第12章 基于SHT71数字温/湿度
第12章 传感器的采集实现 168
12.1 实例说明 168
12.2 设计思路分析 168
12.2.1 SHT71性能概述 168
12.2.2 SHT71的功能说明 169
12.2.3 SHT71的引脚尺寸和说明 170
12.3 硬件电路设计 171
12.4 软件设计 172
12.4.1 SHT71的操作方法 172
12.4.2 程序流程 173
12.4.3 源程序清单 174
12.5 实例总结 181
第13章 基于DS1624的数字
第13章 温度计设计 182
13.1 实例说明 182
13.2 设计思路分析 182
13.2.1 DS1624简介 183
13.2.2 DS1624基本特性 183
13.2.3 DS1624工作原理 183
13.2.4 DS1624工作方式 186
13.2.5 DS1624的指令集 186
13.3 硬件电路设计 187
13.3.1 硬件设计 187
13.3.2 原理图及其说明 187
13.4 软件设计 188
13.4.1 程序流程 188
13.4.2 程序说明 189
13.5 实例总结 194
第四篇 控制系统设计
第14章 基于DS12C887的实时
第14章 日历时钟显示系统设计 196
14.1 实例说明 196
14.2 设计思路分析 197
14.2.1 选择合适的日历时钟芯片 197
14.2.2 如何由DS12C887芯片
14.2.2 获取时间信息 197
14.3 硬件电路设计 198
14.3.1 结构框图 198
14.3.2 主要器件 198
14.3.3 电路原理图及说明 200
14.4 软件设计 202
14.4.1 DS12C877的内存空间 202
14.4.2 程序流程 204
14.4.3 程序代码及说明 205
14.5 实例总结 207
第15章 单片机控制的
第15章 步进电机系统 208
15.1 实例说明 208
15.2 设计思路分析 208
15.2.1 步进电机的工作原理 209
15.2.2 步进电机的控制 211
15.2.3 脉冲分配与驱动
15.2.3 芯片的选取 212
15.3 硬件电路设计 213
15.3.1 结构框图 213
15.3.2 主要器件 214
15.3.3 电路原理图及说明 215
15.4 软件设计 217
15.4.1 程序流程 217
15.4.2 程序说明 218
15.5 实例总结 220
第16章 基于MAX1898的智能
第16章 充电器设计 222
16.1 实例说明 222
16.2 设计思路分析 223
16.2.1 为何需要实现充电器的
16.2.1 智能化 223
16.2.2 如何选择电池充电芯片 223
16.2.3 MAX1898的充电
16.2.1 工作原理 224
16.3 硬件电路设计 226
16.3.1 主要器件 226
16.3.2 电路原理图及说明 227
16.4 软件设计 230
16.4.1 程序流程 230
16.4.2 程序说明 231
16.5 实例总结 232
第五篇 存储系统与外设扩展
第17章 基于NOR Flash AM29LV320
第17章 的数据存储 234
17.1 实例说明 234
17.2 设计思路分析 235
17.2.1 芯片AM29LV320 235
17.2.2 具体设计思路 237
17.3 硬件电路设计 237
17.4 软件设计 239
17.4.1 AM29LV320的命令
17.4.1 与状态 240
17.4.2 串行异步数据传输 256
17.4.3 程序代码说明 256
17.5 实例总结 265
第18章 基于XC95144的串口扩展 266
18.1 实例说明 266
18.2 设计思路分析 267
18.2.1 串口发送的设计 267
18.2.2 串口接收的设计 269
18.2.3 串口模块的设计 271
18.3 硬件电路设计 273
18.4 软件设计 275
18.4.1 CPLD的设计原理图 275
18.4.2 C51单片机程序代码说明 277
18.5 实例总结 279
第19章 基于8255扩展并行口 280
19.1 实例说明 280
19.2 设计思路分析 280
19.2.1 并行口扩展的原理 280
19.2.2 芯片选择 281
19.3 硬件电路设计 284
19.4 软件设计 286
19.5 实例总结 289
第六篇 信号与算法实现
第20章 单片机实现智能
第20章 信号发生器 292
20.1 实例说明 292
20.2 设计思路分析 293
20.2.1 信号发生芯片MAX038 293
20.2.2 如何在单片机系统中
20.2.2 使用MAX038 294
20.3 硬件电路设计 295
20.3.1 主要器件 295
20.3.2 电路原理图及说明 296
20.4 软件设计 298
20.4.1 程序流程 298
20.4.2 程序说明 299
20.5 实例总结 301
第21章 单片机实现步进式
第21章 PWM信号输出 302
21.1 实例说明 302
21.2 设计思路分析 302
21.2.1 PWM控制 303
21.2.2 选择合适的外部计数芯片 303
21.3 硬件电路设计 304
21.3.1 主要器件 304
21.3.2 电路原理图及说明 305
21.4 软件设计 306
21.4.1 8254的内部控制字
21.4.1 和计数寄存器 306
21.4.2 程序说明 308
21.5 实例总结 309
第22章 单片机实现CRC算法 310
22.1 实例说明 310
22.2 CRC原理 311
22.3 算法设计与程序实现 312
22.3.1 按位计算CRC 312
22.3.2 按字节计算CRC 313
22.3.3 按半字节计算CRC 316
22.3.4 主程序及测试结果 317
22.4 实例总结 318
第23章 单片机实现软件滤波 319
23.1 实例说明 319
23.2 设计思路分析 319
23.3 软件设计 322
23.4 实例总结 326
第七篇 通信传输系统设计
第24章 单片机实现点对点的
第24章 数据传输 328
24.1 实例说明 328
24.2 设计思路分析 328
24.2.1 串行通信基本原理 329
24.2.2 接口电平转换 330
24.3 硬件电路设计 331
24.3.1 结构框图 331
24.3.2 主要器件 331
24.3.2 电路原理图及说明 332
24.4 软件设计 333
24.4.1 协议设计 334
24.4.2 主机程序流程及代码 335
24.4.3 从机程序流程及代码 338
24.5 实例总结 340
第25章 单片机实现点对多点的
第25章 数据传输 341
25.1 实例说明 341
25.2 设计思路分析 342
25.2.1 如何实现从机识别 342
25.2.2 51单片机串口的
25.2.2 多机通信功能 342
25.3 硬件电路设计 343
25.4 软件设计 344
25.4.1 协议设计 344
25.4.2 主机程序流程及代码 344
25.4.3 从机程序流程及代码 348
25.5 实例总结 351
第26章 单片机实现以太网接口 352
26.1 实例说明 352
26.2 设计思路分析 353
26.2.1 以太网协议 353
26.2.2 选择合适的以太网
26.2.2 控制芯片 354
26.3 硬件电路设计 355
26.3.1 主要器件 355
26.3.2 电路原理图及说明 358
26.4 软件设计 360
26.4.1 地址空间与寄存器 360
26.4.2 程序说明 362
26.5 实例总结 365
第27章 单片机实现I2C总线通信 366
27.1 实例说明 366
27.2 设计思路分析 367
27.2.1 I2C总线的工作原理 367
27.2.2 I2C总线的通信时序 367
27.3 硬件电路设计 369
27.4 软件设计 369
27.4.1 程序流程 370
27.4.2 程序说明 370
27.5 实例总结 374
第28章 单片机实现RS-485
第28章 总线现场监测系统 375
28.1 实例说明 375
28.2 设计思路分析 376
28.2.1 RS-485总线 376
28.2.2 RS-485总线驱动芯片选取 379
28.2.3 MAX481构成的RS-485
28.2.3 总线网络 381
28.3 硬件电路设计 381
28.3.1 RS-232/485总线转接卡 381
28.3.2 带有RS-485总线接口的
28.3.2 单片机系统 382
28.4 软件设计 383
28.4.1 通信协议设计 384
28.4.2 程序流程 385
28.4.3 程序说明 386
28.5 实例总结 390
第29章 CAN总线接口通信设计 391
29.1 实例说明 391
29.2 设计原理与思路 391
29.2.1 CAN总线及CAN
29.2.1 总线协议简介 391
29.3 芯片选型 395
29.4 硬件电路设计 397
29.4.1 结构框图 397
29.4.2 主要器件说明 398
29.5 电路原理图及其说明 401
29.6 软件设计 403
29.6.1 程序总体思路说明 403
29.6.2 程序流程图 403
29.6.3 主要源程序清单和注释 406
29.7 实例总结 413
第八篇 电源监控与抗干扰设计
第30章 单片机监控电路设计 416
30.1 实例说明 416
30.2 设计思路分析 417
30.2.1 一种简单的单片机上
30.2.1 电复位电路 417
30.2.2 单片机监控芯片的选取 418
30.3 硬件电路设计 419
30.3.1 原理图设计 420
30.3.2 监控芯片的外围电路设计 420
30.4 软件设计 421
30.5 实例总结 422
第31章 光电隔离电路设计 423
31.1 实例说明 423
31.2 设计思路分析 424
31.2.1 光耦器件的工作原理 424
31.2.2 光耦器件的典型应用 425
31.2.3 如何选择光耦器件 427
31.3 硬件电路设计 428
31.3.1 主要器件 428
31.3.2 电路原理图及说明 428
31.4 实例总结 431
附录A 汇编语言与C语言的
附录A 混合编程 432
附录B 实例配套实验箱 451
[1]