第1章 51系列单片机基础知识(教学视频:33分钟) 15
1.1 51系列单片机概述 15
1.1.1单片机的发展历史 15
1.1.2 51系列单片机简介 16
1.1.3 51系列单片机的应用领域 16
1.1.4 51系列单片机的发展方向 17
1.2典型引脚结构 17
1.2.1电源引脚 18
1.2.2时钟引脚 18
1.2.3并行I/O引脚 19
1.2.4复位引脚 22
1.2.5 ALE/PROG引脚 23
1.2.6 PSEN引脚 23
1.2.7 EA/VPP引脚 23
1.3 51系列单片机内部结构 24
1.4中央处理器结构 26
1.4.1算术逻辑部件(ALU) 26
1.4.2控制器 26
1.4.3通用寄存器 26
1.4.4专用寄存器 27
1.4.5特殊功能寄存器 29
1.5存储器结构 30
1.5.1程序存储器 30
1.5.2扩展外部程序存储器 31
1.5.3数据存储器 31
1.5.4扩展外部数据存储器 33
1.6单片机指令时序 34
1.6.1几个基本概念 34
1.6.2指令执行的时序 35
1.6.3访问外部ROMROM的操作时序 37
1.6.4访问外部RAM的操作时序 38
1.7掉电保护 38
1.8低功耗模式 39
1.8.1省电保持模式 39
1.8.2休眠运行模式 39
1.9小结 40
1.10习题 40
第2章 搭建51单片机开发环境(教学视频:29分钟) 42
2.1搭建51单片机硬件开发系统 42
2.1.1单片机选型 42
2.1.2一个单片机最小开发系统 43
2.2搭建Keil C51软件开发环境 44
2.2.1 Keil μ Vision3简介 44
2.2.2 Keil μ Vision3系统安装需求 45
2.2.3 Keil μ Vision3的安装 45
2.2.4 Keil μ Vision3集成开发环境总揽 46
2.2.5 Keil μ Vision3的菜单栏 47
2.2.6 Keil μ Vision3的工具栏 50
2.2.7 Keil μ Vision3的快捷键 53
2.3小结 53
2.4习题 54
第3章 单片机汇编语言(教学视频:46分钟) 56
3.1单片机汇编语言概述 56
3.1.1单片机汇编语言简介 56
3.1.2简单的单片机汇编语言程序 57
3.2伪指令 57
3.2.1起始伪指令ORG 57
3.2.2结束伪指令END 58
3.2.3等值伪指令EQU 58
3.2.4地址赋值伪指令DATA 58
3.2.5字节保存伪指令DB 58
3.2.6字保存伪指令DW 59
3.2.7空间预留伪指令DS 59
3.2.8位变量伪指令BIT 59
3.3单片机的指令 60
3.3.1单片机指令系统简介 60
3.3.2单片机指令格式 60
3.3.3单片机指令的寻址方式 61
3.3.4 51系列单片机指令集 64
3.5单片机汇编语言的程序结构 69
3.5.1顺序结构 69
3.5.2分支结构 70
3.5.3循环结构 71
3.5.4子程序结构 72
3.5.5查表程序结构 73
3.6 Keil μ Vision3使用单片机汇编程序 74
3.6.1创建项目 74
3.6.2编辑源文件 76
3.6.3编译项目 76
3.6.4仿真调试 77
3.7综合练习 77
3.8小结 79
3.9习题 79
第4章 单片机C51语言基础(教学视频:69分钟) 82
4.1单片机C51语言概述 82
4.1.1单片机C51语言的主要特点 82
4.1.2 “Hello world”程序 82
4.1.3良好的编程规范 83
4.2标识符和关键字 84
4.2.1标识符 84
4.2.2关键字 84
4.3数据类型 86
4.3.1变量和常量 86
4.3.2整型数据 87
4.3.3字符型数据 88
4.3.4浮点型数据 90
4.4分隔符 91
4.5 const修饰符 91
4.6变量作用域 92
4.6.1一般规则 92
4.6.2不同存储类型变量的作用域 93
4.7运算符 95
4.7.1算术运算符 95
4.7.2逻辑运算符 97
4.7.3关系运算符 98
4.7.4位运算符 99
4.7.5特殊运算符 102
4.7.6运算符的优先级 106
4.7.7运算符的结合性 106
4.8表达式 106
4.8.1算术表达式 107
4.8.2赋值表达式 107
4.8.3逗号表达式 108
4.8.4关系和逻辑表达式 108
4.9综合练习 109
4.10小结 110
4.11习题 110
第5章 C51的语句(教学视频:32分钟) 112
5.1声明语句 112
5.2表达式语句 112
5.3复合语句 113
5.4循环语句 114
5.4.1 for语句 114
5.4.2 while语句 115
5.4.3 do-while语句 116
5.5条件语句 117
5.5.1单分支if语句 117
5.5.2双分支if语句 118
5.5.3多分支if语句 119
5.6开关语句 120
5.7跳转语句 121
5.7.1 goto语句 121
5.7.2 break语句 122
5.7.3 continue语句 123
5.8函数调用语句 123
5.9空语句 124
5.10返回语句 124
5.11综合练习 125
5.12小结 126
5.13习题 126
第6章 C51的数组(教学视频:48分钟) 129
6.1数组的声明和表示 129
6.2初始化数组元素 131
6.2.1在声明数组时初始化 131
6.2.2动态初始化 132
6.3一维数组 132
6.3.1一维数组的内存分配 132
6.3.2一维数组的引用 133
6.3.3一维字符串数组 134
6.4二维数组 135
6.4.1二维数组的声明 135
6.4.2二维数组的初始化 136
6.4.3二维数组的内存分配 137
6.4.4二维字符串数组 138
6.5多维数组 139
6.6综合练习 140
6.7小结 141
6.8习题 141
第7章 C51的指针(教学视频:71分钟) 143
7.1地址和指针概述 143
7.2指针变量的声明 143
7.3指针变量的赋值 144
7.3.1在声明时赋值 144
7.3.2动态赋值 144
7.3.3指针变量之间传递 145
7.3.4特殊的指针变量赋值——数组 145
7.3.5特殊的指针变量赋值——字符串 145
7.3.6特殊的指针变量赋值——函数入口 146
7.4指针变量的运算符 146
7.4.1取地址运算符& 146
7.4.2取值运算符 146
7.4.3指针变量的运算 147
7.5特殊的指针类型——数组指针 148
7.5.1指向一维数组的指针 149
7.5.2指向二维数组的指针 150
7.5.3指向一个由n个元素所组成的数组指针 151
7.5.4指针和数组的关系总结 152
7.5.5数组指针和指针数组 153
7.6特殊的指针类型——字符指针 154
7.7综合练习 155
7.8小结 156
7.9习题 156
第8章 C51的结构(教学视频:35分钟) 158
8.1结构的声明 158
8.1.1定义结构 158
8.1.2声明结构变量 159
8.2结构变量的初始化 160
8.3结构变量的使用 162
8.4结构数组 163
8.4.1定义结构数组 163
8.4.2初始化结构数组 164
8.5结构指针 165
8.5.1定义结构指针 165
8.5.2使用结构指针 166
8.5.3指向结构数组的结构指针 167
8.6嵌套结构 168
8.7位结构 169
8.8综合练习 170
8.9小结 171
8.10习题 172
第9章 C51的聚合类型(教学视频:46分钟) 173
9.1联合类型 173
9.1.1联合的定义 173
9.1.2联合变量的声明 173
9.1.3联合变量成员的引用 175
9.1.4联合变量数组 175
9.1.5联合变量指针 176
9.1.6联合和结构的嵌套与区别 177
9.2枚举类型 178
9.2.1定义枚举类型 179
9.2.2声明枚举变量 179
9.2.3枚举变量的赋值和引用 180
9.3类型声明 181
9.4位域 182
9.4.1定义位域 183
9.4.2声明位域变量 184
9.4.3位域变量的引用 184
9.4.4位域指针 185
9.5综合练习 186
9.6小结 187
9.7习题 187
第10章 C51的函数(教学视频:56分钟) 189
10.1函数 189
10.1.1函数概述 189
10.1.2函数的分类 189
10.1.3 main函数 191
10.2函数的声明 191
10.2.1函数声明一 191
10.2.2函数声明二 192
10.2.3函数声明三 193
10.3函数的参数和返回值 194
10.3.1形参和实参 194
10.3.2数组元素作为函数参数 195
10.3.3数组名作为函数参数 196
10.3.4二维数组作为函数参数 196
10.3.5指针变量作为函数参数 197
10.3.6函数的返回值 198
10.4函数的调用 198
10.4.1函数调用的方式 198
10.4.2赋值调用 199
10.4.3引用调用 199
10.4.4递归调用 200
10.4.5嵌套调用 201
10.5作用域 202
10.5.1函数的作用域 202
10.5.2函数代码的作用域 203
10.5.3函数内部变量的作用域 203
10.6 C51常用库函数 203
10.6.1字符函数库 204
10.6.2字符串函数库 216
10.6.3输入/输出函数库 231
10.6.4数学函数库 241
10.6.5标准函数库 246
10.6.6 内部函数库 253
10.7综合练习 256
10.8小结 257
10.9习题 257
第11章 C51的预处理(教学视频:36分钟) 260
11.1预处理命令概述 260
11.2宏定义指令 261
11.2.1 #define指令 261
11.2.2带参数的#define指令 262
11.2.3 #undef指令 263
11.3文件包含指令 264
11.3.1 #include指令 264
11.3.2常用的头文件 265
11.4条件编译指令 266
11.4.1双分支条件编译指令 266
11.4.2多分支条件编译指令 267
11.4.3宏名判断指令 267
11.5其他预处理指令 268
11.5.1 #line指令 269
11.5.2 #error指令 269
11.5.3 #pragma指令 270
11.6综合练习 270
11.7小结 271
11.8习题 271
第12章 C51的存储结构(教学视频:40分钟) 273
12.1单片机存储结构 273
12.1.1 51系列单片机的存储区域 273
12.1.2片内低128字节RAM区 273
12.1.3特殊功能寄存器区(SFR) 274
12.2存储类型 274
12.2.1 data存储类型 274
12.2.2 bdata存储类型 275
12.2.3 idata存储类型 275
12.2.4 pdata存储类型 276
12.2.5 xdata存储类型 276
12.2.6 code存储类型 276
12.2.7 sfr存储类型 277
12.2.8 sfr16存储类型 277
12.2.9 sbit存储类型 277
12.2.10 bit型变量 278
12.3存储模式 278
12.3.1 Small模式 279
12.3.2 Compact模式 279
12.3.3 Large模式 279
12.3.4存储模式的选择 279
12.4存储器指针 280
12.4.1指针存储类型 280
12.4.2存储器指针 281
12.5综合练习 282
12.6小结 283
12.7习题 284
第13章51系列单片机的定时器/计数器(教学视频:53分钟) 286
13.1单片机的定时器/计数器 286
13.1.1定时器/计数器的概述 286
13.1.2定时器/计数器的控制寄存器 287
13.1.3定时器/计数器的初始化 290
13.2定时器/计数器工作模式0及其程序设计 290
13.3定时器/计数器工作模式1及其程序设计 292
13.4定时器/计数器工作模式2及其程序设计 294
13.5定时器/计数器工作模式3及其程序设计 295
13.6综合练习 297
13.7小结 299
13.8习题 299
第14章 51系列单片机的中断系统(教学视频:62分钟) 302
14.1中断系统概述 302
14.1.1中断概述 302
14.1.2中断的典型概念 303
14.2单片机中断的类型 304
14.2.1外部中断源 304
14.2.2定时中断源 304
14.2.3串行中断源 304
14.3中断系统的程序访问 305
14.3.1中断标志控制寄存器TCON 305
14.3.2中断标志控制寄存器SCON 306
14.3.3中断允许标志寄存器IE 306
14.3.4中断优先级标志寄存器IP 307
14.4中断的响应过程 308
14.4.1中断识别 308
14.4.2中断响应 309
14.4.3中断处理 310
14.4.4中断撤离 310
14.5外部中断源及其程序设计 310
14.6定时中断源及其程序设计 311
14.7串行中断源及其程序设计 312
14.8综合练习 313
14.9小结 314
14.10习题 315
第15章 51系列单片机的串行接口(教学视频:66分钟) 317
15.1串行通信概述 317
15.1.1串行通信与并行通信 317
15.1.2异步串行通信与同步串行通信 318
15.1.3异步串行通信的波特率 319
15.1.4串行通信的数据传送方式 319
15.2 51系列单片机的串行接口 320
15.2.1单片机串行接口的内部结构 320
15.2.2串行接口控制寄存器SCON 321
15.2.3波特率选择寄存器PCON 323
15.2.4波特率的程序设计 324
15.3串行接口工作模式0及其程序设计 326
15.4串行接口工作模式1及其程序设计 327
15.5串行接口工作模式2及其程序设计 329
15.6串行接口工作模式3及其程序设计 330
15.7综合练习 331
15.8小结 332
15.9习题 332
第16章 51系列单片机扩展键盘(教学视频:41分钟) 335
16.1键盘的种类 335
16.1.1直接式按键键盘 335
16.1.2阵列式按键键盘 336
16.2键盘的基本原理 337
16.2.1按键编码 337
16.2.2按键确认 337
16.2.3按键消抖 338
16.2.4读取键值 340
16.2.5避免重复响应 340
16.2.6多按键响应 340
16.3键盘程序设计 340
16.3.1直接式按键键盘的查询方式 340
16.3.2阵列式按键键盘的扫描方式 341
16.3.3阵列式按键键盘的线反转方式 344
16.3.4阵列式按键键盘的中断方式 346
16.4单片机扩展键盘实例 348
16.4.1电路原理图 348
16.4.2程序设计 349
16.5综合练习 351
16.6小结 352
16.7习题 353
第17章 51系列单片机的显示接口(教学视频:45分钟) 354
17.1 LED数码管的基本原理 354
17.2单个LED数码管的直接驱动实例 356
17.3静态驱动多个LED数码管实例 358
17.4使用LED驱动器驱动多个LED数码管实例 360
17.4.1 LED驱动器功能简介 360
17.4.2 LED驱动器的数据传输方式 361
17.4.3 LED驱动器的控制寄存器 361
17.4.4使用LED驱动器的电路图 364
17.4.5程序设计 365
17.5综合练习 368
17.6小结 368
17.7习题 369
第18章 51系列单片机扩展I2C接口(教学视频:46分钟) 371
18.1 I2C总线的工作原理 371
18.2 I2C总线的寻址方式 372
18.3 I2C总线的协议 372
18.3.1起始信号 373
18.3.2终止信号 373
18.3.3应答信号 373
18.3.4非应答信号 373
18.3.5总线数据位 373
18.3.6数据写入 374
18.3.7数据读出 374
18.4 I2C总线接口的EEPROM 375
18.5 I2C总线扩展实例——硬件加密 375
18.6综合练习 379
18.7小结 382
18.8习题 382
第19章 51系列单片机与PC的串行通信(教学视频:44分钟) 384
19.1串行通信接口概述 384
19.1.1 RS-232C串行通信接口标准 384
19.1.2 RS-449串行通信接口标准 387
19.1.3 RS-423A串行通信接口标准 388
19.1.4 RS-422A串行通信接口标准 388
19.1.5 RS-485串行通信接口标准 389
19.1.6 20mA电流环串行通信接口 389
19.2串行通信接口芯片 390
19.3单片机与PC的串行通信实例 391
19.3.1电路图 391
19.3.2程序设计 392
19.4综合练习 394
19.5小结 396
19.6习题 396
第20章 51系列单片机的多任务操作系统(教学视频:62分钟) 398
20.1 RTX-51实时多任务操作系统简介 398
20.1.1多任务系统简介 398
20.1.2 RTX-51实时多任务系统 399
20.1.3 RTX-51实时多任务系统特点 399
20.2 RTX-51 Tiny的任务管理 400
20.3 RTX-51 Tiny的系统函数 401
20.3.1信号发送函数isr_sendsignal 401
20.3.2信号标志清除函数os_clear_signal 402
20.3.3任务启动函数os_create_task 402
20.3.4任务删除函数os_delete_task 403
20.3.5当前任务号函数os_running_task_id 403
20.3.6信号发送函数os_send_signal 403
20.3.7等待函数os_wait 404
20.3.8等待函数os_wait1 405
20.3.9等待函数os_wait2 405
20.4 RTX-51与单任务程序的比较 406
20.4.1简单的单任务C51程序 406
20.4.2多任务循环C51程序 407
20.4.3多任务RTX-51程序 408
20.5 RTX-51循环任务调度程序设计 409
20.6 RTX-51事件任务调度程序设计 410
20.7 RTX-51信号任务调度程序设计 411
20.8 RTX-51优先级及抢先任务切换程序设计 412
20.9综合练习 414
20.10小结 414
20.11习题 415