第1章 绪论 1
1.1 计算机结构组成 1
1.2 单片机的来源 4
1.3 单片机的定义 5
1.4 单片机的发展历史 5
1.4.1 单片机的历史形态 5
1.4.2 单片机的发展历史 6
1.5 单片机的应用 7
1.6 单片机的发展趋势 8
1.7 单片机的系统的组成 9
1.8 单片机的开发流程 10
1.8.1 硬件平台的开发 10
1.8.2 软件程序的设计 11
1.8.3 硬件和软件的组合 12
1.8.4 开发的流程总结 12
1.9 项目实战:单片机的系统开发初体验——闪烁灯 13
1.9.1 建立文件夹 13
1.9.2 绘制原理图 13
1.9.3 创建一个项目 22
1.9.4 下载程序开运行结果 31
本章小结 34
第2章 深刻剖析单片机的内部结构 35
2.1 51系列单片机简介 35
2.1.1 MCS-51系列单片机 35
2.1.2 51系列单片机 36
2.1.3 STC12C5A60S2系列单片机简介 36
2.1.4 其他单片机系列简介 38
2.2 单片机的外部特征 39
2.2.1 元件封装概述 39
2.2.2 MCS-51封装形式 40
2.2.3 单片机引脚分布及其功能 42
2.3 51单片机内部结构和原理 43
2.3.1 CPU 44
2.3.2 脉冲产生和变换单元 46
2.3.3 存储器 47
2.3.4 单片机并行I/O端口的结构及工作原理 54
2.4 单片机的工作状态 58
2.4.1 程序执行方式(单片机的基本工作方式) 58
2.4.2 复位方式 58
2.5 单片机最小系统 59
2.6 项目实战:流水灯 59
2.6.1 项目内容 59
2.6.2 项目说明 59
2.6.3 硬件原理图 60
2.6.4 软件开发思路 61
2.6.5 程序的源代码 61
2.6.6 程序执行的效果 62
2.6.7 拓展 63
本章小结 63
第3章 单片机C语言程序设计基础 65
3.1 单片机编程语言简介 65
3.1.1 单片机编程语言的发展 65
3.1.2 单片机C语言的优势 66
3.2 单片机程序结构组成 68
3.2.1 单片机整个工程的示意图 68
3.2.2 单片机软件工程的构成 68
3.2.3 程序文件的结构框架 68
3.3 单片机C语言深度剖析 70
3.3.1 C51程序设计基础知识 70
3.3.2 C51预处理 92
3.3.3 C51函数 95
3.4 项目实战:流水灯再续前缘——数组法 101
3.4.1 项目内容 101
3.4.2 项目说明 101
3.4.3 硬件原理图 101
3.4.4 软件开发思路 101
3.4.5 程序的源代码 102
3.4.6 程序执行的效果 103
3.4.7 总结 104
3.5 项目实战:流水灯再续前缘——普通移位法 104
3.5.1 项目内容 104
3.5.2 项目说明 104
3.5.3 硬件原理图 104
3.5.4 软件开发思路 104
3.5.5 程序的源代码 105
3.5.6 程序执行的效果 106
3.5.7 总结 107
3.6 项目实战:流水灯再续前缘——循环移位法 107
3.6.1 项目内容 107
3.6.2 项目说明 107
3.6.3 硬件原理图 107
3.6.4 软件开发思路 107
3.6.5 程序的源代码 108
3.6.6 程序执行的效果 109
3.6.7 总结 110
3.7 项目实战:流水灯再续前缘——变换移位法 110
3.7.1 项目内容 110
3.7.2 项目说明 110
3.7.3 硬件原理图 110
3.7.4 软件开发思路 111
3.7.5 程序的源代码 111
3.7.6 程序执行的效果 112
3.7.7 总结 113
3.8 项目实战:流水灯再续前缘——终结移位法 113
3.8.1 项目内容 113
3.8.2 项目说明 113
3.8.3 硬件原理图 113
3.8.4 软件开发思路 113
3.8.5 程序的源代码 114
3.8.6 程序执行的效果 115
3.8.7 总结 116
3.9 项目实战:流水灯再续前缘——库函数法 116
3.9.1 项目内容 116
3.9.2 项目说明 116
3.9.3 硬件原理图 116
3.9.4 软件开发思路 116
3.9.5 程序的源代码 117
3.9.6 程序执行的效果 118
3.9.7 总结 119
3.10 项目实战:流水灯再续前缘——自制库函数法 120
3.10.1 项目内容 120
3.10.2 项目说明 120
3.10.3 硬件原理图 120
3.10.4 软件开发思路 120
3.10.5 程序的源代码 121
3.10.6 程序执行的效果 122
3.10.7 总结 123
本章小结 123
第4章 单片机输入输出系统的设计及应用 125
4.1 单片机系统的构成 125
4.2 单片机输出系统 126
4.2.1 单片机输出系统简介 126
4.2.2 单片机输出系统编程原理 127
4.2.3 单片机IO口的驱动能力 127
4.3 数码管的工作原理及其应用 128
4.3.1 概述 128
4.3.2 数码管显示器件简介 130
4.4 项目实战:数码管的静态显示数字0~9 133
4.4.1 项目内容 133
4.4.2 项目说明 133
4.4.3 硬件原理图 133
4.4.4 软件开发思路 133
4.4.5 程序的源代码 134
4.4.6 程序执行的效果 135
4.4.7 总结 136
4.5 项目实战:数码管0~99(静态法) 137
4.5.1 项目内容 137
4.5.2 项目说明 137
4.5.3 硬件原理图 137
4.5.4 软件开发思路 137
4.5.5 程序的源代码 138
4.5.6 程序执行的效果 139
4.5.7 总结 141
4.6 项目实战:数码管0~999(静态法) 141
4.6.1 项目内容 141
4.6.2 项目说明 141
4.6.3 硬件原理图 141
4.6.4 软件开发思路 141
4.6.5 程序的源代码 142
4.6.6 程序执行的效果 144
4.6.7 总结 145
4.7 项目实战:数码管0~9999(静态法) 145
4.7.1 项目内容 145
4.7.2 项目说明 145
4.7.3 硬件原理图 145
4.7.4 软件开发思路 145
4.7.5 程序的源代码 146
4.7.6 程序执行的效果 148
4.7.7 总结 150
4.8 项目实战:数码管1234(动态法) 150
4.8.1 项目内容 150
4.8.2 项目说明 150
4.8.3 硬件原理图 150
4.8.4 软件开发思路 150
4.8.5 程序的源代码 151
4.8.6 程序执行的效果 152
4.8.7 总结 152
4.9 项目实战:数码管59s倒计时(动态法) 152
4.9.1 项目内容 152
4.9.2 项目说明 152
4.9.3 硬件原理图 153
4.9.4 软件开发思路 154
4.9.5 程序的源代码 154
4.9.6 程序执行的效果 156
4.9.7 总结 156
4.10 项目实战:数码管5min倒计时(动态法) 157
4.10.1 项目内容 157
4.10.2 项目说明 157
4.10.3 硬件原理图 157
4.10.4 软件开发思路 157
4.10.5 程序的源代码 158
4.10.6 程序执行的效果 160
4.10.7 总结 160
4.11 项目实战:简易数字钟(动态法) 160
4.11.1 项目内容 160
4.11.2 项目说明 160
4.11.3 硬件原理图 161
4.11.4 软件开发思路 161
4.11.5 程序的源代码 162
4.11.6 程序执行的效果 166
4.11.7 总结 166
4.12 液晶显示器LCD1602 167
4.12.1 液晶显示简介 167
4.12.2 1602字符型LCD简介 168
4.12.3 LCD1602的指令说明及时序 170
4.12.4 LCD1602的RAM地址映射及标准字库表 172
4.12.5 LCD1602的一般初始化(复位)过程 173
4.13 项目实战:LCD1602显示字符串 173
4.13.1 项目内容 173
4.13.2 项目说明 173
4.13.3 硬件原理图 173
4.13.4 软件开发思路 174
4.13.5 程序的源代码 174
4.13.6 程序执行的效果 176
4.13.7 总结 177
4.14 项目实战:LCD1602(59~0) 177
4.14.1 项目内容 177
4.14.2 项目说明 177
4.14.3 硬件原理图 177
4.14.4 软件开发思路 177
4.14.5 程序的源代码 178
4.14.6 程序执行的效果 181
4.14.7 总结 182
4.15 单片机输入系统 182
4.15.1 单片机键盘简介 182
4.15.2 键盘的分类 182
4.15.3 单片机与键盘的连接 183
4.15.4 键盘的识别 184
4.16 项目实战:独立按键——按下 185
4.16.1 项目内容 185
4.16.2 项目说明 185
4.16.3 硬件原理图 185
4.16.4 软件开发思路 185
4.16.5 程序的源代码 186
4.16.6 程序执行的效果 188
4.16.7 总结 190
4.17 项目实战:独立按键——抬起 190
4.17.1 项目内容 190
4.17.2 项目说明 190
4.17.3 硬件原理图 190
4.17.4 软件开发思路 190
4.17.5 程序的源代码 191
4.17.6 程序执行的效果 194
4.17.7 总结 194
4.18 项目实战:矩阵按键(扫描法) 194
4.18.1 项目内容 194
4.18.2 项目说明 195
4.18.3 硬件原理图 196
4.18.4 软件开发思路 196
4.18.5 程序的源代码 196
4.18.6 程序执行的效果 200
4.18.7 总结 200
4.19 项目实战:矩阵按键(反转法) 201
4.19.1 项目内容 201
4.19.2 项目说明 201
4.19.3 硬件原理图 201
4.19.4 软件开发思路 201
4.19.5 程序的源代码 202
4.19.6 程序执行的效果 205
4.19.7 总结 206
本章小结 206
第5章 单片机的中断机制及应用 207
5.1 现实生活中的中断现象及其特点 207
5.2 中断机制的剖析 208
5.3 单片机世界中断机制 208
5.4 中断系统结构及其工作原理 209
5.4.1 中断系统结构 209
5.4.2 中断请求标志寄存器 210
5.4.3 中断允许与中断优先级的控制 211
5.4.4 响应中断请求的条件 213
5.4.5 外部中断的响应时间 214
5.4.6 外部中断的触发方式选择 215
5.4.7 中断请求的撤销 215
5.5 中断系统的管理与控制接口 216
5.5.1 中断入口管理 216
5.5.2 中断申请线路管理 216
5.5.3 中断处理者全部内容 217
5.6 中断程序设计思路 217
5.6.1 中断程序设计的目标 217
5.6.2 中断程序设计的步骤 217
5.7 项目实战:外部中断——闪烁灯 218
5.7.1 项目内容 218
5.7.2 项目说明 219
5.7.3 硬件原理图 219
5.7.4 软件开发思路 219
5.7.5 程序的源代码 219
5.7.6 程序执行的效果 220
5.7.7 总结 220
5.8 项目实战:外部中断——流水灯 221
5.8.1 项目内容 221
5.8.2 项目说明 221
5.8.3 硬件原理图 221
5.8.4 软件开发思路 222
5.8.5 程序的源代码 222
5.8.6 程序执行的效果 223
5.8.7 总结 224
5.9 项目实战:外部中断——加减一 224
5.9.1 项目内容 224
5.9.2 项目说明 225
5.9.3 硬件原理图 225
5.9.4 软件开发思路 226
5.9.5 程序的源代码 226
5.9.6 程序执行的效果 228
5.9.7 总结 229
本章小结 229
第6章 定时器和计数器的原理及其应用 231
6.1 现实生活中的定时和计数 231
6.2 计数的基本组成要素 231
6.3 单片机定时计数结构和工作原理 232
6.3.1 定时器/计数器的结构 232
6.3.2 定时器/计数器的四种工作方式 234
6.3.3 对外部输入的计数信号的要求 237
6.4 定时与计数系统的管理与控制接口 238
6.4.1 计数源的实现 238
6.4.2 计数器的实现和管理 238
6.4.3 计数结果 238
6.5 定时与计数器编程思想 238
6.5.1 定时与计数程序设计的目标 238
6.5.2 定时与计数器的编程 239
6.6.3 定时与计数器的编程步骤 239
6.6 项目实战:1s闪烁灯——查询法 240
6.6.1 项目内容 240
6.6.2 项目说明 240
6.6.3 硬件原理图 240
6.6.4 软件开发思路 240
6.6.5 程序的源代码 241
6.6.6 程序执行的效果 242
6.6.7 总结 242
6.7 项目实战:1s流水灯——查询法 242
6.7.1 项目内容 242
6.7.2 项目说明 243
6.7.3 硬件原理图 243
6.7.4 软件开发思路 243
6.7.5 程序的源代码 243
6.7.6 程序执行的效果 245
6.7.7 总结 245
6.8 项目实战:1s闪烁灯——中断法 245
6.8.1 项目内容 245
6.8.2 项目说明 246
6.8.3 硬件原理图 246
6.8.4 软件开发思路 246
6.8.5 程序的源代码 246
6.8.6 程序执行的效果 248
6.8.7 总结 248
6.9 项目实战:1s流水灯中断 249
6.9.1 项目内容 249
6.9.2 项目说明 249
6.9.3 硬件原理图 249
6.9.4 软件开发思路 249
6.9.5 程序的源代码 249
6.9.6 程序执行的效果 251
6.9.7 总结 251
6.10 项目实战:方波产生(中断) 252
6.10.1 项目内容 252
6.10.2 项目说明 252
6.10.3 硬件原理图 252
6.10.4 软件开发思路 253
6.10.5 程序的源代码 253
6.10.6 程序执行的效果 254
6.10.7 总结 254
6.11 项目实战:数码管59s倒计时(定时器中断) 254
6.11.1 项目内容 254
6.11.2 项目说明 255
6.11.3 硬件原理图 255
6.11.4 软件开发思路 255
6.11.5 程序的源代码 255
6.11.6 程序执行的效果 258
6.11.7 总结 258
6.12 项目实战:数码管5min倒计时(定时器中断) 258
6.12.1 项目内容 258
6.12.2 项目说明 258
6.12.3 硬件原理图 258
6.12.4 软件开发思路 258
6.12.5 程序的源代码 260
6.12.6 程序执行的效果 263
6.12.7 总结 263
6.13 项目实战:按键灯(计数器中断) 264
6.13.1 项目内容 264
6.13.2 项目说明 264
6.13.3 硬件原理图 264
6.13.4 软件开发思路 264
6.13.5 程序的源代码 265
6.13.6 程序执行的效果 266
6.13.7 总结 266
6.14 项目实战:按键数码管(计数器中断) 266
6.14.1 项目内容 266
6.14.2 项目说明 266
6.14.3 硬件原理图 266
6.14.4 软件开发思路 266
6.14.5 程序的源代码 267
6.14.6 程序执行的效果 268
6.14.7 总结 268
6.15 项目实战:频率计(计数器中断) 268
6.15.1 项目内容 268
6.15.2 项目说明 269
6.15.3 硬件原理图 270
6.15.4 软件开发思路 270
6.15.5 程序的源代码 270
6.15.6 程序执行的效果 273
6.15.7 总结 273
本章小结 273
第7章 单片机的数据通信机制 275
7.1 计算机通信的基础知识 275
7.1.1 通信无时无处不在 275
7.1.2 计算通信基础知识 275
7.2 单片机的通信机制 279
7.2.1 通信中几个基本要素 279
7.2.2 单片机串行通信结构示意图 279
7.3 单片机串行通信的结构和原理 279
7.3.1 串行口的结构 279
7.3.2 串行口的4种工作方式 281
7.3.3 多机通信 285
7.3.4 波特率的制定 286
7.3.5 串行通信的应用设计 288
7.4 串行口通信系统的管理与控制接口 291
7.4.1 数据的输入和输出通道 292
7.4.2 数据传输格式和数据传输速度的控制 292
7.4.3 传输数据的分割和组装 292
7.4.4 数据传输结束标志 292
7.5 单片机的串行口编程的思想 292
7.5.1 串行口通信程序设计的目标 292
7.5.2 单片机与单片机双机通信的编程要素 292
7.5.3 单片机与单片机双机通信的编程步骤 293
7.6 项目实战:串口数据发送(查询) 293
7.6.1 项目内容 293
7.6.2 项目说明 293
7.6.3 硬件原理图 293
7.6.4 软件开发思路 293
7.6.5 程序的源代码 294
7.6.6 程序执行的效果 296
7.6.7 总结 296
7.7 项目实战:串口数据接收(查询) 296
7.7.1 项目内容 296
7.7.2 项目说明 296
7.7.3 硬件原理图 296
7.7.4 软件开发思路 296
7.7.5 程序的源代码 297
7.7.6 程序执行的效果 299
7.7.7 总结 299
7.8 项目实战:串口数据发送和接收(查询) 299
7.8.1 项目内容 299
7.8.2 项目说明 299
7.8.3 硬件原理图 300
7.8.4 软件开发思路 300
7.8.5 程序的源代码 300
7.8.6 程序执行的效果 302
7.8.7 总结 302
7.9 项目实战:串口数据发送(中断) 302
7.9.1 项目内容 302
7.9.2 项目说明 302
7.9.3 硬件原理图 303
7.9.4 软件开发思路 303
7.9.5 程序的源代码 304
7.9.6 程序执行的效果 306
7.9.7 总结 306
7.10 项目实战:串口数据接收(中断) 306
7.10.1 项目内容 306
7.10.2 项目说明 306
7.10.3 硬件原理图 306
7.10.4 软件开发思路 306
7.10.5 程序的源代码 307
7.10.6 程序执行的效果 309
7.10.7 总结 310
7.11 项目实战:串口数据发送和接收(中断) 310
7.11.1 项目内容 310
7.11.2 项目说明 311
7.11.3 硬件原理图 311
7.11.4 软件开发思路 311
7.11.5 程序的源代码 311
7.11.6 程序执行的效果 314
7.11.7 总结 314
7.12 项目实战:单片机之间的发送和接收(查询) 315
7.12.1 项目内容 315
7.12.2 项目说明 315
7.12.3 硬件原理图 315
7.12.4 软件开发思路 316
7.12.5 程序的源代码 316
7.12.6 程序执行的效果 320
7.12.7 总结 320
7.13 项目实战:串口数据发送和接收(查询) 320
7.13.1 项目内容 320
7.13.2 项目说明 321
7.13.3 硬件原理图 321
7.13.4 软件开发思路 321
7.13.5 程序的源代码 322
7.13.6 程序执行的效果 326
7.13.7 总结 327
本章小结 327
第8章 单片机的数模转换原理及其应用 329
8.1 8051单片机与ADC的接口 329
8.1.1 A/D转换器简介 329
8.1.2 51单片机与逐次比较型A/D转换器ADC0809的接口 331
8.1.3 51单片机与TLC549的接口 333
8.2 项目实战:基于串口和ADC0809的数据采集系统的设计 335
8.2.1 项目内容 335
8.2.2 项目说明 336
8.2.3 硬件原理图 336
8.2.4 软件开发思路 336
8.2.5 程序的源代码 337
8.2.6 程序执行的效果 338
8.2.7 总结 339
8.3 项目实战:基于数码管和ADC0809的数据采集器的设计 339
8.3.1 项目内容 339
8.3.2 项目说明 340
8.3.3 硬件原理图 340
8.3.4 软件开发思路 340
8.3.5 程序的源代码 340
8.3.6 程序执行的效果 342
8.3.7 总结 342
8.4 项目实战:基于液晶和ADC0809的数据采集器的设计 344
8.4.1 项目内容 344
8.4.2 项目说明 344
8.4.3 硬件原理图 344
8.4.4 软件开发思路 344
8.4.5 程序的源代码 345
8.4.6 程序执行的效果 348
8.4.7 总结 348
8.5 项目实战:基于串口和TLC549的数据采集系统的设计 350
8.5.1 项目内容 350
8.5.2 项目说明 350
8.5.3 硬件原理图 350
8.5.4 软件开发思路 350
8.5.5 程序的源代码 351
8.5.6 程序执行的效果 352
8.5.7 总结 352
8.6 项目实战:基于数码管和TLC549的数据采集器的设计 353
8.6.1 项目内容 353
8.6.2 项目说明 354
8.6.3 硬件原理图 354
8.6.4 软件开发思路 355
8.6.5 程序的源代码 355
8.6.6 程序执行的效果 357
8.6.7 总结 359
8.7 项目实战:基于液晶和TLC549的数据采集器的设计 359
8.7.1 项目内容 359
8.7.2 项目说明 359
8.7.3 硬件原理图 359
8.7.4 软件开发思路 359
8.7.5 程序的源代码 360
8.7.6 程序执行的效果 363
8.7.7 总结 364
8.8 8051单片机与DAC的接口 364
8.8.1 D/A转换器简介 364
8.8.2 51单片机与8位D/A转换器0832的接口设计 365
8.8.3 51单片机与TLC5615的接口设计 368
8.9 项目实战:基于DAC0832和独立按键信号发生器的设计 370
8.9.1 项目内容 370
8.9.2 项目说明 370
8.9.3 硬件原理图 371
8.9.4 软件开发思路 371
8.9.5 程序的源代码 371
8.9.6 程序执行的效果 374
8.9.7 总结 374
8.10 项目实战:基于DAC0832和三个按键的信号发生器的设计 374
8.10.1 项目内容 374
8.10.2 项目说明 375
8.10.3 硬件原理图 375
8.10.4 软件开发思路 375
8.10.5 程序的源代码 376
8.10.6 程序执行的效果 379
8.10.7 总结 380
8.11 项目实战:基于TLC5615和独立按键的信号发生器的设计 380
8.11.1 项目内容 380
8.11.2 项目说明 380
8.11.3 硬件原理图 380
8.11.4 软件开发思路 380
8.11.5 程序的源代码 381
8.11.6 程序执行的效果 384
8.11.7 总结 385
8.12 项目实战:基于TLC5615和三个按键的信号发生器的设计 386
8.12.1 项目内容 386
8.12.2 项目说明 386
8.12.3 硬件原理图 386
8.12.4 软件开发思路 386
8.12.5 程序的源代码 387
8.12.6 程序执行的效果 390
8.12.7 总结 391
本章小结 392
第9章 单片机的系统综合设计 393
9.1 直流电机的调速原理 393
9.2 PWM脉宽调制原理 394
9.2.1 PWM调速原理 394
9.2.2 PWM调速方法 394
9.2.3 单片机PWM实现方式 395
9.3 直流电机调速的整体方案 395
9.4 直流电机驱动测速电路设计 396
9.4.1 三极管驱动电路设计 396
9.4.2 L298电机驱动模块 396
9.4.3 电机测速电路设计 399
9.5 软件设计 399
9.5.1 软件组成部分分析 399
9.5.2 主流程图 399
9.6 系统测试 400
9.6.1 直流电机调速系统的硬件电路图 400
9.6.2 直流电机调速系统的测试 401
9.7 参考源程序 403
本章小结 413
附录A C51库函数等 415
A.1 字符库函数(添加ctype.h头文件,返回值:真、假) 415
A.2 字符串函数库(添加string.h头文件,返回值:真、假) 416
A.3 输入/输出函数库(添加stdio.h头文件) 417
A.4 数学函数库(添加math.h头文件) 418
A.5 标准函数库(添加stdlib.h头文件) 419
A.6 内部函数库(添加intrins.h头文件) 420
A.7 常用的头文件 420
附录B ASCII码表完整版 421
附录C Protues元件库和元件中英文对照 423
参考文献 429