第1章 C51程序设计简介 1
1.1 C51程序特点 1
1.2 C51开发流程 1
1.3 C51编程规范 2
1.4 常用C51编程软件Keil C51 2
1.4.1 安装Keil C51软件 3
1.4.2 Keil C51软件的使用 5
第2章 C51程序设计基础 9
2.1 标识符 9
2.2 关键字 9
2.3 数据类型 10
2.3.1 整型(int) 11
2.3.2 浮点型(float) 12
2.3.3 字符型(char) 12
2.3.4 指针型(*) 13
2.3.5 无值型(void) 13
2.4 变量的作用域 13
2.4.1 自动型变量 14
2.4.2 外部型变量 14
2.4.3 静态型变量 15
2.4.4 寄存器型变量 16
2.5 const修饰符 16
2.6 C51的分隔符 16
2.6.1 “[]”分隔符 17
2.6.2 “()”分隔符 17
2.6.3 “{}”分隔符 17
2.6.4 “,”分隔符 17
2.6.5 “:”分隔符 17
2.6.6 “;”分隔符 18
2.6.7 “…”分隔符 18
2.6.8 “*”分隔符 18
2.6.9 “=”分隔符 18
2.6.10 “#”分隔符 18
2.6.11 “^”分隔符 18
2.7 运算符与表达式 19
2.7.1 赋值运算符 19
2.7.2 算术运算符 19
2.7.3 逻辑运算符 21
2.7.4 关系运算符 22
2.7.5 增量和减量运算符 22
2.7.6 位运算符 23
2.7.7 复合赋值运算符 24
2.7.8 逗号运算符 25
2.7.9 条件运算符 25
2.7.10 指针和地址运算符 26
2.7.11 sizeof运算符 26
第3章 C51语句 28
3.1 C51语句的流程与控制 28
3.1.1 顺序结构(sequence) 28
3.1.2 选择结构(selection) 28
3.1.3 循环结构(repetition) 28
3.1.4 自顶向下设计方法 29
3.2 说明语句 29
3.3 表达式语句 29
3.4 复合语句 30
3.5 条件语句 31
3.6 开关与跳转语句 33
3.6.1 开关语句 33
3.6.2 跳转语句 36
3.7 循环控制语句 38
3.7.1 for循环 38
3.7.2 while循环 39
3.7.3 do-while循环 40
3.8 函数调用语句 41
3.9 空语句 41
第4章 C51函数 43
4.1 函数的定义 43
4.2 函数说明 44
4.3 C51函数的调用 45
4.3.1 函数的参数传递 46
4.3.2 递归函数的调用 46
4.3.3 数组作为函数参数 47
4.3.4 用函数指针调用函数 48
4.3.5 嵌套函数的调用 48
4.4 重入函数 49
4.5 main函数 49
4.6 函数的重载 50
4.7 函数作用域 51
4.7.1 局部变量 51
4.7.2 全局变量 52
4.8 内部函数和外部函数 52
4.8.1 内部函数 52
4.8.2 外部函数 53
4.9 中断函数 53
4.9.1 内部中断函数的使用 54
4.9.2 外部中断函数的使用 55
第5章 C51数据结构 56
5.1 C51结构 56
5.1.1 结构体类型的定义 56
5.1.2 结构体变量的定义 59
5.1.3 结构体的初始化 59
5.1.4 结构体变量成员的引用 61
5.1.5 结构的嵌套 62
5.1.6 位结构 62
5.2 数组 63
5.2.1 一维数组的定义和初始化 63
5.2.2 一维数组元素的下标法引用 66
5.2.3 字符数组的输入和输出 67
5.2.4 二维数组的定义和初始化 69
5.2.5 结构体数组 71
5.3 联合与枚举 73
5.3.1 联合(union) 73
5.3.2 枚举 75
5.4 类型说明 75
5.5 指针 76
5.5.1 指针的基本概念 76
5.5.2 数组元素的指针法引用 78
5.5.3 二维数组的指针 80
5.5.4 二级指针变量 80
5.5.5 指针数组 81
5.5.6 结构指针 81
5.5.7 特定寄存器指针和通用指针 82
第6章 存储结构 85
6.1 C51存储类型 85
6.1.1 存储模式 87
6.1.2 存储空间 88
6.2 80C51单片机的存储器结构 89
6.3 C51支持的指针类型 93
6.4 内存分配 94
6.4.1 内存分配方法 94
6.4.2 动态分配内存 95
6.5 位操作 95
6.5.1 位操作指令 96
6.5.2 字段结构 97
6.6 访问绝对地址 98
第7章 预处理 100
7.1 文件包含 100
7.2 宏定义 101
7.2.1 无参宏定义 101
7.2.2 带参宏定义 103
7.2.3 #运算符 104
7.3 预处理指令 105
7.4 头文件 107
第8章 Keil C51编译环境μVision3 115
8.1 Keil μVision3工作界面 115
8.1.1 Keil μVision3的菜单栏 115
8.1.2 Keil μVision3的工具栏 123
8.2 工程设置 124
第9章 Keil C51编译 127
9.1 Keil C51编译环境μVision3 127
9.2 编译过程 127
9.2.1 编译步骤 129
9.2.2 编译过程产生的映像文件 131
9.3 Keil C51编译器的控制命令 132
9.4 定制文件 133
9.4.1 STARTUP.A51 133
9.4.2 INIT.A51 134
9.4.3 XBANKING.A51 134
9.4.4 LIB目录中的C文件 136
9.5 优化器 136
9.5.1 8051特定优化 137
9.5.2 代码生成选项 137
9.6 C程序和汇编的接口 137
9.6.1 函数参数 137
9.6.2 用固定存储区传递参数 137
9.6.3 通过寄存器传递参数 137
9.6.4 函数返回值 138
9.6.5 使用SRC控制指令 138
9.6.6 C程序传递参数给汇编程序 141
9.7 C程序和PL/M-51的接口 141
9.8 μVision其他编译功能 141
9.8.1 在多个文件中查找 142
9.8.2 Source Browser(资源浏览器) 142
9.8.3 对话框工具 143
9.9 编译器限制 143
9.10 使用错误信息 144
9.10.1 语法和语义错误 144
9.10.2 警告 144
第10章 Keil C51调试 146
10.1 μVision3调试器 146
10.2 断点 147
10.3 在线编译 152
10.4 实例演示 152
第11章 Keil C51仿真 159
11.1 Keil C51的一些仿真窗口 159
11.1.1 模拟仿真单片机的外设接口 159
11.1.2 逻辑分析窗口 171
11.1.3 性能分析窗口 174
11.2 Monitor 51 176
11.3 利用开发板和仿真器进行仿真 177
11.3.1 SHX-51A型开发板 177
11.3.2 SHX-C51仿真器 188
第12章 C51在RTX-51实时操作系统的应用 190
12.1 操作系统概述 190
12.1.1 操作系统的类型 190
12.1.2 操作系统的功能 191
12.1.3 实时操作系统(Real Time OS) 191
12.2 RTX-51系统概述 192
12.2.1 单任务程序 192
12.2.2 时间片轮转程序 192
12.2.3 用RTX-51进行循环调度 193
12.2.4 RTX-51事件 193
12.2.5 os wait函数 194
12.2.6 RTX-51的技术数据 194
12.3 RTX-51系统函数 195
12.4 RTX-51系统调试 195
12.5 RTX-51系统应用实例 196
12.5.1 交通灯控制器命令 197
12.5.2 应用程序 197
12.5.3 TRAFFIC工程 206
12.5.4 运行TRAFFIC程序 207
12.5.5 RTX内核调试 208
第13章 C51程序设计综合实例 209
13.1 八位7段数码管动态显示 209
13.1.1 实例说明 209
13.1.2 八位7段数码管工作原理分析 209
13.1.3 硬件电路设计 210
13.1.4 软件设计 211
13.2 单片机实现12864的液晶显示 213
13.2.1 实例说明 213
13.2.2 设计思路分析 213
13.2.3 硬件电路设计 216
13.2.4 软件设计 220
13.3 单片机实现4×4矩阵键盘识别技术 224
13.3.1 实例说明 224
13.3.2 设计思路分析 224
13.3.3 硬件电路设计 225
13.3.4 软件设计 227
13.4 基于MAX232的RS-232串口通信 230
13.4.1 串行通信 230
13.4.2 芯片选取 231
13.4.3 芯片工作原理 232
13.4.4 硬件电路设计 233
13.4.5 软件设计 233
13.5 基于MAX527的串行D/A转换 235
13.5.1 设计思路分析 235
13.5.2 芯片选取 237
13.5.3 芯片的工作原理 238
13.5.4 硬件电路 239
13.5.5 软件设计 239
13.6 LED流水灯显示 240
13.6.1 实例说明 241
13.6.2 流水灯及LED工作原理分析 241
13.6.3 硬件电路设计 241
13.6.4 程序说明 242
13.7 基于MAX197的并行A/D转换实例 242
13.7.1 实例说明 242
13.7.2 设计思路分析 243
13.7.3 硬件电路设计 245
13.7.4 软件设计 249
13.8 基于RTL8019AS实现以太网通讯 252
13.8.1 芯片选取 253
13.8.2 芯片工作原理 256
13.8.3 硬件电路设计 258
13.8.4 软件设计 259
13.9 单片机实现智能信号发生器 263
13.9.1 实例说明 263
13.9.2 MAX038信号发生芯片 263
13.9.3 硬件电路设计 265
13.9.4 软件设计 266
13.10 单片机实现简单音乐发生器 268
13.10.1 实例说明 269
13.10.2 设计思路分析 269
13.10.3 硬件电路设计 271
13.10.4 软件设计 273
13.11 RS-485总线现场监控系统 276
13.11.1 实例说明 277
13.11.2 RS-485总线工作原理分析 277
13.11.3 硬件电路设计 277
13.11.4 软件设计 279
13.12 单片机实现语音录放 285
13.12.1 实例说明 285
13.12.2 语音芯片工作原理 286
13.12.3 硬件电路设计 286
13.12.4 软件设计 288
13.13 单片机时钟设计 291
13.13.1 实例说明 291
13.13.2 设计思路 291
13.13.3 软件设计 291
13.14 基于T6369C液晶显示控制器的单片机接口 299
13.14.1 实例说明 299
13.14.2 芯片介绍 299
13.14.3 硬件电路设计 305
13.14.4 软件设计 306
13.15 非接触式IC卡读写 319
13.15.1 实例说明 320
13.15.2 射频IC卡和卡片读写器原理 320
13.15.3 硬件电路设计 320
13.15.4 软件设计 322
13.16 基于MPX4105的数字气压计设计 331
13.16.1 实例说明 331
13.16.2 应用芯片介绍 332
13.16.3 硬件电路设计 335
13.16.4 软件设计 336
附录A 致命错误信息 339
附录B 语法和语义错误信息 342
附录C 警告信息 356
附录D L51连接定位器使用错误提示 359
附录E μVision3调试命令 367
附录F C51库函数 389