第一部分 入门篇 3
第1章 藉马歇门,踏神圣路:迈进STC15单片机的大门 3
1.1 单片机概述 3
1.1.1 单片机厂家简介 4
1.1.2 STC15单片机简述 5
1.2 为何要学习STC15单片机 8
1.3 如何玩转单片机 9
1.3.1 做有准备的人 9
1.3.2 经验分享 13
第2章 欲善其事,必利其器:软硬件平台的搭建和使用 15
2.1 硬件平台——FSST15开发板 15
2.1.1 FSST15开发板功能框图 15
2.1.2 FSST15开发板基本配置 16
2.2 开发环境——KeilμVision5 17
2.2.1 KeilμVision5的安装 18
2.2.2 KeilμVision5中的工程创建过程 20
2.3 我的第一个程序——点亮LED 28
2.4 辅助开发工具 28
2.4.1 CH340驱动的安装 28
2.4.2 单片机编程软件——STC-ISP 29
2.5 课后学习 30
第二部分 初级篇 33
第3章 端倪初现,小试牛刀:基本元器件与LED 33
3.1 电阻的应用概述 33
3.1.1 初识电阻 33
3.1.2 电流与电阻的关系 34
3.2 电容的应用概述 36
3.2.1 初识电容 36
3.2.2 电容的用途 36
3.2.3 实例解说储能和滤波 37
3.3 二极管的应用概述 40
3.3.1 二极管的特性 40
3.3.2 二极管的应用 42
3.3.3 发光二极管 43
3.4 三极管应用概述及使用误区 44
3.4.1 三极管的基本开关电路 44
3.4.2 开关三极管的使用误区 46
3.5 MOS管的应用概述 48
3.5.1 MOS管基础 49
3.5.2 MOS管的应用 50
3.6 运算放大器的基本应用 51
3.6.1 负反馈 51
3.6.2 同相放大电路 51
3.6.3 反相放大电路 52
3.7 STC15系列单片机的I/O口概述 52
3.7.1 I/O口的工作模式及配置 52
3.7.2 I/O口各种不同的工作模式结构框图 53
3.8 LED的原理解析 55
3.8.1 LED的原理说明 55
3.8.2 LED的硬件电路 55
3.9 LED的应用实例 56
3.9.1 LED闪烁实例 57
3.9.2 LED跑马灯实例 58
3.9.3 LED流水灯实例 60
3.10 课后学习 62
第4章 排兵布阵,步步扣杀:模块化编程 63
4.1 夯实基础——数值的换算以及逻辑运算 63
4.1.1 各进制之间的换算关系 63
4.1.2 数字电路和C语言中的逻辑运算 64
4.2 简述单片机的开发流程 66
4.3 Keil5的进阶应用——建模 67
4.4 单片机的模块化编程 71
4.4.1 模块化编程的说明 71
4.4.2 用实践解释 71
4.5 模块化编程的应用实例 75
4.6 课后学习 79
第5章 点段融合,一气呵成:C语言的编程规范与数码管的应用 80
5.1 夯实基础——C语言的编程规范 80
5.1.1 程序的排版 81
5.1.2 程序的注释 81
5.2 基于STC15的单片机最小系统 82
5.2.1 电源 82
5.2.2 晶体振荡电路(晶振) 85
5.2.3 复位电路 86
5.2.4 程序下载电路 87
5.3 数码管的原理解析 88
5.3.1 数码管的原理说明 88
5.3.2 数码管的硬件电路设计 89
5.3.3 知识拓展——74HC595 90
5.3.4 数码管的真值表与基本的编程实例 92
5.4 数码管的应用实例 94
5.4.1 数码管的静态显示例程 94
5.4.2 数码管的动态显示实例 96
5.5 课后学习 98
第6章 审时度势,伺机而动:C语言的数据类型与定时器的应用 99
6.1 夯实基础——C语言的数据类型 99
6.1.1 变量与常量 99
6.1.2 变量的作用域 100
6.1.3 变量的存储类别 101
6.1.4 变量的命名规则 102
6.2 STC15单片机的内部结构 103
6.2.1 STC15单片机的内部结构 103
6.2.2 中央处理器(CPU) 104
6.2.3 只读存储器(ROM)和随机存储器(RAM) 105
6.2.4 IAP15W4K58S4单片机的存储结构 107
6.3 STC15单片机的定时器/计数器 108
6.3.1 学习定时器/计数器之前的说明 109
6.3.2 定时器/计数器T0、T1的寄存器 110
6.3.3 定时器/计数器T0、T1的工作模式 112
6.3.4 定时器的简单应用实例和初始化步骤总结 113
6.4 IAP15W4K58S4单片机的可编程时钟输出 115
6.5 定时器和时钟输出应用实例 117
6.5.1 数码管的静态显示例程(定时器) 117
6.5.2 可编程时钟输出例程 118
6.6 课后学习 119
第7章 当断不断,反受其乱:C语言的条件判断语句与中断系统 120
7.1 夯实基础——C语言的条件判断语句 120
7.1.1 if…else语句 120
7.1.2 switch…case语句 122
7.2 单片机省电模式和看门狗的应用 122
7.2.1 省电模式 122
7.2.2 看门狗 124
7.2.3 LED灯闪烁是因为“狗”饿了 125
7.2.4 要让系统运行正常必须实时“喂狗” 126
7.3 单片机的中断系统 126
7.3.1 单片机中断的产生背景和响应过程 127
7.3.2 单片机中断系统的框架和中断源 127
7.3.3 单片机中断系统的寄存器 131
7.3.4 简单中断应用实例及与中断函数有关的知识点 132
7.3.5 中断系统的优先级 135
7.4 中断系统的应用实例 138
7.4.1 数码管动态显示的基本应用实例 138
7.4.2 数码管动态刷新的改进与消影 140
7.5 课后学习 143
第8章 举一反三,一呼百应:C语言的循环语句与串口的应用 144
8.1 夯实基础——C语言的循环语句 144
8.1.1 while循环 144
8.1.2 do…while循环 144
8.1.3 for循环 145
8.2 通信接口模块 146
8.2.1 通信接口的基本分类 146
8.2.2 串行通信概述 147
8.3 IAP15W4K58S4单片机的串行接口 150
8.3.1 与串行通信相关的基本寄存器 150
8.3.2 串口1的工作模式 153
8.3.3 串口1工作模式1的波特率计算 155
8.3.4 串口1的应用实例 156
8.4 RS-232通信接口概述 159
8.4.1 RS-232C串口通信标准与接口定义 159
8.4.2 RS-232C通信接口的电平转换 160
8.5 USB转串口通信 162
8.6 通过串口实现数据互传的应用实例 163
8.7 课后学习 168
第9章 稳扎稳打,步步为营:C语言的数组、字符串与按键的应用 169
9.1 夯实基础——C语言的数组、字符串 169
9.1.1 数组 169
9.1.2 字符串 170
9.2 IAP15W4K58S4单片机的可编程计数器阵列 171
9.2.1 CCP/PCA/PWM内部结构概述 171
9.2.2 CCP/PCA/PWM的捕获模式应用实例 172
9.2.3 CCP/PCA/PWM的16位软件定时器模式应用实例 173
9.2.4 CCP/PCA/PWM的高速脉冲输出模式应用实例 174
9.3 按键的处理方法 174
9.3.1 独立按键介绍 174
9.3.2 矩阵按键的组成 175
9.3.3 触摸按键概述 176
9.3.4 A/D采样方式的按键 177
9.4 独立按键扫描方法及消抖原理 178
9.4.1 独立按键的扫描方法 178
9.4.2 键盘消抖的基本原理 179
9.4.3 带消抖的按键应用程序 180
9.5 矩阵按键的扫描方法和状态机 181
9.5.1 矩阵按键的扫描方法 181
9.5.2 状态机概述 182
9.5.3 状态机法的按键检测 183
9.5.4 基于状态机的独立按键扫描法 184
9.6 按键扫描的应用实例 188
9.6.1 行扫描法的矩阵按键应用实例 189
9.6.2 高低电平翻转法的矩阵按键应用实例 193
9.6.3 基于状态机的矩阵按键应用实例 194
9.7 课后学习 195
第10章 包罗万象,森然洞天:C语言的函数与液晶的基本应用 196
10.1 夯实基础——C语言的函数 196
10.1.1 函数的定义和应用 196
10.1.2 函数的分类及命名规则 196
10.2 Keil5的软件仿真、硬件仿真及延时 198
10.2.1 基于Keil5的软件仿真应用实例 199
10.2.2 软件仿真与延时 203
10.2.3 基于Keil5与IAP系列单片机的硬件仿真应用实例 204
10.3 1602液晶的应用概述 206
10.3.1 1602液晶模组和电路设计 206
10.3.2 1602液晶的控制指令和时序图 208
10.3.3 1602液晶的基本应用实例 212
10.4 1602液晶的应用实例 215
10.4.1 1602液晶移屏指令 215
10.4.2 液晶CGRAM的操作实例 216
10.4.3 串口和1602液晶的综合应用实例 218
10.5 课后学习 226
第11章 沙场点兵,见风使舵:C语言的指针与LED点阵屏的应用 227
11.1 夯实基础——C语言的指针 227
11.1.1 指针的基本用法 227
11.1.2 指针与数组 228
11.1.3 指针与函数 230
11.2 同步串行外围接口(SPI)的应用概述 231
11.2.1 SPI介绍 231
11.2.2 单片机内部SPI的寄存器 232
11.2.3 SPI的数据通信方式与时序图 234
11.2.4 SPI的应用模式与串行Flash的应用实例 236
11.3 LED点阵屏的原理及应用 237
11.3.1 LED点阵屏的内部原理 237
11.3.2 LED点阵屏的硬件电路设计 238
11.3.3 LED点阵屏的基本显示实例 239
11.4 LED点阵屏的应用实例 241
11.4.1 通过移屏方式显示字符——I?U 241
11.4.2 LED点阵屏的移屏简易算法 246
11.5 课后学习 251
第三部分 中级篇 255
第12章 一脉相承,本源同宗:I2C总线与库开发 255
12.1 I2C总线的通信协议 255
12.1.1 对I2C总线的初步认识 255
12.1.2 I2C总线的时序格式 257
12.2 AT24C02的基本应用 259
12.2.1 AT24C02的简述和硬件电路设计 259
12.2.2 AT24C02的通信协议与时序图 260
12.2.3 基于AT24C02的I2C总线协议与软件分析 263
12.3 复合数据类型 268
12.3.1 结构体 268
12.3.2 枚举 270
12.3.3 typedef关键字的应用 271
12.4 STC15系列单片机内部E2PROM的应用 272
12.4.1 与单片机内部E2PROM有关的寄存器 272
12.4.2 单片机内部E2PROM的应用实例 274
12.5 库函数与应用实例 274
12.5.1 STC15系列库函数 274
12.5.2 库函数的应用实例 278
12.6 课后学习 290
第13章 重峦叠嶂,矩阵方形:PWM的初步认识与相关应用 291
13.1 PWM的初步认识 291
13.2 利用可编程计数阵列产生PWM 292
13.2.1 脉宽调制模式(PWM) 293
13.2.2 利用CCP/PCA输出PWM的应用实例 294
13.2.3 利用CCP/PCA高速脉冲输出功能实现两路PWM 296
13.2.4 用T0输出PWM 300
13.3 增强型高精度PWM的基本应用 304
13.3.1 与高精度PWM相关的功能寄存器 304
13.3.2 蜂鸣器和PWM的应用实例 307
13.3.3 LED灯和PWM的应用实例 308
13.4 常用的电动机驱动方式 310
13.4.1 对电动机驱动芯片L298的初步认识 310
13.4.2 H桥驱动电路简介 312
13.5 三种常用电动机的驱动方法 312
13.5.1 直流电动机 312
13.5.2 简易步进电动机及其应用 313
13.5.3 舵机的基本操作实例 317
13.6 课后学习 321
第14章 亦步亦趋,咫尺天涯:数模(D/A)与模数(A/D)的转换 322
14.1 D/A和A/D转换的初步介绍 322
14.1.1 D/A转换原理 322
14.1.2 A/D转换原理 325
14.2 STC15单片机内部的ADC 330
14.2.1 STC15系列单片机内部ADC的结构 330
14.2.2 与ADC有关的寄存器 332
14.2.3 ADC的简单应用实例 334
14.3 基于ADC的独立按键检测 339
14.4 电容感应式触摸按键(PWM+ADC) 340
14.5 基于PWM与RC滤波器的SPWM 345
14.6 课后学习 351
第15章 狂风暴雨,定海神针:逻辑分析仪与红外编解码 352
15.1 Saleae逻辑分析仪 352
15.1.1 示波器和逻辑分析仪的比较 352
15.1.2 逻辑分析仪的工作原理和分类 353
15.1.3 逻辑分析仪概述 355
15.1.4 Saleae逻辑分析仪的使用步骤 357
15.2 红外遥控的原理 361
15.3 红外解码过程分析 364
15.4 红外解码的具体实现例程 366
15.5 红外编码与发射的过程分析 374
15.6 红外编码与发射的应用例程 375
15.7 课后学习 376
第16章 有的放矢,运筹帷幄:RTX51 Tiny实时操作系统 377
16.1 实时操作系统概述 377
16.2 RTX51 Tiny操作系统 378
16.2.1 RTX51 Tiny操作系统概述 378
16.2.2 任务程序的分类 380
16.2.3 RTX51 Tiny的工作原理 381
16.2.4 RTX51 Tiny的配置 384
16.2.5 RTX51 Tiny的使用步骤 386
16.2.6 RTX51 Tiny的常用函数 388
16.3 RTX51 Tiny的应用实例 392
16.3.1 流星慧灯(基于RTX51 Tiny) 392
16.3.2 简易交通灯(基于RTX51 Tiny) 397
16.4 课后学习 401
第17章 按图索骥,彗泛画涂:PCB的基本知识与软件学习 402
17.1 PCB设计流程 402
17.2 PCB特性与设计规则 405
17.2.1 PCB板材类型 405
17.2.2 PCB布局与布线规则 406
17.2.3 PCB封装元件的线宽 408
17.3 绘制PCB的软件介绍 409
17.3.1 Altium Designer 2014使用方法 410
17.3.2 PADS 9.5 的使用过程 417
17.4 课后学习 427
第四部分 高级篇 431
第18章 范水模山,双管齐下:串口扩展与一键自动下载项目 431
18.1 软件模拟串口应用实例 431
18.1.1 使用定时器0软件模拟一个全双工串口 431
18.1.2 使用两路PCA模拟一个全双工串口 437
18.2 一键自动下载项目的功能要求与设计思想 442
18.3 一键自动下载项目的硬件电路设计 443
18.3.1 下载模式切换控制核心——STC15W104E 443
18.3.2 开关电路的设计 444
18.4 一键自动下载项目的软件编程 444
18.5 课后学习 452
第19章 地无遗利,心随你动:项目开发与多功能收音机 453
19.1 RDM项目管理作业流程 453
19.1.1 项目要求与需求分析 453
19.1.2 项目立项与评估 454
19.1.3 项目分工和总体的结构框架 455
19.2 技术准备与难关突破 456
19.3 温度传感器——LM75A 456
19.3.1 LM75A的寄存器列表 459
19.3.2 LM75A的I2C硬件接口电路 462
19.3.3 LM75A的通信协议与时序特性 462
19.3.4 LM75A的应用实例与软件分析 464
19.4 实时时钟——PCF8563T 465
19.4.1 PCF8563T的功能特点 465
19.4.2 PCF8563T的内部寄存器 467
19.4.3 PCF8563F的IC硬件接口电路 468
19.4.4 PCF8563F的通信协议与时序特性 469
19.5 程序总体框架和功能划分 469
19.6 各个子功能和总体程序的编写 470
19.7 课后学习 474
第20章 天上天下,唯它独尊:PID算法与四轴飞行器的设计 475
20.1 PID算法 475
20.1.1 PID算法概述 475
20.1.2 PID算法的分类与应用实例 478
20.1.3 位置式PID算法 482
20.2 四轴飞行器硬件模型的建立 486
20.2.1 搭建四轴飞行器的主板 486
20.2.2 搭建四轴飞行器的遥控器 492
20.3 四轴飞行器的软件算法 492
20.3.1 四轴飞行器的运行状况与电动机转动的关系 492
20.3.2 PID控制电动机的参数整定 494
20.3.3 四元数与滤波算法 496
20.4 四轴飞行器主板的综合程序 502
20.5 四轴飞行器遥控器的综合程序 532
20.6 课后学习 532