第1课 单片机概述及内外部结构分析 1
1.1 单片机概述 1
1.1.1 何谓单片机 1
1.1.2 单片机引脚、价格及应用 1
1.1.3 MCS51单片机与其他单片机的关系 2
1.1.4 未来单片机的发展趋势 2
1.2 单片机的内部、外部结构 3
1.2.1 单片机引脚 3
1.2.2 单片机的应用电路 4
1.2.3 单片机最小系统 4
1.3 单片机内部结构分析 5
1.3.1 存储器 5
1.3.2 8051单片机存储结构 5
1.3.3 单片机内部RAM分析 6
1.3.4 特殊功能寄存器 6
1.4 总结 8
第2课 常用基本电路定理、公式及元器件 9
2.1 常用基本电路定理 9
2.1.1 欧姆定理 9
2.1.2 节点电流定理 9
2.1.3 回路电压定理 9
2.2 常用电子线路公式 9
2.3 常用元器件介绍 10
2.4 常用进制的转换 10
2.5 第一个小程序:跑马灯程序 11
2.6 位和字节 12
2.7 总结 12
第3课 C51语言简介 13
3.1 单片机C语言的发展历史 13
3.2 C语言的主要特点 13
3.3 单片机的汇编语言与C51语言比较 14
3.4 单片机C语言与标准C语言异同 15
3.5 总结 16
第4课 单片机C程序的基本结构 17
4.1 单片机C语言入门实例 17
4.2 源程序 18
4.3 单片机C程序的基本结构 20
4.3.1 头文件 20
4.3.2 主函数 20
4.3.3 函数 20
4.4 C51基本数据类型 21
4.4.1 基本数据类型 21
4.4.2 常量与变量 22
4.5 8051片内资源及位变量 24
4.5.1 特殊功能寄存器的C51定义 24
4.5.2 自定义变量类型typedef 26
4.6 运算符与表达式 26
4.6.1 赋值运算 26
4.6.2 算术运算 26
4.6.3 关系运算 28
4.6.4 逻辑运算 28
4.6.5 位运算 29
4.6.6 自增减运算及复合运算 30
4.6.7 条件运算符 30
4.6.8 逗号运算符 31
4.7 总结 31
第5课 C51基本结构程序设计 32
5.1 顺序结构 32
5.2 选择结构 32
5.2.1 if语句 32
5.2.2 switch-case语句 35
5.3 break语句 36
5.4 循环结构 37
5.4.1 while语句 38
5.4.2 do-while语句 38
5.4.3 for语句 38
5.4.4 循环嵌套 40
5.5 其他语句 41
5.5.1 循环语句中的break语句 41
5.5.2 continue语句 41
5.5.3 goto语句 42
5.5.4 return语句 42
5.6 总结 42
第6课 函数 43
6.1 函数的声明与定义、调用 43
6.1.1 函数的声明 43
6.1.2 函数定义 44
6.1.3 函数的调用 44
6.2 函数作用范围与变量作用域 48
6.3 总结 49
第7课 数组和指针 50
7.1 个一维数组 50
7.1.1 一维数组的定义 50
7.1.2 一维数组元素的引用 51
7.1.3 一维数组的初始化 51
7.2 二维数组 51
7.2.1 二维数组的定义 51
7.2.2 二维数组元素的引用 51
7.2.3 二维数组的初始化 52
7.3 字符数组 52
7.4 C51中数组进行初始化的规则 53
7.5 数组总结 53
7.6 指针 53
7.6.1 指针变量的定义 54
7.6.2 指针变量的引用 54
7.6.3 地址运算 56
7.6.4 指针和数组 56
7.6.5 字符指针 57
7.6.6 指针数组 58
7.7 总结 58
第8课 8051内部资源编程——I/O端口的应用 59
8.1 I/O端口 59
8.1.1 P0口的结构 59
8.1.2 P1口的结构 60
8.1.3 P2口的结构 60
8.1.4 P3口的结构 60
8.2 I/O口应用总结 61
第9课 8051内部资源编程——定时器 63
9.1 计数的概念 63
9.1.1 计数器的容量 63
9.1.2 定时的概念 63
9.1.3 任意计数及溢出 64
9.2 定时/计数器的工作原理及控制 65
9.2.1 控制计数/定时器常用的寄存器 65
9.2.2 定时/计数器的4种工作方式 67
9.2.3 定时/计数器的定时/计数范围 68
9.3 定时/计数器的使用 68
9.3.1 计数初值的计算 68
9.3.2 程序初始化步骤 68
9.3.3 应用实例——用定时的方式实现闪灯程序 69
9.4 总结 69
第10课 8051内部资源编程——中断 70
10.1 有关中断的概念 70
10.1.1 中断的嵌套与优先级处理 70
10.1.2 中断的响应过程 71
10.2 8051的中断系统 71
10.2.1 8051的中断源 71
10.2.2 控制中断的几个寄存器 73
10.2.3 中断源序号及中断入口地址 74
10.3 C51中断程序设计 75
10.3.1 C51编译器支持在C源程序中直接嵌入中断服务程序 75
10.3.2 C51中断服务程序的注意事项 76
10.3.3 中断程序步骤 76
10.3.4 中断程序范例 76
10.4 总结 77
第11课 8051内部资源编程——通信 78
11.1 串行通信的基本概念 78
11.1.1 异步传送 78
11.1.2 同步传送 79
11.1.3 串行通信的数据传送方向 79
11.2 8051单片机的串口结构 80
11.2.1 串行通行模块的设置 81
11.2.2 波特率计算 82
11.3 串口程序设计 82
11.3.1 串口设置步骤 82
11.3.2 软件设计 83
11.4 总结 84
第12课 人机界面接口技术——数码管和矩阵键盘 85
12.1 数码管 85
12.1.1 动态扫描显示接口 86
12.1.2 程序范例 87
12.2 键盘接口 88
12.2.1 按键开关的抖动问题 88
12.2.2 程序范例 89
12.3 总结 92
第13课 人机界面接口技术——字符型液晶屏 93
13.1 LCD显示器基本原理 93
13.2 电子产品设计或电子模块驱动设计步骤 94
13.3 总结 98
第14课 人机界面接口技术——点阵型液晶屏 99
14.1 点阵型液晶屏LCD12864 99
14.2 点阵型液晶屏硬件连接 99
14.3 软件设计 100
14.4 总结 104
第15课 数据采集编程——A/D 105
15.1 模数转换ADC 105
15.1.1 ADC0804 105
15.1.2 硬件连接 106
15.1.3 ADC0804应用实例 106
15.1.4 A/D接口设计要点 108
15.2 数模转换DAC 109
15.2.1 DAC性能指标 109
15.2.2 DAC0832引脚功能 110
15.2.3 DAC0832的应用 110
15.2.4 DAC0832的时序图 110
15.2.5 程序范例 112
15.3 总结 114
第16课 I2C总线及AT24C02的应用 115
16.1 I2C总线 115
16.2 AT24C02芯片 115
16.3 I2C协议编程步骤 116
16.3.1 对AT24C02进行读操作 116
16.3.2 对AT24C02进行写操作 116
16.4 AT24C02应用实例 117
16.5 总结 126
第17课 步进电机的应用 127
17.1 步进电机 127
17.2 应用范例 128
17.3 总结 134
第18课 红外遥控 135
18.1 红外编码 135
18.1.1 红外与蓝牙的差别 135
18.1.2 编码原理 136
18.2 案例程序 137
18.3 总结 143
第19课 单总线协议——DS18B20温度传感器 144
19.1 DS18B20概述 144
19.2 特点 144
19.3 内部结构 145
19.4 指令码 147
19.5 时序 148
19.6 操作流程 150
19.7 与单片机的典型接口设计 150
19.8 精确延时问题 151
19.9 案例程序 151
19.10 总结 156
第20课 ModBus中CRC16循环冗余校验 157
20.1 CRC概念 157
20.2 工业总线ModBus 158
20.2.1 ModBus串行通信数据格式 158
20.2.2 ModBus串行通信功能码 159
20.2.3 ModBus串行通信CRC16校验 160
第21课 通信的SPI概念 168
21.1 SPI 168
21.2 接口的硬件连接 169
21.3 性能特点 170
21.4 SPI协议 170
21.5 举例 170
21.6 SPI工作原理及工作方式 172
21.7 总结 173
第22课 Keil C51编译、链接、仿真调试方法 174
22.1 安装软件 174
22.2 Keil C51使用方法 174
22.3 Keil C51仿真调试方法 177
第23课 C51程序编写规范 179
23.1 C51的编程规范——编程总原则 179
23.2 规范范例 181
23.3 命名 183
23.4 编辑风格 184
23.5 项目管理知识 185
23.6 电子产品开发流程 186
附录 ZC600开发板原理图 188
参考文献 191