第1章 51单片机基础 1
1.1 51系列单片机的发展 1
1.2 常见51单片机型号及其特点 1
1.2.1 AT89S52 1
1.2.2 P87 C51 x2 2
1.2.3 STC89C52RC 2
1.3 51单片机的内核结构 3
1.3.1 中央处理器 4
1.3.2 存储器 6
1.3.3 外部引脚 9
1.3.4 时钟模块 11
1.4 51单片机的工作方式 13
1.4.1 复位工作方式 13
1.4.2 程序执行方式 14
1.4.3 低功耗工作方式 14
1.4.4 其他工作 15
第2章 51单片机的指令系统和C语言 16
2.1 51单片机的寻址 16
2.1.1 助记符和寻址基础 16
2.1.2 寻址方式 17
2.2 51单片机的指令 18
2.2.1 数据传送指令 18
2.2.2 算术运算指令 20
2.2.3 逻辑运算指令 22
2.2.4 位操作指令 24
2.2.5 控制转移指令 24
2.3 51单片机的伪指令和汇编程序设计 27
2.3.1 伪指令 27
2.3.2 汇编程序设计 29
2.4 51单片机的C语言 31
2.4.1 C51语言的数据类型、运算符和表达式 32
2.4.2 C51语言的结构 36
2.4.3 C51语言的函数 36
2.4.4 C51语言的数组和指针 37
2.4.5 C51语言的自构造类型 39
2.5 C51语言程序设计技巧 41
2.5.1 养成好的编程习惯 41
2.5.2 宏定义 43
2.5.3 条件编译 45
2.5.4 具体指针的应用 47
2.5.5 一些关键字的使用 49
第3章 51单片机的Keil μVision 4软件开发环境 53
3.1 Keil μVision 4的工作界面 53
3.2 Keil μVision 4的菜单栏 54
3.2.1 File(文件)菜单 54
3.2.2 Edit(编辑)菜单 55
3.2.3 View(视图)菜单 56
3.2.4 Project(项目)菜单 56
3.2.5 Flash(Flash存储器)菜单 57
3.2.6 Debug(调试)菜单 57
3.2.7 Peripherals(串行接口)菜单 58
3.2.8 Tools(工具)菜单 59
3.2.9 SVCS(版本控制)菜单 59
3.2.10 Window(窗口)菜单 60
3.2.11 Help(帮助)菜单 60
3.3 Keil μVision 4的库函数 60
3.3.1 库文件和头文件分类 61
3.3.2 C51语言的库函数分类介绍 62
3.4 “Hello World!”——Keil μVision 4的应用实例 65
3.5 Keil μVision 44的错误信息 69
3.5.1 变量未被使用警告(Warning 280) 69
3.5.2 函数未被声明警告(Warning C206) 70
3.5.3 头文件无法打开错误(Error C318) 71
3.5.4 函数名称重复定义错误(Error C237) 72
3.5.5 函数未被调用警告 72
3.5.6 函数未定义警告(Warning C206) 73
3.5.7 内存空间溢出错误 74
3.5.8 函数重入警告 74
3.5.9 常见编译器错误列表 75
第4章 51单片机的硬件开发工具和Proteus硬件仿真环境 79
4.1 51单片机的硬件系统开发流程 79
4.2 51单片机的硬件开发工具 80
4.2.1 编程器 80
4.2.2 仿真器 80
4.2.3 数字万用表 82
4.2.4 数字示波器 82
4.3 Proteus应用基础 83
4.3.1 Proteus的运行界面和支持的文件 84
4.3.2 Proteus的菜单 85
4.3.3 Proteus的快捷工具栏和工具箱 98
4.4 Proteus的使用流程 100
4.5 Proteus中的51单片机及其使用 101
4.6 Proteus和Keil μVision 4联合使用 102
4.6.1 建立仿真文件和源文件 102
4.6.2 联合调试中仿真的运行控制 104
4.6.3 联合调试中的仿真数据记录 104
4.6.4 联合调试中仿真的观察 104
4.6.5 联合调试中51单片机的内部资源观察 107
4.6.6 在Keil μVision 4中调用Proteus仿真器 108
第5章 51单片机的并行端口 110
5.1 数据和地址端口P0和P2 110
5.2 普通I/O端口P1 112
5.3 复用端口P3 112
5.4 数据/地址总线扩展方法 113
5.5 51单片机的并行端口应用实例 115
5.5.1 并行端口输出高/低脉冲电平实例 115
5.5.2 并行端口驱动发光二极管(LED)实例 118
5.5.3 并行端口驱动单位数码管实例 123
5.5.4 并行端口驱动独立按键实例 129
5.5.5 并行端口驱动行列扫描键盘实例 134
第6章 51单片机的中断系统和外部中断 141
6.1 51单片机的中断系统 141
6.2 51单片机的中断处理过程 142
6.2.1 51单片机中断系统的初始化步骤 142
6.2.2 51单片机的中断服务子程序处理流程 142
6.3 51单片机的中断服务子程序设计 143
6.4 51单片机的外部中断 144
6.5 51单片机的外部中断应用实例 144
6.5.1 中断计数(三极管) 144
6.5.2 低电平中断的应用 149
6.5.3 多个信号共用一个外部中断 152
第7章 51单片机的定时计数器 157
7.1 51单片机定时计数器的组成 157
7.2 51单片机定时计数器的寄存器 157
7.2.1 工作方式控制寄存器TMOD 157
7.2.2 控制寄存器TCON 158
7.2.3 数据寄存器 TH0、TL0和TH1、TL1 159
7.3 51单片机定时计数器的工作方式 159
7.3.1 工作方式0 159
7.3.2 工作方式1 159
7.3.3 工作方式2 160
7.3.4 工作方式3 161
7.3.5 定时计数器的中断 161
7.4 使用51单片机的计数器 161
7.4.1 使用定时功能 161
7.4.2 使用计数功能 162
7.4.3 使用门控信号 162
7.4.4 读取定时计数器的值 162
7.5 定时计数器T2 163
7.5.1 T2的相关寄存器 163
7.5.2 T2的工作方式 164
7.5.3 T2的中断处理 165
7.6 51单片机定时计数器应用实例 165
7.6.1 T0/T1控制外部引脚输出方波 165
7.6.2 PWM波形输出 168
7.6.3 对外部脉冲计数 170
7.6.4 测量脉冲宽度 173
7.6.5 使用T2输出方波 175
7.6.6 使用T2进行精确定时 177
7.6.7 使用T0/T1扩展外部中断 179
第8章 51单片机的串行通信模块 182
8.1 串行通信基础 182
8.2 51单片机的串行通信模块构成 182
8.3 51单片机的串行通信模块的寄存器 182
8.3.1 串行通信模块控制寄存器(SCON) 183
8.3.2 串行通信模块数据寄存器(SBUF) 183
8.3.3 电源管理寄存器(PCON) 184
8.4 51单片机的串行通信模块的工作方式 184
8.4.1 工作方式0 184
8.4.2 工作方式1 185
8.4.3 工作方式2和工作方式3 186
8.4.4 串行通信模块的中断 187
8.5 51单片机的串行通信模块应用实例 187
8.5.1 串口数据发送 187
8.5.2 串口和PC进行通信 191
8.5.3 使用串口扩展外部中断 199
8.5.4 使用普通I/O引脚模拟串口通信 201
第9章 51单片机的人机交互模块 207
9.1 使用拨码开关设置地址 207
9.1.1 拨码开关基础 207
9.1.2 Proteus中的拨码开关 207
9.1.3 实例设计思路 209
9.1.4 实例的Proteus应用电路 209
9.1.5 实例的应用代码 210
9.1.6 实例的仿真结果和说明 211
9.2 多位数码管显示流水数字 212
9.2.1 多位数码管基础 212
9.2.2 Proteus中的多位数码管 213
9.2.3 实例的设计思路 213
9.2.4 实例的Proteus应用电路 213
9.2.5 实例的应用代码 215
9.2.6 实例的仿真结果和说明 217
9.3 多位数码管驱动芯片MAX7219显示日期 218
9.3.1 MAX7219基础 218
9.3.2 Proteus中的MAX7219 222
9.3.3 实例的设计思路 223
9.3.4 实例的Proteus应用电路 223
9.3.5 实例的应用代码 224
9.3.6 实例的仿真结果和说明 226
9.4 1602数字字符液晶显示“Hello 51 MCU” 226
9.4.1 1602液晶基础 227
9.4.2 Proteus中的1602液晶 229
9.4.3 实例的设计思路 230
9.4.4 实例的Proteus应用电路 230
9.4.5 实例的应用代码 231
9.4.6 实例的仿真结果和说明 233
第10章 51单片机的信号采集和输出通道 234
10.1 使用ADC0809采集模拟信号 234
10.1.1 ADC0809基础 234
10.1.2 Proteus中的ADC0809 235
10.1.3 实例的设计思路 236
10.1.4 实例的Proteus应用电路 236
10.1.5 实例的应用代码 237
10.1.6 实例的仿真结果和说明 240
10.2 使用TLC2543采集模拟信号 240
10.2.1 TLC2543基础 240
10.2.2 Proteus中的TLC2543 242
10.2.3 实例的设计思路 243
10.2.4 实例的Proteus应用电路 243
10.2.5 实例的应用代码 244
10.2.6 实例的仿真结果和说明 246
10.3 使用PCF8563获得当前时间 247
10.3.1 PCF8563基础 247
10.3.2 Proteus中的PCF8563 250
10.3.3 实例的设计思路 251
10.3.4 实例的Proteus应用电路 251
10.3.5 实例的应用代码 252
10.3.6 实例的仿真结果和说明 260
10.4 使用DS18B20测量温度 261
10.4.1 DS18B20基础 261
10.4.2 Proteus中的DS18 B20 263
10.4.3 实例的设计思路 264
10.4.4 实例的Proteus应用电路 265
10.4.5 实例的应用代码 266
10.4.6 实例的仿真结果和说明 274
10.5 使用MAX517输出模拟信号 274
10.5.1 MAX517基础 275
10.5.2 Proteus中的MAX517 276
10.5.3 实例的设计思路 277
10.5.4 实例的Proteus应用电路 277
10.5.5 实例的应用代码 278
10.5.6 实例的仿真结果和说明 283
第11章 51单片机应用系统 285
11.1 简易电子琴 285
11.1.1 应用系统背景 285
11.1.2 设计思路 286
11.1.3 硬件系统设计 287
11.1.4 软件系统设计 290
11.1.5 应用系统的仿真和总结 295
11.2 手动程控放大器 296
11.2.1 应用系统背景 296
11.2.2 设计思路 296
11.2.3 硬件系统设计 300
11.2.4 软件系统设计 304
11.2.5 应用系统的仿真和总结 309