第1章 单片机概述 1
1.1什么是单片机 1
1.2单片机的发展历史 1
1.3单片机的特点 2
1.4单片机的应用 3
1.5单片机的发展趋势 4
1.6 MCS-51系列与AT89S5x系列单片机 5
1.6.1 MCS-51系列单片机 5
1.6.2 AT89系列单片机 6
1.6.3 AT89系列单片机的型号说明 8
1.7各种衍生品种的51单片机 9
1.7.1 STC系列单片机 9
1.7.2 C8051F × × ×单片机 10
1.7.3 ADμC812单片机 10
1.7.4华邦W77系列、W78系列单片机 11
1.8 PIC系列单片机与AVR系列单片机 11
1.8.1 PIC系列单片机 11
1.8.2 AVR系列单片机 12
1.9其他的嵌入式处理器简介 13
1.9.1嵌入式DSP处理器 13
1.9.2嵌入式微处理器 14
思考题及习题1 14
第2章 AT89S51单片机硬件结构 16
2.1 AT89S51单片机的硬件组成 16
2.2 AT89S51的引脚功能 17
2.2.1电源及时钟引脚 18
2.2.2控制引脚 18
2.2.3并行I/O口引脚 19
2.3 AT89S51的CPU 20
2.3.1运算器 20
2.3.2控制器 22
2.4 AT89S51单片机存储器的结构 22
2.4.1程序存储器空间 23
2.4.2数据存储器空间 24
2.4.3特殊功能寄存器 25
2.4.4位地址空间 28
2.5 AT89S51单片机的并行I/O端口 29
2.5.1 P0口 29
2.5.2 P1口 31
2.5.3 P2口 31
2.5.4 P3口 32
2.6时钟电路与时序 33
2.6.1时钟电路设计 33
2.6.2机器周期、指令周期与指令时序 35
2.7复位操作和复位电路 35
2.7.1复位操作 35
2.7.2复位电路设计 36
2.8看门狗定时器(WDT)的使用 37
2.9低功耗节电模式 38
2.9.1空闲模式 39
2.9.2掉电运行模式 39
思考题及习题2 40
第3章 C51语言编程基础与KeilμVision3的使用 42
3.1C51编程语言简介 42
3.1.1 C51语言与汇编语言的比较 42
3.1.2 C51语言与标准C语言的比较 42
3.2 C51语言程序设计基础 43
3.2.1 C51语言中的数据类型与存储类型 43
3.2.2 C51语言的特殊功能寄存器及位变量定义 48
3.2.3 C51语言的绝对地址访问 50
3.2.4 C51的基本运算 52
3.2.5 C51的分支与循环程序结构 55
3.2.6 C51的数组 62
3.2.7 C51的指针 65
3.3 C51语言的函数 66
3.3.1函数的分类 67
3.3.2函数的参数与返回值 68
3.3.3函数的调用 69
3.3.4中断服务函数 70
3.3.5变量及存储方式 70
3.3.6宏定义与文件包含 71
3.3.7库函数 72
3.4 Keil μVision3环境下的C51程序开发 72
3.4.1 Keil μVision3的基本操作 73
3.4.2添加用户源程序文件 75
3.4.3程序的编译与调试 77
3.4.4工程的设置 80
思考题及习题3 83
第4章 虚拟仿真开发工具Proteus的使用 84
4.1 Proteus功能概述 84
4.2 Proteus ISIS的虚拟仿真 85
4.3 Proteus ISIS环境简介 86
4.3.1 ISIS各窗口简介 86
4.3.2主菜单栏 87
4.3.3主工具栏 91
4.3.4工具箱 93
4.3.5仿真工具栏 95
4.3.6元件列表 95
4.3.7预览窗口 96
4.3.8原理图编辑窗口 96
4.4 Proteus ISIS的编辑环境设置 97
4.4.1选择模板 97
4.4.2选择图纸 98
4.4.3设置文本编辑器 98
4.4.4设置网格 98
4.5 Proteus ISIS的系统运行环境设置 98
4.6单片机应用系统的Proteus虚拟设计与仿真 99
4.6.1虚拟设计与仿真步骤 99
4.6.2新建或打开一个设计文件 100
4.6.3选择需要的元件到元件列表 102
4.6.4放置元件并连接电路 103
4.6.5加载目标代码文件、设置时钟频率及仿真运行 107
4.7 Proteus与μVision3的联调 108
思考题及习题4 110
第5章 单片机与显示器件及开关、键盘的接口设计 111
5.1单片机控制发光二极管显示 111
5.1.1单片机与发光二极管的连接 111
5.1.2 I/O端口的C51编程控制 112
5.2开关状态检测 115
5.2.1开关检测案例1 116
5.2.2开关检测案例2 117
5.3单片机控制LED数码管的显示 118
5.3.1 LED数码管的显示原理 118
5.3.2 LED数码管的静态显示与动态显示 120
5.4单片机控制LED点阵显示器显示 124
5.4.1 LED点阵显示器的结构与显示原理 124
5.4.2控制16 × 16 LED点阵显示屏的案例 125
5.5单片机控制液晶显示模块1602 LCD的显示 128
5.5.1 LCD 1602液晶显示模块简介 128
5.5.2单片机控制字符型LCD 1602显示案例 135
5.6键盘接口设计 139
5.6.1键盘接口设计应解决的问题 139
5.6.2独立式键盘接口设计案例 140
5.6.3矩阵式键盘接口设计案例 147
5.6.4非编码键盘扫描方式的选择 150
5.6.5专用键盘/显示器芯片HD7279的接口设计 151
思考题及习题5 163
第6章 AT89S51单片机的中断系统 164
6.1 AT89S51中断技术概述 164
6.2 AT89S51中断系统结构 164
6.2.1中断请求源 165
6.2.2中断请求标志寄存器 165
6.3中断允许与中断优先级的控制 167
6.3.1中断允许寄存器IE 167
6.3.2中断优先级寄存器IP 168
6.4响应中断请求的条件 169
6.5外部中断的响应时间 170
6.6外部中断的触发方式选择 171
6.6.1电平触发方式 171
6.6.2跳沿触发方式 171
6.7中断请求的撤销 171
6.8中断函数 172
6.9中断系统应用举例 174
6.9.1单一外中断的应用 174
6.9.2两个外中断的应用 175
6.9.3中断嵌套的应用 177
思考题及习题6 178
第7章 AT89S51单片机的定时器/计数器 180
7.1定时器/计数器的结构 180
7.1.1工作方式控制寄存器TMOD 180
7.1.2定时器/计数器控制寄存器TCON 181
7.2定时器/计数器的4种工作方式 182
7.2.1方式0 182
7.2.2方式1 183
7.2.3方式2 183
7.2.4方式3 184
7.3对外部输入的计数信号的要求 186
7.4定时器/计数器的编程和应用 186
7.4.1 P1口控制8只LED每0.5s闪亮一次 186
7.4.2计数器的应用 188
7.4.3控制P1.0产生周期为2 ms的方波 189
7.4.4利用T1控制发出1kHz的音频信号 191
7.4.5 LED数码管秒表的制作 193
7.4.6测量脉冲宽度——门控位GATEx的应用 195
7.4.7 LCD时钟的设计 198
思考题及习题7 201
第8章 AT89S51单片机的串行口 202
8.1串行口的结构 202
8.1.1串行口控制寄存器SCON 202
8.1.2特殊功能寄存器PCON 204
8.2串行口的4种工作方式 204
8.2.1方式0 204
8.2.2方式1 209
8.2.3方式2 210
8.2.4方式3 211
8.3多机通信 212
8.4波特率的制定方法 213
8.4.1波特率的定义 213
8.4.2定时器T1产生波特率的计算 213
8.5串行口应用设计案例 215
8.5.1各种串行通信接口标准 215
8.5.2方式1的应用设计 217
8.5.3方式2和方式3的应用设计 225
8.5.4多机通信的应用设计 227
8.5.5单片机与PC机串行通信的设计 234
8.5.6 PC机与单片机或与多个单片机的串行通信 239
思考题及习题8 240
第9章 AT89S51单片机的并行扩展技术 242
9.1系统并行扩展概述 242
9.1.1系统并行扩展结构 242
9.1.2地址空间分配 243
9.1.3外部地址锁存器 246
9.2外部程序存储器EPROM的并行扩展 247
9.2.1常用的EPROM芯片 248
9.2.2 AT89S51扩展EPROM的接口设计 249
9.2.3片内Flash存储器的编程 251
9.3外部数据存储器RAM的并行扩展 255
9.3.1常用的静态RAM (SRAM)芯片 255
9.3.2并行扩展RAM的接口设计 256
9.4 AT89S51扩展并行I/O芯片82C55的设计 258
9.4.1I/O接口扩展概述 258
9.4.2并行I/O芯片82C55简介 259
9.4.3 82C55的3种工作方式 263
9.4.4 AT89S51单片机与82C55的接口设计 267
9.5利用74LSTTL电路扩展并行I/O口 269
9.6用AT89S51单片机的串行口扩展并行输入/输出口 270
9.6.1用74LS165扩展并行输入口 270
9.6.2用74LS164扩展并行输出口 272
9.7用I/O口控制的扬声器报警接口 273
思考题及习题9 274
第10章 AT89S51单片机与DAC、ADC的接口 277
10.1AT89S51单片机扩展DAC0832 277
10.1.1 D/A转换器概述 277
10.1.2 8位并行DAC0832简介 278
10.1.3案例:DAC0832实现数字调压 280
10.1.4案例:波形发生器的制作 281
10.1.5案例:两片DAC0832双缓冲方式驱动X-Y绘图仪 287
10.1.6 DAC0832的双极性输出 290
10.2 AT89S51扩展10位串行DAC-TLC5615 291
10.2.1串行DACTLC5615简介 291
10.2.2案例:单片机与串行DACTLC5615的接口设计 292
10.3 AT89S51单片机与ADC0809的接口设计 295
10.3.1 A/D转换器简介 295
10.3.2 AT89S51与逐次比较型8位A/D转换器ADC0809的接口 296
10.3.3案例:单片机控制ADC0809进行A/D转换 297
10.3.4案例:2路输入的数字电压表的设计 299
10.4 AT89S51扩展12位串行ADC-TLC2543的设计 305
10.4.1 TLC2543的特性及工作原理 306
10.4.2案例:单片机扩展TLC2543的接口设计 308
10.5 AT89S51扩展12位并行A/D转换器AD1674的设计 311
10.6高分辨率的并行A/D转换器的选用 316
思考题及习题10 316
第11章 AT89S51单片机系统的串行扩展 318
11.1单总线串行扩展 318
11.1.1单总线器件温度传感器DS 18 B20简介 318
11.1.2设计案例:单总线DS18B20温度测量系统 321
11.2 SPI总线串行扩展 324
11.2.1SPI总线的扩展结构 324
11.2.2设计案例:扩展带有SPI接口的8位串行A/D转换器TLC549 326
11.3 I2C总线的串行扩展 329
11.3.1I2C串行总线系统的基本结构 329
11.3.2 I2C总线的数据传送规定 330
11.3.3 AT89S51的I2C总线扩展系统 333
11.3.4 12C总线数据传送的模拟 334
11.3.5设计案例:采用AT24C02存储器的IC卡设计 338
思考题及习题11 345
第12章 单片机的各种控制与检测应用设计 346
12.1单片机控制步进电机的设计 346
12.1.1控制步进电机的工作原理 346
12.1.2电路设计与编程 346
12.2单片机控制直流电机 348
12.2.1控制直流电机的工作原理 348
12.2.2电路设计与编程 349
12.3电机转速测量 351
12.3.1电机转速测量的工作原理 351
12.3.2电路设计与编程 351
12.4频率计的制作 353
12.4.1工作原理 353
12.4.2电路设计与软件编程 354
12.5基于时钟/日历芯片DS1302的电子钟设计 356
12.5.1 DS1302的工作原理 357
12.5.2电路设计与编程 359
12.6电话拨号的模拟 364
12.6.1模拟电话拨号的设计要求 364
12.6.2电路设计与编程 364
12.7简易音符发生器的制作 369
12.7.1设计要求及工作原理 369
12.7.2电路设计与编程 370
12.8 8位竞赛抢答器设计 373
12.8.1设计要求 373
12.8.2电路设计与仿真 373
12.9电梯运行控制的楼层显示 379
12.9.1工作原理与设计要求 379
12.9.2电路设计与仿真 379
12.10基于热敏电阻的数字温度计设计 384
12.10.1工作原理与技术要求 384
12.10.2电路设计与编程 384
附录1头文件“LCD1602.h”清单 388
附录2头文件“DS1302.h”清单 390
参考文献 395