第1篇 51单片机快速入门篇 2
第1章 单片机的历史和分类 2
1.1单片机名称的由来 2
1.1.1单片机名称的由来 2
1.1.2单片机的特点 3
1.1.3单片机的应用 3
1.2单片机的分类 4
1.2.1按用途分类 4
1.2.2按位数分类 4
1.2.3按系列分类 4
1.3入门级单片机的选择 5
1.3.1入门学习选择什么样的单片机 5
1.3.280C51与AT89C51的区别 5
1.3.3AT89S51与AT89C51的区别 6
第2章 单片机开发环境的建立 7
2.1学习单片机的必备工具 7
2.1.1计算机 7
2.1.2单片机集成开发系统软件 7
2.1.351编程器 8
2.1.4实验板 9
2.2集成开发软件的下载和安装 9
2.2.1从网上免费下载集成开发软件 9
2.2.2MedWin集成开发软件的安装 9
2.3编程器的安装与使用 11
2.3.1编程器的连接 11
2.3.2安装编程器软件 12
2.3.3编程器的使用 12
2.4实验板的使用 13
第3章 单片机程序开发流程 14
3.1编写一个简单的单片机程序 14
3.1.1目的 14
3.1.2工作原理 14
3.1.3用汇编语言编写程序 15
3.2用MedWin开发单片机程序 15
3.2.1编写源程序 15
3.2.2创建项目 16
3.2.3编译/汇编 16
3.2.4输出Intel HEX文件 17
3.3把目标文件写入单片机 17
3.3.1选择单片机型号 17
3.3.2进行擦除 18
3.3.3写入文件 18
3.4在实验板上实验 18
第4章 单片机寄存器 19
4.180C51单片机引脚简介 19
4.2单片机工作的基本条件 20
4.2.1接电源 21
4.2.2接石英晶体振荡器和复位 21
4.2.3单片机内装入程序 21
4.3单片机的存储器 22
4.3.1单元与位 22
4.3.2字、字节和数制 22
4.3.3程序存储器 23
4.3.4数据存储器 24
4.4单片机工作的基本原理 25
4.4.1引脚与寄存器的关系 26
4.4.2单片机中0和1的作用 27
4.4.3工作基本原理 28
第5章 单片机指令 29
5.1学习单片机指令与编程的经验与技巧 29
5.2单片机编程语言概述 31
5.2.1编程语言概述 31
5.2.2单片机使用的编程语言 32
5.2.380C51汇编语言的语句结构 32
5.380C51单片机指令系统 33
5.3.1数据传送类指令 33
5.3.2控制转移类指令 34
5.3.3逻辑运算及移位类指令 34
5.3.4算数运算类指令 35
5.3.5位操作类指令 35
5.4常用的伪指令 35
5.4.1伪指令与80C51指令的不同点 35
5.4.2常用的伪指令 36
第2篇 51单片机典型实例篇 40
第6章 跑马灯 40
6.1点亮一只灯 40
6.1.1硬件设计 40
6.1.2程序设计 41
6.1.3代码详解 41
6.1.4实例测试 43
6.1.5经验总结 43
6.2模拟仿真 43
6.2.1进入模拟仿真状态 43
6.2.2展现观察窗口 44
6.2.3选择调试方式 44
6.2.4观察寄存器值的变化 45
6.3点亮6只灯 46
6.3.1程序设计 46
6.3.2代码详解 46
6.3.3模拟仿真 47
6.3.4实例测试 47
6.3.5经验总结 47
6.4亮灯循环左移 48
6.4.1程序设计 48
6.4.2代码详解 49
6.4.3模拟仿真 50
6.4.4实例测试 50
6.4.5经验总结 50
6.5亮灯循环右移 51
6.5.1程序设计 51
6.5.2代码详解 52
6.5.3模拟仿真 53
6.5.4实例测试 53
6.5.5经验总结 53
6.6延时时间的计算 54
6.6.1机器周期和指令周期 54
6.6.2单重循环短暂延时 54
6.6.3多重循环较长时间延时 55
6.6.4对延时程序的改进 56
6.7亮灯左移与右移循环 56
6.7.1程序设计 57
6.7.2代码详解 58
6.7.3模拟仿真 58
6.7.4实例测试 59
6.7.5经验总结 59
6.8双灯左移右移加闪烁 59
6.8.1程序设计 59
6.8.2代码详解 60
6.8.3模拟仿真 62
6.8.4实例测试 62
6.8.5经验总结 62
6.9用取表方式实现灯移动 63
6.9.1程序设计 64
6.9.2代码详解 65
6.9.3模拟仿真 67
6.9.4实例测试 68
6.9.5经验总结 68
第7章 LED显示 69
7.1数码管工作原理及显示码 69
7.1.1LED数码管结构 69
7.1.2工作原理 70
7.1.3数码管显示码 70
7.2让数码管静态显示6 71
7.2.1硬件设计 71
7.2.2程序设计 71
7.2.3代码详解 72
7.2.4模拟仿真 73
7.2.5实例测试 73
7.2.6经验总结 74
7.3循环显示0~9 74
7.3.1程序设计 74
7.3.2代码详解 75
7.3.3模拟仿真 76
7.3.4实例测试 76
7.3.5经验总结 76
7.4两位数码管显示00~99 76
7.4.1硬件设计 77
7.4.2程序设计 77
7.4.3代码详解 79
7.4.4模拟仿真 81
7.4.5实例测试 81
7.4.6经验总结 81
第8章 键盘控制 82
8.1用8位DIP开关控制LED 82
8.1.1硬件设计 82
8.1.2程序设计 83
8.1.3代码详解 83
8.1.4模拟仿真 84
8.1.5实例测试 84
8.1.6经验总结 84
8.2用4位DIP开关控制数码管显示 84
8.2.1硬件设计 85
8.2.2程序设计 85
8.2.3代码详解 86
8.2.4模拟仿真 88
8.2.5实例测试 88
8.2.6经验总结 88
8.3按键开关控制指示灯 89
8.3.1硬件设计 89
8.3.2程序设计 89
8.3.3代码详解 90
8.3.4模拟仿真 91
8.3.5实例测试 91
8.3.6经验总结 91
8.4键盘控制概述 92
8.4.1按键的特性 92
8.4.2键盘输入中要解决的问题 92
8.4.3独立按键式键盘 93
8.4.4矩阵式按键键盘 93
8.5用独立式键盘控制灯移动 94
8.5.1硬件设计 94
8.5.2程序设计 95
8.5.3代码详解 97
8.5.4模拟仿真 98
8.5.5实例测试 98
8.5.6经验总结 99
8.6用矩阵式键盘控制显示器 99
8.6.1硬件设计 99
8.6.2程序设计 100
8.6.3代码详解 102
8.6.4模拟仿真 106
8.6.5实例测试 106
8.6.6经验总结 106
第9章 中断 107
9.1中断控制功能的作用 107
9.1.1什么是中断 107
9.1.2实现中断的好处 107
9.1.3中断处理过程 108
9.1.4中断源及入口地址 109
9.2中断的控制及设置 110
9.2.1中断允许控制寄存器IE 110
9.2.2中断优先级控制寄存器IP 111
9.2.3定时器控制寄存器TCON 112
9.2.4串行口控制寄存器SCON 112
9.3用外部中断控制灯闪烁 113
9.3.1硬件设计 113
9.3.2程序设计 114
9.3.3代码详解 115
9.3.4模拟仿真 117
9.3.5实例测试 118
9.3.6经验总结 118
9.4用多级外部中断控制灯移动 118
9.4.1硬件设计 118
9.4.2程序设计 119
9.4.3代码详解 121
9.4.4模拟仿真 123
9.4.5实例测试 123
9.4.6经验总结 123
第10章 定时器/计数器 124
10.1定时器/计数器的用途及工作原理 124
10.1.1定时器/计数器的用途 124
10.1.2定时器/计数器的结构 124
10.1.3定时器/计数器的工作原理 125
10.2定时器/计数器的控制寄存器 126
10.2.1工作模式控制寄存器TMOD 126
10.2.2定时器控制寄存器TCON 127
10.2.34种工作模式的特点 128
10.3定时器/计数器的初始化设置 128
10.3.1模式0的初始化步骤 128
10.3.2模式1的初始化步骤 129
10.3.3模式2的初始化步骤 129
10.3.4模式3的初始化步骤 130
10.4使用定时器延时 130
10.4.1硬件设计 130
10.4.2程序设计 131
10.4.3代码详解 132
10.4.4模拟仿真 133
10.4.5实例测试 134
10.4.6经验总结 134
10.5定时器加软件计数延时 134
10.5.1程序设计 134
10.5.2代码详解 136
10.5.3模拟仿真 136
10.5.4实例测试 137
10.5.5经验总结 137
10.6定时与计数演示灯 137
10.6.1硬件设计 137
10.6.2程序设计 138
10.6.3代码详解 139
10.6.4实例测试 140
10.6.5经验总结 140
第11章 音乐发声 141
11.1发声实验 141
11.1.1硬件设计 141
11.1.2程序设计 142
11.1.3代码详解 143
11.1.4模拟仿真 143
11.1.5实例测试 143
11.1.6经验总结 143
11.2变频报警 143
11.2.1程序设计 144
11.2.2代码详解 145
11.2.3模拟仿真 146
11.2.4实例测试 146
11.2.5经验总结 146
11.3歌曲演奏 147
11.3.1编程演奏器原理 147
11.3.2程序设计 149
11.3.3代码详解 151
11.3.4模拟仿真 153
11.3.5实例测试 153
11.3.6经验总结 153
11.4电子琴 154
11.4.1硬件设计 154
11.4.2程序设计 154
11.4.3代码详解 157
11.4.4模拟仿真 158
11.4.5实例测试 158
11.4.6经验总结 158
第12章 串行通信 159
12.1单片机串行通信功能 159
12.1.1单片机串行通信的作用 159
12.1.2串行通信中双方基本约定 159
12.1.3串行口的结构和通信过程 160
12.2串行口的控制 161
12.2.1电源和数据传输率控制寄存器PCON 161
12.2.2串行口控制寄存器SCON 161
12.2.3串行口的4种工作方式 162
12.3扩展8个输出端口 163
12.3.1硬件设计 163
12.3.2程序设计 164
12.3.3代码详解 165
12.3.4模拟仿真 166
12.3.5实例测试 167
12.3.6经验总结 167
12.4扩展8个输入端口 167
12.4.1硬件设计 167
12.4.2程序设计 168
12.4.3代码详解 169
12.4.4模拟仿真 170
12.4.5实例测试 170
12.4.6经验总结 170
12.5向计算机发送一封信 170
12.5.1硬件设计 171
12.5.2程序设计 171
12.5.3代码详解 172
12.5.4模拟仿真 173
12.5.5实例测试 173
12.5.6经验总结 174
第13章 LCD模块及其应用 175
13.1LCD模块 175
13.1.1LCD的分类 175
13.1.2LCD模块的引脚 175
13.1.3寄存器选择及显示器地址 177
13.1.4LCM控制指令 177
13.2一个简单的液晶显示程序 179
13.2.1硬件设计 179
13.2.2程序设计 179
13.2.3代码详解 181
13.2.4实例测试 183
13.2.5经验总结 183
13.3使LCD显示两行字符 183
13.3.1程序设计 184
13.3.2代码详解 186
13.3.3实例测试 187
13.3.4经验总结 187
13.4LCD显示字符串 187
13.4.1程序设计 187
13.4.2代码详解 190
13.4.3实例测试 191
13.4.4经验总结 191
13.5LCD循环显示 191
13.5.1程序设计 191
13.5.2代码详解 194
13.5.3实例测试 196
13.5.4经验总结 196
13.6自编图形显示 196
13.6.1程序设计 197
13.6.2代码详解 200
13.6.3实例测试 201
13.6.4经验总结 201
第14章 AD与DA及其应用 202
14.1信号转换概述 202
14.1.1模拟信号 202
14.1.2数字信号 202
14.1.3信号转换 202
14.2简单DA转换程序 203
14.2.1硬件设计 203
14.2.2程序设计 204
14.2.3代码详解 204
14.2.4实例测试 205
14.2.5经验总结 205
14.3指拔开关控制输出电压 205
14.3.1硬件设计 205
14.3.2程序设计 206
14.3.3代码详解 206
14.3.4模拟仿真 206
14.3.5实例测试 207
14.3.6经验总结 207
14.4DAC输出锯齿波 207
14.4.1程序设计 207
14.4.2代码详解 208
14.4.3模拟仿真 208
14.4.4实例测试 209
14.4.5经验总结 209
14.5单线数字温度传感器 209
14.5.1引脚及其与单片机的连接方式 209
14.5.2DS 18B20的主要特性 210
14.5.3内部结构 210
14.5.4高速暂存存储器 211
14.5.5DS 18B20通信协议 212
14.5.6使用注意事项 212
14.6数字温度计 213
14.6.1硬件设计 213
14.6.2程序设计 214
14.6.3代码详解 218
14.6.4实例测试 219
14.6.5经验总结 219
第15章 步进电机的控制 220
15.1步进电机的工作原理 220
15.1.1步进电机的种类 220
15.1.2步进电机工作原理 221
15.1.3小型步进电机驱动电路 222
15.2步进电机正转 222
15.2.1硬件设计 222
15.2.2程序设计 223
15.2.3代码详解 224
15.2.4模拟仿真 225
15.2.5实例测试 226
15.2.6经验总结 226
15.3步进电机反转 226
15.3.1程序设计 226
15.3.2代码详解 228
15.3.3模拟仿真 228
15.3.4实例测试 229
15.3.5经验总结 229
15.4步进电机转速控制 229
15.4.1程序设计 229
15.4.2代码详解 231
15.4.3模拟仿真 232
15.4.4实例测试 232
15.4.5经验总结 233
15.5开关控制步进电机正反转 233
15.5.1硬件设计 233
15.5.2程序设计 234
15.5.3代码详解 236
15.5.4模拟仿真 238
15.5.5实例测试 239
15.5.6经验总结 239
第3篇 51单片机C语言基础篇 242
第16章 单片机C语言入门 242
16.1C语言与C51 242
16.1.1C语言与C51 242
16.1.2C语言编程的优点 242
16.1.3C语言和汇编语言混合编程 243
16.2学习C51的准备工作 243
16.2.1计算机 243
16.2.251单片机C语言编译器 243
16.2.351编程器和实验板 243
16.3单片机C语言程序开发流程 243
16.4单片机C语言入门实例 244
16.4.1程序工作原理 245
16.4.2源程序 245
16.4.3程序说明 245
16.5单片机C语言编程特点 245
16.5.1程序工作原理 246
16.5.2用两种语言编写 246
16.5.3C语言程序编写特点 247
16.6单片机C程序的基本结构 248
16.6.1主函数 248
16.6.2函数 248
16.6.3头文件 248
16.7C51数据类型、常量与变量 249
16.7.1C51的数据类型 249
16.7.2常量 250
16.7.3变量 251
16.7.4数组 252
16.8C51常用的运算符 252
16.8.1赋值运算符 253
16.8.2增量和减量运算符 253
16.8.3关系运算符 253
16.8.4逻辑运算符 254
16.8.5位运算符 255
16.8.6运算符的运算优先次序 256
16.9C51流程控制语句 257
16.9.1流程结构及其流程图 257
16.9.2流程控制语句按功能分类 258
16.9.3循环语句 258
16.9.4选择语句 260
16.10C51函数 262
16.10.1C51函数定义的一般形式 262
16.10.2C51库函数 264
16.10.3C51中断函数 264
第17章 Keil C51的使用 265
17.1Keil C51的安装 265
17.2用Keil C51开发单片机 266
17.2.1编写源程序 267
17.2.2建立工程项目文件 268
17.2.3产生可执行的HEX文件 272
17.3Keil中的软件仿真 272
17.3.1操作的一般步骤 273
17.3.2仿真举例说明 274
17.3.3几个常用命令使用区别 278
第4篇 51单片机C语言实例篇 280
第18章 节日彩灯设计 280
18.1彩灯闪烁 280
18.1.1硬件设计 280
18.1.2程序设计 281
18.1.3代码详解 282
18.2延时模块 282
18.2.1延时原理 282
18.2.2软件延时 283
18.2.3利用定时器延时 284
18.3彩灯由右向左侧逐渐点亮 284
18.3.1程序设计 284
18.3.2代码详解 285
18.4单组彩灯循环左右移动 286
18.4.1程序设计 286
18.4.2代码详解 287
18.4.3经验总结 289
18.5采用制表方法实现彩灯变化 289
18.5.1程序设计 290
18.5.2代码详解 291
第19章 开关输入设计 292
19.1单开关输入状态指示灯 292
19.1.1硬件设计 292
19.1.2程序设计 293
19.1.3代码详解 293
19.1.4经验总结 294
19.2多路开关输入状态指示灯 294
19.2.1硬件设计 294
19.2.2程序设计 295
19.2.3代码详解 296
19.3多路开关控制灯 297
19.3.1硬件设计 297
19.3.2程序设计 297
19.3.3代码详解 298
19.4按钮开关次数显示灯 299
19.4.1硬件设计 299
19.4.2程序设计 299
19.4.3代码详解 300
19.5一键多功能控制 301
19.5.1程序设计 301
19.5.2代码详解 302
第20章 报警声设计 303
20.1发出1kHz声音 303
20.1.1硬件设计 303
20.1.2程序设计 304
20.1.3代码详解 304
20.2发出嘀、嘀声 305
20.2.1程序设计 305
20.2.2代码详解 306
20.2.3经验总结 306
20.3救护车声 306
20.3.1程序设计 307
20.3.2代码详解 308
20.4闹钟铃声 308
20.4.1程序设计 308
20.4.2代码详解 309
20.4.3经验总结 309
20.5发出20次的报警声 309
20.5.1程序设计 309
20.5.2代码详解 310
20.5.3经验总结 310
20.6警报的同时LED闪烁 310
20.6.1硬件设计 311
20.6.2程序设计 311
20.6.3代码详解 312
第21章 时钟设计综合实例 313
21.1简单时钟设计 313
21.1.1学习单片机时钟设计目的 313
21.1.2时钟结构与原理 314
21.1.3走时功能的设计 315
21.1.4显示部分的设计 317
21.1.5调整时间部分的设计 319
21.1.6喇叭和指示灯等子程序 320
21.1.7时钟主程序 321
21.1.8简单时钟程序清单 323
21.2带定时功能的闹铃时钟设计 330
21.2.1闹钟结构与原理 330
21.2.2闹铃功能主要子程序 331
21.2.3闹钟主程序 334
21.2.4闹钟程序清单 337
21.3带定时和倒计时功能的时钟设计 346
21.3.1结构与原理 347
21.3.2倒计时功能主要子程序 348
21.3.3带倒计时闹钟程序清单 351
21.4简单时钟的C语言程序设计 363
21.4.1时钟结构和使用方法 363
21.4.2走时功能的设计 363
21.4.3显示功能的设计 365
21.4.4调整时间功能的设计 365
21.4.5按键扫描等其他函数 366
21.4.6时钟主函数 367
21.4.7简单时钟C语言程序清单 368
第22章 动手制作单片机实验板 373
22.1制作实验板准备工作 373
22.1.1制作实验板的目的 373
22.1.2制作前的准备工作 374
22.1.3焊接技巧 375
22.2单片机外围常用元器件及其检测方法 376
22.2.1发光二极管和LED数码管 376
22.2.2三极管 378
22.2.3电阻和电容 379
22.3实验板制作过程 382
22.3.1实验板功能简介 382
22.3.2简单稳压电源的制作 383
22.3.3单片机最小系统的制作 385
22.3.4LED数码管显示模块的制作 386
22.3.5其他实验电路的制作 388
22.3.6单片机端口插针座连接线 390