第1章 51单片机的内部模块 1
1.1 51单片机及其应用系统概述 1
1.1.1 51单片机应用系统的构成和设计流程 2
1.1.2 “最小”51单片机应用系统 4
1.2 51单片机内部模块的基础应用 5
1.2.1 内部模块基础 5
1.2.2 并行I/O模块 6
1.2.3 定时计数器模块 7
1.2.4 中断系统和外部中断模块 13
1.2.5 串行通信模块 18
1.3 51单片机内部模块的高级应用 24
1.3.1 使用定时计数器扩展外部中断 24
1.3.2 使用I/O端口模拟串行通信端口 25
1.3.3 串行通信模块的波特率自适应 29
1.3.4 使用软件扩展多级中断应用 32
1.3.5 定时计数器的可控PWM输出 36
第2章 51单片机的常用算法和函数模块 39
2.1 51单片机的库函数基础 39
2.1.1 函数库和头文件分类 39
2.1.2 自定义库 40
2.1.3 库函数的使用 41
2.2 51单片机常用函数模块 41
2.2.1 内部函数_crol_() 41
2.2.2 内部函数_nop_() 42
2.2.3 输入/输出函数putchar() 44
2.2.4 输入/输出函数printf() 45
2.2.5 随机数生成函数rand()和srand() 48
2.3 51单片机的常用算法模块 52
2.3.1 统计字节中1的个数 52
2.3.2 软件延时/定时 53
2.3.3 排序算法 53
第3章 扩展51单片机外围模块的方法 55
3.1 地址—数据总线扩展 55
3.2 串行通信模块扩展 58
3.3 I2C总线扩展 58
3.3.1 I2C总线基础 58
3.3.2 I2C总线接口扩展的驱动库函数 61
3.4 SPI总线扩展 67
3.4.1 SPI总线基础 67
3.4.2 SPI总线接口扩展的驱动库函数 69
3.5 l-wire总线扩展 70
3.5.1 l-wire总线扩展原理 70
3.5.2 l-wire总线扩展的驱动库函数 72
第4章 51单片机的I/O引脚模块 75
4.1 译码器模块 75
4.1.1 译码器模块的应用场合 75
4.1.2 译码器模块的应用基础 76
4.1.3 译码器模块的应用实例——简易流水灯 78
4.2 锁存器模块 79
4.2.1 锁存器模块的应用场合 80
4.2.2 锁存器模块的应用基础 80
4.2.3 锁存器模块的应用实例——秒表 82
4.3 三态门模块 84
4.3.1 三态门模块的应用场合 84
4.3.2 三态门模块的应用基础 84
4.3.3 三态门模块的应用实例——地址输入 86
4.4 串行输入并行输出模块 88
4.4.1 串行输入并行输出模块的应用场合 88
4.4.2 串行输入并行输出模块的应用基础 88
4.4.3 串行输入并行输出模块的应用实例——秒计时 90
4.5 并行输入串行输出模块 93
4.5.1 并行输入串行输出模块的应用场合 93
4.5.2 并行输入串行输出模块的应用基础 93
4.5.3 并行输入串行输出模块的应用实例——读取拨码开关状态 95
4.6 可编程I/O扩展芯片Intel8255 96
4.6.1 可编程I/O扩展芯片Intel8255的应用场合 96
4.6.2 可编程I/O扩展芯片Intel8255的应用基础 97
4.6.3 可编程I/O扩展芯片Intel8255的应用实例——扩展输入/输出 100
4.7 I/O引脚模块的应用实例——电子抽奖系统 102
4.7.1 电子抽奖系统的需求分析 103
4.7.2 电子抽奖系统的电路设计 103
4.7.3 电子抽奖系统的应用代码 105
第5章 51单片机的用户输入通道模块 111
5.1 独立按键 111
5.1.1 独立按键的应用场合 111
5.1.2 独立按键的应用基础 112
5.1.3 独立按键的应用实例——加减计数 113
5.2 拨码开关 116
5.2.1 拨码开关的应用场合 116
5.2.2 拨码开关的应用基础 117
5.2.3 拨码开关的应用实例——开关状态显示 118
5.3 行列扫描键盘 120
5.3.1 行列扫描键盘的应用场合 121
5.3.2 行列扫描键盘的应用基础 121
5.3.3 行列扫描键盘的应用实例 123
5.4 PS/2键盘 126
5.4.1 PS/2键盘的应用场合 126
5.4.2 PS/2键盘的应用基础 126
5.4.3 PS/2键盘的应用实例——扫描码输出 130
5.5 用户输入模块的应用实例——带计时功能的计算器 137
5.5.1 计算器的需求分析 138
5.5.2 计算器的电路设计 139
5.5.3 计算器的应用代码 140
第6章 51单片机的LED显示模块 151
6.1 发光二极管 151
6.1.1 发光二极管的应用场合 151
6.1.2 发光二极管的应用基础 152
6.1.3 发光二极管的应用实例——流水灯 153
6.2 单位数码管 155
6.2.1 单位数码管的应用场合 155
6.2.2 单位数码管的应用基础 155
6.2.3 单位数码管的应用实例——“流水数字”显示 159
6.3 多位数码管 161
6.3.1 多位数码管的应用场合 161
6.3.2 多位数码管的应用基础 161
6.3.3 多位数码管的应用实例——移动数字效果显示 165
6.4 数码管驱动芯片MAX7219 167
6.4.1 数码管驱动芯片MAX7219的应用场合 167
6.4.2 数码管驱动芯片MAX7219的应用基础 168
6.4.3 数码管驱动芯片MAX7219的应用实例——当前日期显示 175
6.5 数码管和键盘驱动芯片CH452 176
6.5.1 数码管和键盘驱动芯片CH452的应用场合 176
6.5.2 数码管和键盘驱动芯片CH452的应用基础 176
6.5.3 数码管和键盘驱动芯片CH452的应用实例——串口数据显示和按键状态返回 190
6.6 LED显示模块的应用实例——简易频率计 193
6.6.1 简易频率计的需求分析 193
6.6.2 简易频率计的电路设计 195
6.6.3 简易频率计的应用代码 196
第7章 51单片机的液晶显示模块 201
7.1 数字字符液晶1602 201
7.1.1 数字字符液晶1602的应用场合 201
7.1.2 数字字符液晶1602的应用基础 202
7.1.3 数字字符液晶1602的应用实例——字符串显示 208
7.2 汉字图形液晶12864 208
7.2.1 汉字图形液晶12864的应用场合 208
7.2.2 汉字图形液晶12864的应用基础 209
7.2.3 汉字图形液晶12864的应用实例——混合显示 215
7.3 点阵显示模块 221
7.3.1 点阵显示模块的应用场合 221
7.3.2 点阵显示模块的应用基础 221
7.3.3 点阵显示模块的应用实例——“流水字符”显示 224
7.4 带字库的汉字图形液晶12864 227
7.4.1 带字库的汉字图形液晶12864的应用场合 227
7.4.2 带字库的汉字图形液晶12864的应用基础 228
7.4.3 带字库的汉字图形液晶12864的应用实例——显示串口接收数据和图形 238
7.5 液晶显示模块的应用实例——俄罗斯方块 242
7.5.1 俄罗斯方块的需求分析 242
7.5.2 俄罗斯方块的电路设计 244
7.5.3 俄罗斯方块的应用代码 245
第8章 51单片机的语音和打印输出模块 259
8.1 蜂鸣器 259
8.1.1 蜂鸣器的应用场合 259
8.1.2 蜂鸣器的应用基础 260
8.1.3 蜂鸣器的应用实例——按键提示音 262
8.2 录放音芯片 264
8.2.1 录放音芯片的应用场合 264
8.2.2 录放音芯片的应用基础 264
8.2.3 录放音芯片的应用实例——录放操作 268
8.3 文本语言芯片 271
8.3.1 文本语音芯片的应用场合 271
8.3.2 文本语音芯片的应用基础 271
8.3.3 文本语音芯片的应用实例——来电提示音 279
8.4 打印机模块 281
8.4.1 打印机模块的应用场合 281
8.4.2 打印机模块的应用基础 281
8.4.3 打印机模块的应用实例——温度打印输出 285
8.5 语音和打印输出的应用实例——简易电子琴 288
8.5.1 简易电子琴的需求分析 288
8.5.2 简易电子琴的电路设计 290
8.5.3 简易电子琴的应用代码 291
第9章 51单片机的驱动和执行机构 297
9.1 三极管 297
9.1.1 三极管的应用场合 297
9.1.2 三极管的应用基础 298
9.1.3 三极管的应用实例——大功率灯泡闪烁 299
9.2 达林顿管 300
9.2.1 达林顿管的应用场合 300
9.2.2 达林顿管的应用基础 300
9.2.3 达林顿管的应用实例——发光二极管流水点亮 302
9.3 光电隔离器 302
9.3.1 光电隔离器的应用场合 303
9.3.2 光电隔离器的应用基础 304
9.3.3 光电隔离器的应用实例 306
9.4 直流电动机 306
9.4.1 直流电动机的应用场合 306
9.4.2 直流电动机的应用基础 306
9.4.3 直流电动机的应用实例——串口控制直流电动机转动 309
9.5 步进电动机 312
9.5.1 步进电动机的应用场合 312
9.5.2 步进电动机的应用基础 312
9.5.3 步进电动机的应用实例——串口控制步进电动机转动 317
9.6 步进电动机驱动模块 321
9.6.1 步进电动机驱动模块的应用场合 321
9.6.2 步进电动机驱动模块的应用基础 321
9.6.3 步进电动机驱动模块的应用实例——按键控制步进电动机转动 323
9.7 继电器 326
9.7.1 继电器的应用场合 327
9.7.2 继电器的应用基础 327
9.7.3 继电器的应用实例——继电器控制 329
9.8 驱动和执行机构的应用实例——天车控制系统 332
9.8.1 天车控制系统的需求分析 332
9.8.2 天车控制系统的电路设计 333
9.8.3 天车控制系统的应用代码 335
第10章 51单片机的A/D模块 339
10.1 A/D模块基础 339
10.1.1 A/D变换的过程 340
10.1.2 A/D变换的应用电路构成 342
10.1.3 A/D变换的保持电路 343
10.1.4 A/D芯片的分类 343
10.1.5 A/D芯片的选择 343
10.1.6 A/D芯片对电源的需求 345
10.2 8位并行8通道A/D芯片 345
10.2.1 ADC0809的应用基础 345
10.2.2 ADC0809的应用实例——串口输出ADC0809多通道模拟信号采集 353
10.3 12位并行8通道A/D芯片 356
10.3.1 MAX197的应用基础 356
10.3.2 MAX197的应用实例——串口输出MAX197多通道模拟信号采集 360
10.4 12位串行多通道A/D芯片 363
10.4.1 TLC2543的应用基础 364
10.4.2 TLC2543的应用实例——串口输出TLC2543多通道模拟信号采集 369
10.5 I2C接口高精度A/D芯片 371
10.5.1 ADS1100的应用基础 371
10.5.2 ADS1100的应用实例 380
10.6 16位串行接口多通道A/D芯片 380
10.6.1 AD977A的应用基础 380
10.6.2 AD977A的应用实例 388
10.7 A/D模块的应用实例——太阳能电池监控模块 388
10.7.1 太阳能电池监控模块的需求分析 388
10.7.2 太阳能电池监控模块的电路设计 389
10.7.3 太阳能电池监控模块的应用代码 393
第11章 51单片机的D/A模块 407
11.1 D/A模块基础 407
11.1.1 D/A转换的过程 407
11.1.2 D/A芯片的分类 409
11.1.3 D/A芯片的选择 409
11.1.4 D/A芯片对电源的需求 410
11.2 8位并行D/A芯片 411
11.2.1 DAC0832的应用基础 411
11.2.2 DAC0832的应用实例——模拟波形输 416
11.3 8位串行D/A芯片 420
11.3.1 MAX517的应用基础 420
11.3.2 MAX517的应用实例——输出正弦波 422
11.4 10位串行D/A芯片 424
11.4.1 TLC5615的应用基础 424
11.4.2 TLC5615的应用实例——输出锯齿波 427
11.5 12位并行D/A芯片 428
11.5.1 MAX527的应用基础 428
11.5.2 MAX527的应用实例 433
11.6 16位串行D/A芯片 433
11.6.1 MAX541的应用基础 433
11.6.2 MAX541的应用实例 436
11.7 串行A/D和D/A芯片 436
11.7.1 PCF8591的应用基础 437
11.7.2 PCF8591的应用实例——AD模拟量采集和DA模拟量输出 440
11.8 信号发生器芯片MAX038 441
11.8.1 MAX038的应用基础 441
11.8.2 MAX038的应用实例 444
11.9 D/A模块的应用实例——简易波形发生器 444
11.9.1 简易波形发生器的需求分析 444
11.9.2 简易波形发生器的电路设计 445
11.9.3 简易波形发生器的应用代码 446
第12章 51单片机的时钟传感器模块 451
12.1 51单片机应用系统中的时钟信息获取 451
12.2 内部定时计数器 452
12.3 并行总线接口时钟模块 453
12.3.1 DS12C887的应用基础 453
12.3.2 DS12C887的应用实例——路灯自动开关控制 461
12.4 I2C总线接口时钟模块 463
12.4.1 PCF8563的应用基础 464
12.4.2 PCF8563的应用实例 472
12.5 SPI总线接口时钟模块 474
12.5.1 DS1302的应用基础 474
12.5.2 DS1302的应用实例——时钟信息读取 479
12.6 时钟传感器模块的应用实例——简单数字时钟 481
12.6.1 简单数字时钟的需求分析 481
12.6.2 简单数字时钟的电路设计 482
12.6.3 简单数字时钟的应用代码 483
第13章 51单片机的温度传感器模块 485
13.1 51单片机应用系统中的温度信息获取 485
13.2 l-wire总线接口温度模块 486
13.2.1 DS18B20的应用基础 487
13.2.2 DS18B20的应用实例——DS18B20温度数据采集 492
13.3 I2C总线接口温度模块 494
13.3.1 DS1621的应用基础 494
13.3.2 DS1621的应用实例——DS1621温度数据采集 498
13.4 SPI总线接口温度模块 500
13.4.1 TC77的应用基础 500
13.4.2 TC77的应用实例 504
13.5 温度传感器模块的应用实例——多点温度采集系统 504
13.5.1 多点温度采集系统的需求分析 505
13.5.2 多点温度采集系统的电路设计 506
13.5.3 多点温度采集系统的应用代码 507
第14章 51单片机的常用其他传感器模块 515
14.1 温度传感器 515
14.1.1 SHT75的应用基础 515
14.1.2 SHT75的应用实例——SHT75湿度和温度数据采集 523
14.2 压力传感器 525
14.2.1 MPX4115的应用基础 525
14.2.2 MPX4115的应用实例 527
14.3 定位传感器 527
14.3.1 数字罗盘基础 527
14.3.2 GPS模块基础 528
14.3.3 NMEA-1083规范 528
14.4 数字罗盘传感器 532
14.4.1 HMR3000的应用基础 532
14.4.2 HMR3000的应用实例——航向、俯仰、横滚数据采集 535
14.5 GPS传感器 537
14.5.1 GARMIN 25LP的应用基础 537
14.5.2 GARMIN 25LP的应用实例——GPS地理信息采集 541
14.6 倾角传感器 545
14.6.1 TS1120的应用基础 546
14.6.2 TS1120的应用实例 548
14.7 超声距离传感器 548
14.7.1 HC-SR04的应用基础 549
14.7.2 HC-SR04的应用实例——距离测量 551
14.8 传感器模块的应用实例——手持倾角仪 554
14.8.1 手持倾角仪的需求分析 554
14.8.2 手持倾角仪的电路设计 554
14.8.3 手持倾角仪的应用代码 556
第15章 51单片机的有线通信模块 567
15.1 51单片机的有线通信模块设计概述 567
15.2 RS-232协议芯片 568
15.2.1 MAX232的应用基础 568
15.2.2 MAX232的应用实例 571
15.3 RS485协议芯片 572
15.3.1 MAX485的应用基础 572
15.3.2 MAX485的应用实例——51单片机和PC进行远程数据交换 574
15.4 RS-422协议芯片 576
15.4.1 MAX491的应用基础 576
15.4.2 MAX491的应用实例 579
15.5 高速光电隔离芯片 579
15.5.1 6N137的应用基础 580
15.5.2 6N137的应用实例 582
15.6 CAN总线芯片 583
15.6.1 SJA1000的应用基础 583
15.6.2 SJA1000的应用实例——串口CAN总线桥 588
15.7 电力线总线芯片 592
15.7.1 SSCP300的应用基础 593
15.7.2 SSCP300的应用实例——SSCP300数据发送和接收 597
15.8 USB通信桥芯片 600
15.8.1 CP2102的应用基础 600
15.8.2 CP2102的应用实例 605
15.9 51单片机应用系统的通信模型和通信协议设计 605
15.9.1 51单片机应用系统的通信模型 606
15.9.2 51单片机应用系统的通信协议设计 606
15.10 有线通信模块的应用实例——远程仓库温度监测系统 607
15.10.1 远程仓库湿度监测系统的需求分析 607
15.10.2 远程仓库湿度监测系统的电路设计 608
15.10.3 远程仓库湿度监测系统的应用代码 609
第16章 51单片机的无线通信模块 613
16.1 51单片机的无线通信模块设计概述 613
16.2 红外芯片 613
16.2.1 红外芯片的应用基础 614
16.2.2 红外芯片的应用实例——红外按键信息解析 621
16.3 433MHz无线通信模块 623
16.3.1 无线通信模块的应用基础 623
16.3.2 无线通信模块的应用实例——PTR8000串口通信桥 633
第17章 51单片机的小容量存储模块 637
17.1 外部单口RAM芯片 637
17.1.1 6264的应用基础 638
17.1.2 6264的应用实例——外部大容量RAM的使用 641
17.2 外部双口RAM芯片 643
17.2.1 IDT7132的应用基础 643
17.2.2 IDT7132的应用实例——使用双口RAM进行双机通信 647
17.3 外部ROM芯片 649
17.3.1 2716的应用基础 649
17.3.2 2716的应用实例 651
17.4 FIFO芯片 651
17.4.1 CY7C419的应用基础 651
17.4.2 CY7C419的应用实例——使用FIFO存放临时数据 654
17.5 I2C总线接口的E2PROM芯片 657
17.5.1 AT24系列芯片的应用基础 658
17.5.2 AT24系列芯片的应用实例——使用AT24CO4存放用户数据 665
17.6 SPI总线接口的E2PROM芯片 668
17.6.1 93系列芯片的应用基础 668
17.6.2 93系列芯片的应用实例——使用93C46存放用户数据 674
17.7 接触式加密智能卡 677
17.7.1 接触式智能卡基础 677
17.7.2 SLE4442接触式加密卡的应用基础 679
17.7.3 SLE4442的应用实例——SLE4442卡的读写 690
17.8 非接触式智能卡 693
17.8.1 非接触式智能卡基础 693
17.8.2 非接触式智能卡读写模块的应用基础 697
17.8.3 非接触式智能卡读写模块的应用实例 709
第18章 51单片机的大容量存储模块 711
18.1 Flash芯片 711
18.1.1 Flash芯片的应用基础 711
18.1.2 Flash的应用实例——K9F5608芯片的应用 717
18.2 U盘读写芯片 717
18.2.1 CH376的应用基础 717
18.2.2 CH376的应用实例——U盘读写 741
18.3 SD卡 745
18.3.1 SD卡的应用基础 745
18.3.2 SD卡的应用实例 756