第1章 实验设备及器材使用介绍 1
1.1 单片机的发展史及特点 1
1.2 单片机入门的有效途径 2
1.3 实验工具及器材 3
1.3.1 Keil C51 Windows集成开发环境 3
1.3.2 TOP851多功能编程器 4
1.3.3 LED输出试验板 5
1.3.4 LED数码管输出试验板 6
1.3.5 5V高稳定专用稳压电源 8
1.3.6 16×2字符型液晶显示模组 8
2.1 Keil C51集成开发环境软件安装 10
第2章 Keil C51集成开发环境及TOP851多功能编程器 10
2.2 TOP851烧录软件安装 11
2.3 TOP851烧录软件操作 12
2.3.1 文件操作和编辑 12
2.3.2 选择型号 16
2.3.3 读/写单片机 17
第3章 初步接触KeilC51及TOP851软件并感受第一个演示程序效果 19
3.1 建立一个工程项目,选择芯片并确定选项 19
3.2 建立源程序文件 21
3.3 添加文件到当前项目组中 22
3.4 编译(汇编)文件 23
3.5 检查并修改源程序文件中的错误 24
3.6 软件模拟仿真调试 24
3.7 烧录程序(编程操作) 25
3.8 观察程序运行的结果 27
第4章 单片机的基本知识 28
4.1 MCS-51单片机的基本结构 28
4.2 80C51基本特性及引脚定义 29
4.2.1 80C51的基本特征 29
4.2.2 80C51的引脚定义及功能 30
4.3 80C51的内部结构 31
4.4 80C51的存储器配置和寄存器 33
第5章 汇编语言程序指令的学习 37
5.1 MCS-51单片机的指令系统 37
5.2 汇编语言的特点 38
5.3 汇编语言的语句格式 38
6.1.2 直接寻址 40
6.1.4 寄存器间接寻址 40
6.1.3 寄存器寻址 40
第6章 数据传送指令的学习及实验 40
6.1.1 立即数寻址 40
6.1 按寻址方式分类的数据传送指令 40
6.1.5 位寻址 41
6.1.6 变址寻址 41
6.1.7 相对寻址 41
6.2 点亮/熄灭一个发光二极管的实验,自动循环工作 41
6.2.1 实现方法 41
6.2.2 源程序文件 41
6.3.1 实现方法 43
6.3 点亮/熄灭一个发光二极管的实验,点亮/熄灭时间自动发生变化(分3段),自动循环工作 43
6.2.3 程序分析解释 43
6.2.4 小结 43
6.3.2 源程序文件 44
6.3.3 程序分析解释 45
6.3.4 小结 45
6.4 P1口的8个发光二极管每隔2个右循环点亮实验 46
6.4.1 实现方法 46
6.4.2 源程序文件 46
6.4.3 程序分析解释 46
6.5.1 以累加器为目的操作数 47
6.5.3 以直接地址为目的操作数 47
6.5.2 以寄存器为目的操作数 47
6.5 MCS-51内部的RAM和特殊功能寄存器SFR的数据传送指令 47
6.4.4 小结 47
6.5.4 以寄存器间接地址为目的操作数 48
6.5.5 16位数据传送 48
6.6 “跑马灯”实验 48
6.6.1 实现方法 48
6.6.2 源程序文件 49
6.6.3 程序分析解释 51
6.6.4 小结 53
6.7 单片机的受控输出显示实验 53
6.7.1 实现方法 53
6.7.2 源程序文件 53
6.7.3 程序分析解释 54
6.8 小结 55
7.1 算术运算指令 56
7.1.1 加法指令 56
7.1.2 带进位加法指令 56
7.1.3 带借位减法指令 56
第7章 算术运算指令的学习及实验 56
7.1.4 乘法指令 57
7.1.5 除法指令 57
7.1.6 加1指令 57
7.1.7 减1指令 57
7.2.1 实现方法 58
7.2.2 源程序文件 58
7.2 52H、FCH两数相加实验,结果从P1口输出 58
7.1.8 二-十进制调整指令 58
7.2.3 程序分析解释 59
7.3 FFH、03H两数相乘实验,结果从P0、P1口输出 60
7.3.1 实现方法 60
7.3.2 源程序文件 60
7.3.3 程序分析解释 61
7.4 加1指令实验,让P1口的8个发光二极管模拟二进制的加法运算 61
7.4.1 实现方法 61
7.4.2 源程序文件 61
7.4.3 程序分析解释 62
7.5 加1指令实验(不进行二-十进制调整) 62
7.5.1 实现方法 62
7.5.2 源程序文件 63
7.6.2 源程序文件 64
7.6.1 实现方法 64
7.5.3 程序分析解释 64
7.6 加1指令实验(进行二-十进制调整) 64
7.6.3 程序分析解释 65
7.7 小结 66
第8章 逻辑运算指令的学习及实验 67
8.1 逻辑运算指令 67
8.1.1 累加器A取反指令 67
8.1.2 累加器A清0指令 67
8.1.3 逻辑“与”指令 67
8.1.4 逻辑“或”指令 68
8.1.5 逻辑“异或”指令 68
8.1.6 循环移位指令 68
8.2.1 实现方法 69
8.2.2 源程序文件 69
8.1.7 累加器半字节交换指令 69
8.2 逻辑运算举例一 69
8.2.3 程序分析解释 71
8.3 逻辑运算举例二 72
8.3.1 实现方法 72
8.3.2 源程序文件 72
8.3.3 程序分析解释 73
8.4 逻辑运算举例三 73
8.4.1 实现方法 74
8.4.2 源程序文件 74
8.4.3 程序分析解释 74
8.5 小结 75
9.1 控制转移类指令 76
9.1.1 无条件转移指令 76
第9章 控制转移类指令的学习及实验 76
9.1.2 条件转移指令 77
9.1.3 比较转移指令 77
9.1.4 循环转移指令 78
9.1.5 子程序调用及返回指令 78
9.2 散转程序实验 79
9.2.1 实现方法 79
9.2.2 源程序文件 80
9.2.3 程序分析解释 82
9.2.4 小结 83
9.3.2 源程序文件 84
9.3 统计含58H关键字的实验 84
9.3.1 实现方法 84
9.3.3 程序分析解释 85
第10章 位操作指令的学习 87
10.1 位操作指令 87
10.1.1 位数据传送指令 87
10.1.2 位控制修正指令 87
10.1.3 位逻辑运算指令 88
10.2 将P1.0的状态传送到P2.0的实验 88
10.2.1 实现方法 88
10.2.2 源程序文件 88
10.2.3 程序分析解释 89
10.3.2 源程序文件 90
10.3.1 实现方法 90
10.3 比较输入数大小的实验 90
10.3.3 程序分析解释 91
10.4 将累加器A中的立即数移出的实验 91
10.4.1 实现方法 92
10.4.2 源程序文件 92
10.4.3 程序分析解释 92
10.5 实现逻辑函数的实验 93
10.5.1 实现方法 93
10.5.2 源程序文件 93
10.5.3 程序分析解释 94
第11章 栈操作指令、空操作指令、伪指令及字节交换指令的学习 94
11.1.2 出栈指令 96
11.2 空操作指令 96
11.1.1 堆栈指令 96
11.1 栈操作指令 96
11.3 伪指令 97
11.3.1 汇编起始命令 97
11.3.2 汇编结束命令 97
11.3.3 等值命令 97
11.3.4 定义字节命令 98
11.3.5 定义字命令 98
11.3.6 预留存储区命令 99
11.3.7 定义位命令 99
11.3.8 定义数据地址命令 99
11.4 字节交换指令 99
11.5.2 源程序文件 100
11.5 查0~9平方表实验 100
11.5.1 实现方法 100
11.5.3 程序分析解释 102
11.6 利用NOP指令产生精确方波实验 104
11.6.1 实现方法 104
11.6.2 源程序文件 104
11.6.3 程序分析解释 106
11.7 MCS-51指令分类表 107
第12章 定时器/计数器及实验 111
12.1 定时器/计数器的结构及工作原理 111
12.2 定时器/计数器方式寄存器和控制寄存器 112
12.3 定时器/计数器的工作方式 113
12.3.1 方式0 113
12.3.2 方式1 114
12.3.3 方式2 115
12.3.4 方式3 115
12.4 定时器/计数器的初始化 116
12.5 蜂鸣器发音实验 117
12.5.1 实现方法 117
12.5.2 源程序文件 117
12.5.3 程序分析解释 118
12.6 定时器T1方式2计数实验 118
12.6.1 实现方法 118
12.6.2 源程序文件 119
12.6.3 程序分析解释 119
12.7.1 实现方法 120
12.7.2 源程序文件 120
12.7 定时器T1方式1定时实验 120
12.7.3 程序分析解释 121
第13章 中断系统及实验 124
13.1 中断的种类 124
13.1.1 外中断 124
13.1.2 内中断 124
13.2 MCS-51单片机的中断系统 124
13.2.1 中断源及控制 124
13.2.2 中断响应 127
13.3 令LED输出试验板上的蜂鸣器发出1kHz音频的实验 128
13.3.1 实现方法 128
13.3.3 程序分析解释 129
13.3.2 源程序文件 129
13.4 利用外中断方式进行数据采集实验 130
13.4.1 实现方法 130
13.4.2 源程序文件 130
13.4.3 程序分析解释 131
13.5 中断嵌套实验 132
13.5.1 实现方法 132
13.5.2 源程序文件 132
13.5.3 程序分析解释 133
13.6 交通灯控制器实验 134
13.6.1 实现方法 134
13.6.2 源程序文件 134
13.6.3 程序分析解释 136
13.7.2 源程序文件 138
13.7 键控计数实验 138
13.7.1 实现方法 138
13.7.3 程序分析解释 139
第14章 汇编语言的程序设计及实验 141
14.1 单片机应用系统的设计过程 141
14.2 汇编语言程序设计步骤 142
14.3 顺序程序设计 142
14.4 右移循环流水灯实验 143
14.4.1 实现方法 143
14.4.2 源程序文件 143
14.4.3 程序分析解释 144
14.6 找数据块中最大数的实验 145
14.6.1 实现方法 145
14.5 循环程序设计 145
14.6.2 源程序文件 146
14.6.3 程序分析解释 147
14.7 延时子程序的结构 148
14.8 寻找ASCII码“$”的实验 149
14.8.1 实现方法 149
14.8.2 源程序文件 149
14.8.3 程序分析解释 150
14.9 子程序设计、调用及返回 151
14.9.1 子程序的结构特点 151
14.9.2 编写子程序时的注意要点 151
14.10.2 源程序文件 152
14.10.1 实现方法 152
14.10 使P0口的8个LED闪烁20次实验 152
14.9.4 子程序嵌套 152
14.9.3 子程序的调用与返回 152
14.10.3 程序分析解释 153
14.11 分支程序设计 154
14.11.1 单分支程序 154
14.11.2 多分支程序 154
14.12 做简单的+、-、×、÷实验 156
14.12.1 实现方法 156
14.12.2 源程序文件 156
14.12.3 程序分析解释 158
14.13 查表程序设计 160
14.14.2 源程序文件 161
14.14.1 实现方法 161
14.14 单片机演奏音乐的实验 161
14.14.3 程序分析解释 163
14.15 数据排序实验 164
14.15.1 实现方法 164
14.15.2 源程序文件 165
14.15.3 程序分析解释 171
第15章 键盘接口技术及实验 172
15.1 独立式键盘 172
15.2 行列式键盘 173
15.3 独立式键盘接口的编程模式 173
15.4 行列式键盘接口的编程模式 174
15.5 键盘工作方式 174
15.6.2 源程序文件 175
15.6.1 实现方法 175
15.6 独立式键盘输入实验 175
15.6.3 程序分析解释 177
15.7 行列式键盘输入实验 178
15.7.1 实现方法 178
15.7.2 源程序文件 178
15.7.3 程序分析解释 180
15.8 扫描方式的键盘输入实验 181
15.8.1 实现方法 181
15.8.2 源程序文件 181
15.8.3 程序分析解释 182
15.9.1 实现方法 183
15.9.2 源程序文件 183
15.9 定时中断方式的键盘输入实验 183
15.9.3 程序分析解释 184
第16章 LED显示器接口技术及实验 186
16.1 LED数码显示器的构造及特点 186
16.2 LED数码显示器的显示方法 188
16.2.1 静态显示法 188
16.2.2 动态扫描显示法 189
16.3 静态显示实验 190
16.3.1 实现方法 190
16.3.2 源程序文件 190
16.3.3 程序分析解释 191
16.4 慢速动态显示实验 192
16.4.1 源程序文件 192
16.5.1 源程序文件 193
16.4.2 程序分析解释 193
16.5 快速动态显示实验 193
16.5.2 程序分析解释 194
16.6 实时时钟实验 195
16.6.1 实现方法 195
16.6.2 源程序文件 195
16.6.3 程序分析解释 198
第17章 字符型液晶(LCD)模块原理及设计学习 202
17.1 液晶显示器概述 202
17.2 16×2字符型液晶显示模块(LCM)特性 203
17.3 16×2字符型液晶显示模块(LCM)引脚及功能 203
17.4 16×2字符型液晶显示模块(LCM)的内部结构 203
17.5 液晶显示控制驱动集成电路HD44780特点 204
17.6 HD44780工作原理 205
17.6.1 DDRAM——数据显示用RAM 206
17.6.2 CGROM——字符产生器ROM 207
17.6.3 CGRAM——字型、字符产生器RAM 208
17.6.4 IR——指令寄存器 209
17.6.5 DR——数据寄存器 209
17.6.6 BF——忙碌标志信号 209
17.6.7 AC——地址计数器 209
17.7 LCD控制器的指令 209
17.7.1 清除显示器 210
17.7.2 光标归位设定 210
17.7.3 设定字符进入模式 210
17.7.4 显示器开关 210
17.7.8 DDRAM地址设定 211
17.7.7 CGRAM地址设定 211
17.7.5 显示光标移位 211
17.7.6 功能设定 211
17.7.9 忙碌标志BF或AC地址读取 212
17.7.10 写数据到CGRAM或DDRAM中 212
17.7.11 从CGRAM或DDRAM中读取数据 212
17.8 LCM工作时序 212
17.9 单片机驱动LCM的电路 213
第18章 体验第一个液晶程序的效果并建立模块化设计的相关子程序 215
18.1 体验第一个液晶程序的效果 215
18.1.1 源程序文件 215
18.1.2 程序分析解释 218
18.2.2 程序分析解释 222
18.2.1 源程序文件 222
18.2 查询忙碌标志信号子程序 222
18.3 写指令到LCM(IR寄存器)子程序 223
18.3.1 源程序文件 223
18.3.2 程序分析解释 223
18.4 写数据到LCM(DR寄存器)子程序 223
18.4.1 源程序文件 223
18.4.2 程序分析解释 224
18.5 清除显示屏子程序 224
18.5.1 源程序文件 224
18.5.2 程序分析解释 224
18.6 启动LCM子程序 224
18.6.2 程序分析解释 225
18.6.1 源程序文件 225
18.7.1 源程序文件 227
18.7 让字母“F”在显示屏的第2行第10列显示 227
18.7.2 程序分析解释 228
18.8 使LCM显示2行字符串(英文信息) 229
18.8.1 源程序文件 229
18.8.2 程序分析解释 232
18.9 使LCM显示2行字符串(英文信息)并循环移动 233
18.9.1 源程序文件 233
18.9.2 程序分析解释 235
19.1.1 实现方法 238
19.1.2 源程序文件 238
19.1 工业生产自动计数器 238
第19章 简单的液晶显示型自动化仪器的设计学习及实验 238
19.1.3 程序分析解释 246
19.2 设备运行状态自动显示器 249
19.2.1 实现方法 250
19.2.2 源程序文件 250
19.2.3 程序分析解释 253
19.3 液晶显示计时时钟 254
19.3.1 源程序文件 254
19.3.2 程序分析解释 260
19.4 让液晶显示屏显示自制图形“中” 264
19.4.1 实现方法 264
19.4.2 源程序文件 264
19.4.3 程序分析解释 266
19.5.2 源程序文件 268
19.5 液晶显示屏显示复杂的自制图形 268
19.5.1 实现方法 268
19.5.3 程序分析解释 271
第20章 Keil C51集成开发环境的设置及调试方法 273
20.1 工程项目的建立、源程序文件的建立及加载 273
20.1.1 建立工程文件 274
20.1.2 源程序文件的建立 276
20.1.3 添加文件到当前项目组中 278
20.2 工程的详细设置 280
20.2.1 Target页面 280
20.2.2 Output页面 281
20.2.3 Listing页面 282
20.2.4 C51页面 283
20.2.5 Debug页面 284
20.3 编译、连接 285
20.4 Keil C51集成开发环境软件的调试方法 286
20.4.1 常用调试命令 286
20.4.2 断点设置 286
20.4.3 在线汇编 287
20.4.4 程序调试时的常用窗口 287
20.5 外围接口工具 289
20.5.1 P1口作为输入端口 289
20.5.2 P1口作为输出端口 290
20.5.3 外部中断INT0 291
20.5.4 定时器/计数器0 292