标题：PIC单片机常用模块与综合系统设计实例精讲
内 容 简 介
全书从实用的角度出发，通过大量实例详细介绍了PIC单片机常用模块与综合系统设计的方法与技巧。全书共分3篇18章，第一篇为基础知识篇，简要介绍了PIC单片机的硬件结构、中断系统、指令系统和PIC开发工具，引导读者入门；第二篇为PIC单片机常用模块设计篇，通过18个模块实例详细介绍了PIC单片机的各种开发技术和使用技巧，这些模块实例基础、实用、易学易懂，全部调试通过，几乎涵盖了PIC单片机所有的开发技术；第三篇为综合系统设计实例篇，通过3个综合系统实例，对前面所述的PIC单片机常用模块进行了综合应用设计，经过此篇学习，读者的PIC单片机综合系统设计能力将迅速提升，并可产生质的飞跃。
本书语言通俗易懂，结构合理，基础知识与大量实例相结合，边学边练。不但详细介绍了PIC单片机的硬件电路设计和模块化编程，而且提供了综合系统设计思路，对实例的所有程序代码做了详细注释，有利于读者理解和巩固知识点。
本书配有光盘一张，包含了全书所有实例的硬件原理图和程序源代码，方便读者学习和使用。本书适合计算机、自动化、电子及硬件等相关专业的高校学生及从事PIC单片机的科研人员使用。
前    言
PIC单片机应用十分广泛，它由美国Microchip公司生产，具有硬件系统设计便捷、指令系统设计精练、采用精简指令集和哈佛双总线结构，拥有速度高、功率低、驱动电流大、控制能力强等优点，能满足各种用户的需要，因此受到广大用户欢迎，同时也是比较容易学习、开发效率较高的单片机系列。
在目前市场上PIC单片机类的图书中，介绍编程语言和基础原理的较多，而对常用模块的开发实例涉及甚少，从常用模块到综合应用系统的实例提高更是处于空白，本书的出版可以填补这种空白。
本书内容全书从实用的角度出发，通过大量实例精讲的形式，详细介绍了PIC单片机常用模块与综合系统设计的方法与技巧。全书共分3篇18章，主要内容安排如下：
第一篇为基础知识篇，包括第1～4章，简要介绍了PIC单片机的硬件内部结构、CPU特色、中断系统、指令系统及PIC常用开发工具，引导读者入门。
第二篇为PIC单片机常用模块设计篇，包括第5～15章，通过18个模块实例详细介绍了PIC单片机的各种开发技术和使用技巧，这些模块实例基础、实用、易学易懂，全部调试通过，几乎涵盖了PIC单片机所有的开发技术。
第三篇为综合系统设计实例篇，包括第16～18章，通过3个综合系统实例，对前面介绍的PIC单片机常用模块进行了综合应用设计，经过此篇学习，读者对于PIC单片机综合系统设计的能力将迅速提升，并可产生质的飞跃。
光盘说明本书配有光盘一张，包含了全书所有实例的硬件原理图和程序源代码，方便读者学习和使用。本书适合计算机、自动化、电子及硬件等相关专业的高校学生以及从事PIC单片机的科研人员使用。
本书特色归纳起来，本书主要具备以下特色：
（1）本书语言通俗，结构合理，内容丰富，由简到难，基础知识与大量实例相结合，可做到边学边练。
（2）本书安排了18个PIC单片机常用模块实例，这些实例基础、典型、实用、易学易懂，涵盖了几乎所有的PIC单片机开发技术，为读者提供了难得的学习途径。
（3）最后安排了3个综合系统实例，对PIC单片机的基本知识和常用模块进行了综合应用，有利于读者举一反三，实现从入门到精通的学习目的。
（4）本书不但详细介绍了PIC单片机的硬件电路设计和模块化编程，而且提供了综合系统设计思路，对实例的所有程序代码做了详细注释，有利于读者理解和巩固知识点，是读者学习PIC单片机开发的必备宝典。
本书主要由夏彬彬、任明全、屈金学编写，另外参加编写的人员还有：唐清善、邱宝良、周克足、刘斌、李亚捷、李永怀、李宁宇、刘伟捷、黄小欢、严剑忠、黄小宽、李彦超、付军鹏、张广安、贾素龙、王艳波、金 平、徐春林、谢正义、郑贞平、张小红等。他们在资料收集、整理和技术支持方面做了大量的工作，在此一并向他们表示感谢！
由于时间仓促，再加之作者的水平有限，书中难免存在一些不足之处，欢迎广大读者批评和指正。
编著 者
目   录
第一篇  基础知识篇第1章  PIC单片机概述    2
1.1  PIC单片机的特点    2
1.2  PIC单片机的系列产品    5
1.2.1  基本级PIC系列单片机    6
1.2.2  中级PIC系列单片机    6
1.2.3  高级PIC系列单片机    8
1.3  PIC16F87X单片机的硬件
1.3  结构    10
1.3.1  PIC16F87X的主要特色    10
1.3.2  PIC16F87X的内部结构    11
1.3.3  PIC16F87X的引脚功能    16
1.4  本章小结    21
第2章  PIC单片机的CPU和中断系统    22
2.1  PIC单片机的CPU    22
2.1.1  系统配置    22
2.1.2  振荡器配置    24
2.1.3  复位    26
2.1.4  中断    33
2.1.5  监视定时器WDT    33
2.1.6  睡眠模式    35
2.1.7  在线调试    37
2.1.8  程序代码保护    37
2.1.9  用户标识码    37
2.1.10  在线串行编程技术ICSP（In-Circuit Serial Programming）    37
2.2  中断系统    38
2.2.1  中断的基本概念    38
2.2.2  PIC16F87X的中断源及中断逻辑    39
2.2.3  与中断相关的寄存器    44
2.2.4  CPU对中断的处理    48
2.3  本章小结    51
第3章  PIC单片机的指令系统    52
3.1  PIC汇编语言指令格式    53
3.2  PIC16F87X指令集    54
3.3  伪操作指令    60
3.4  寻址方式    64
3.5  本章小结    67
第4章  PIC单片机的开发工具    68
4.1  PIC系列单片机的仿真器    68
4.2  PIC系列单片机的编程器及开发套件    73
4.3  MPLAB-IDE 7.4版集成开发环境    77
4.3.1  MPLAB-IDE 7.4概述    77
4.3.2  MPLAB-IDE 7.4工程创建实例    80
4.3.3  几个常用的菜单项    83
4.4  本章小结    85
第二篇  PIC常用模块设计实例篇第5章  I/O输入输出模块    88
5.1  44扫描键盘设计实例    88
5.1.1  实例说明    88
5.1.2  键盘知识介绍    88
5.1.3  硬件电路设计    90
5.1.4  软件设计    90
5.1.5  实例总结    93
5.2  直接驱动LED显示    94
5.2.1  实例说明    94
5.2.2  LED数码管知识    94
5.2.3  硬件电路设计    94
5.2.4  软件设计    95
5.2.5  实例总结    96
第6章  LCD液晶显示模块：温度测量系统设计实例    97
6.1  实例说明    97
6.2  DS18B20与YMSC-G12864
6.2  IDYEWWD    98
6.2.1  温度传感器DS18B20    98
6.2.2  液晶显示屏YMSC-G12864I-DYEWWD    100
6.3  硬件电路设计    103
6.4  软件设计    105
6.4.1  温度传感器DS18B20的软件设计    105
6.4.2  液晶显示屏YMSC-G12864-IDYEWWD的软件设计    109
6.5  实例总结    116
第7章  定时器模块：用定时器控制端口输出实例    117
7.1  实例说明    117
7.2  定时器Timer0介绍    117
7.3  硬件电路设计    118
7.4  软件设计    119
7.5  实例总结    120
第8章  A/D模块：压力测量系统设计实例    121
8.1  实例说明    121
8.2  A/D转换相关知识    121
8.2.1  A/D转换的原理说明    121
8.2.2  单片机相关寄存器介绍    122
8.2.3  A/D转换操作对时间的要求    124
8.3  硬件电路设计    125
8.4  软件设计    125
8.4.1  程序设计流程    126
8.4.2  程序代码说明    126
8.5  实例总结    128
第9章  存储器模块：基于I2C对EEPROM 24C02的读写    129
9.1  实例说明    129
9.2  24C02与I2C接口介绍    129
9.2.1  24C02简介    129
9.2.2  PIC16F877 I2C接口简介    130
9.2.3  I2C总线规则    130
9.3  硬件电路设计    131
9.4  软件设计    132
9.5  实例总结    136
第10章  比较与检测模块    137
10.1  利用CCP模块控制继电器    137
10.1.1  实例说明    137
10.1.2  定时器TMR1介绍    137
10.1.3  硬件电路设计    139
10.1.4  软件设计    140
10.1.5  实例总结    141
10.2  脉冲频率的检测设计    141
10.2.1  实例说明    141
10.2.2  定时器TMR2介绍    141
10.2.3  硬件电路设计    142
10.2.4  软件设计    143
10.2.5  实例总结    144
10.3  电压测量模块    144
10.3.1  实例介绍    144
10.3.2  硬件电路设计    145
10.3.3  软件设计    145
10.3.4  实例总结    147
第11章  步进电机模块    148
11.1  实例说明    148
11.2  步进电机驱动工作原理    148
11.3  硬件电路设计    149
11.4  软件设计    150
11.4.1  软件设计流程    151
11.4.2  程序代码说明    152
11.5  实例总结    153
第12章  信号发生模块    154
12.1  PWM实现DA转换    154
12.1.1  实例说明    154
12.1.2  PWM模块架构    155
12.1.3  硬件电路设计    156
12.1.4  软件设计程序    157
12.1.5  实例总结    158
12.2  正弦波发生器    158
12.2.1  实例说明    158
12.2.2  TLC5620介绍    158
12.2.3  硬件电路设计    160
12.2.4  软件程序设计    160
12.2.5  实例总结    162
第13章  数字PID控制模块    163
13.1  PID控制概述    163
13.2  位置式PID控制算法    164
13.3  增量式PID控制算法    165
13.3.1  增量式控制算法流程    166
13.3.2  数字PID控制算法的改进    167
13.4  数字PID控制算法代码    168
13.5  实例总结    170
第14章  直流数控稳压电源模块    171
14.1  实例说明    171
14.2  设计思路分析    171
14.2.1  D/A转换器DAC0832    172
14.2.2  步进0.1V实现    172
14.3  硬件电路设计    172
14.3.1  模数转换电路    172
14.3.2  电流放大电路    173
14.3.3  人机接口电路    173
14.3.4  稳压电源电路    174
14.4  软件设计    174
14.4.1  程序设计流程    174
14.4.2  程序代码说明    174
14.5  实例总结    177
第15章  网络通信与数据传输模块    178
15.1  USART串行通信模块实例    178
15.1.1  实例说明    178
15.1.2  打印机并口介绍    178
15.1.3  硬件电路设计    180
15.1.4  软件设计    181
15.1.5  实例总结    182
15.2  I2C总线通信模块实例    182
15.2.1  实例说明    182
15.2.2  I2C总线介绍    183
15.2.3  硬件电路设计    187
15.2.4  软件设计    188
15.2.5  实例总结    195
15.3  SPI总线通信模块实例    195
15.3.1  实例说明    195
15.3.2  SPI模块相关的寄存器    195
15.3.3  硬件电路设计    197
15.3.4  软件设计    198
15.3.5  实例总结    200
15.4  通信模块：CAN总线模块实例    200
15.4.1  实例说明    201
15.4.2  设计思路分析    202
15.4.3  硬件电路设计    206
15.4.4  软件程序设计    207
15.4.5  实例总结    212
15.5  通信模块：USB数据传输模块实例    212
15.5.1  实例说明    212
15.5.2  设计思路分析    213
15.5.3  硬件电路设计    219
15.5.4  USB固件程序设计    220
15.5.5  实例总结    225
第三篇  综合系统设计实例篇第16章  智能手电筒开发实例    228
16.1  系统功能说明    228
16.2  系统工作原理与实现方法    229
16.2.1  系统的供电    229
16.2.2  灯珠和LED点亮或熄灭的实现    229
16.2.3  按键扫描电路和A/D转换电路图原理    230
16.2.4  数据的显示    231
16.2.5  蜂鸣器驱动和背光源驱动    235
16.2.6  电池的自动充电实现    236
16.3  软件设计与代码分析    237
16.3.1  软件设计    237
16.3.2  主程序    239
16.3.3  中断子程序    244
16.3.4  时钟处理子程序    245
16.3.5  2ms到处理子程序    247
16.3.6  A/D中断子程序    252
16.4  实例总结    255
第17章  汽车应急启动器系统开发实例    257
17.1  系统功能说明    257
17.2  系统硬件框图    258
17.3  系统各模块工作原理与实现方法    259
17.3.1  系统电源部分    259
17.3.2  蜂鸣器驱动与系统检测按键扫描电路    259
17.3.3  灯管驱动与灯管按键扫描电路    260
17.3.4  发光二极管驱动与内部电池电压按键扫描电路    261
17.3.5  液晶显示器（LCD）驱动电路    261
17.3.6  内部电池与外部电池连接正确与否检测电路    264
17.3.7  应急启动控制电路    264
17.3.8  轮胎压力检测电路    265
17.3.9  轮胎气泵启动控制与轮胎
17.3.9  充气按键扫描电路    267
17.3.10  加键与减键扫描电路    268
17.3.11  外部电池检测按键扫描电路    269
17.3.12  电池电压检测与电池充电电路    269
17.4  软件设计与代码分析    270
17.4.1  主程序    271
17.4.2  气泵处理程序    280
17.4.3  灯管处理程序    280
17.4.4  外部电池检测程序    282
17.4.5  系统检测程序    283
17.4.6  时钟中断程序    284
17.4.7  内部电池充电程序    288
17.5  实例总结    289
第18章  无功功率补偿控制器设计实例    290
18.1  系统功能说明    290
18.2  系统硬件框图    292
18.3  系统各模块工作原理与实现方法    292
18.3.1  系统的供电    292
18.3.2  按键扫描电路    293
18.3.3  电流和电压相位差检测电路    294
18.3.4  电流和电压的A/D转换电路    297
18.3.5  八段数码管和LED指示灯电路    298
18.3.6  十路电力电容驱动电路    298
18.3.7  EEPROM的驱动电路    300
18.4  软件设计与代码分析    301
18.4.1  初始化、欠流判断和开机按键扫描程序    301
18.4.2  检测电力电容容量程序    308
18.4.3  检测功率因数程序
18.4.3  （主程序）    310
18.4.4  参数设置程序    323
18.5  实例总结    325