标题：手把手教你学单片机（第2版）
内容提要：
本书以实际编程及做实验为主线贯穿全书。完全摒弃教科书的方法,采用“程序完成后软件仿真-单片机烧录程序-试验板通电实验”的方法,以全新的方式边学边实验,将初学者领进单片机世界的大门。第2版增加了单片机的接口扩展和驱动内容。随书所附的光盘中提供了本书所有的实验程序文件,并增加了多媒体教学例程,可供读者在学习、实验时参考。
本书的读者对象是大中专学生、职业学校学生、广大电子制作爱好者。
图书目录：
第1章 实验设备及器材使用介绍1．1 单片机的发展史及特点11．2 单片机入门的有效途径21．3 实验工具及器材31.3.1 Keil C51 Windows集成开发环境31.3.2 TOP851多功能编程器41.3.3 LED输出试验板51.3.4 LED数码管输出试验板61.3.5 5 V高稳定专用稳压电源81.3.6 16×2字符型液晶显示模组8第2章 Keil C51集成开发环境及TOP851多功能编程器2．1 Keil C51集成开发环境软件安装102．2 TOP851烧录软件安装112．3 TOP851烧录软件操作122.3.1 文件操作和编辑122.3.2 选择型号162.3.3 读/写单片机17第3章 初步接触KeilC51及TOP851软件并感受第一个演示程序效果3．1 建立一个工程项目，选择芯片并确定选项193.2 建立源程序文件213.3 添加文件到当前项目组中223.4 编译（汇编）文件233.5 检查并修改源程序文件中的错误243.6 软件模拟仿真调试243.7 烧录程序（编程操作）253.8 观察程序运行的结果27第4章 单片机的基本知识4.1 MCS51单片机的基本结构284.2 80C51基本特性及引脚定义294.2.1 80C51的基本特征294.2.2 80C51的引脚定义及功能304.3 80C51的内部结构314.4 80C51的存储器配置和寄存器33第5章 汇编语言程序指令的学习5.1 MCS51单片机的指令系统375.2 汇编语言的特点385.3 汇编语言的语句格式38第6章 数据传送指令的学习及实验6.1 按寻址方式分类的数据传送指令406.1.1 立即数寻址406.1.2 直接寻址406.1.3 寄存器寻址406.1.4 寄存器间接寻址406.1.5 位寻址416.1.6 变址寻址416.1.7 相对寻址416.2 点亮/熄灭一个发光二极管的实验，自动循环工作416.2.1 实现方法416.2.2 源程序文件416.2.3 程序分析解释436.2.4 小结436.3 点亮/熄灭一个发光二极管的实验，点亮/熄灭时间自动发生变化（分3段），自动循环工作436.3.1 实现方法436.3.2 源程序文件446.3.3 程序分析解释456.3.4 小结456.4 P1口的8个发光二极管每隔2个右循环点亮实验466.4.1 实现方法466.4.2 源程序文件466.4.3 程序分析解释466.4.4 小结476.5 MCS51内部的RAM和特殊功能寄存器SFR的数据传送指令476.5.1 以累加器为目的操作数476.5.2 以寄存器为目的操作数476.5.3 以直接地址为目的操作数476.5.4 以寄存器间接地址为目的操作数486.5.5 16位数据传送486.6 “跑马灯”实验 486.6.1 实现方法486.6.2 源程序文件496.6.3 程序分析解释516.6.4 小结536.7 单片机的受控输出显示实验536.7.1 实现方法536.7.2 源程序文件536.7.3 程序分析解释546.8 小结55第7章 算术运算指令的学习及实验7.1 算术运算指令567.1.1 加法指令567.1.2 带进位加法指令567.1.3 带借位减法指令567.1.4 乘法指令577.1.5 除法指令577.1.6 加1指令577.1.7 减1指令577.1.8 二十进制调整指令587.2 52H、FCH两数相加实验，结果从P1口输出587.2.1 实现方法587.2.2 源程序文件587.2.3 程序分析解释597.3 FFH、03H两数相乘实验，结果从P0、P1口输出607.3.1 实现方法607.3.2 源程序文件607.3.3 程序分析解释617.4 加1指令实验，让P1口的8个发光二极管模拟二进制的加法运算617.4.1 实现方法617.4.2 源程序文件617.4.3 程序分析解释627.5 加1指令实验（不进行二十进制调整）627.5.1 实现方法627.5.2 源程序文件637.5.3 程序分析解释647.6 加1指令实验（进行二十进制调整）647.6.1 实现方法647.6.2 源程序文件647.6.3 程序分析解释657.7 小结66第8章 逻辑运算指令的学习及实验8.1 逻辑运算指令678.1.1 累加器A取反指令678.1.2 累加器A清0指令678.1.3 逻辑“与”指令678.1.4 逻辑“或”指令688.1.5 逻辑“异或”指令688.1.6 循环移位指令688.1.7 累加器半字节交换指令698.2 逻辑运算举例一698.2.1 实现方法698.2.2 源程序文件698.2.3 程序分析解释718.3 逻辑运算举例二728.3.1 实现方法728.3.2 源程序文件728.3.3 程序分析解释738.4 逻辑运算举例三738.4.1 实现方法748.4.2 源程序文件748.4.3 程序分析解释748.5 小结75第9章 控制转移类指令的学习及实验9.1 控制转移类指令769.1.1 无条件转移指令769.1.2 条件转移指令779.1.3 比较转移指令779.1.4 循环转移指令789.1.5 子程序调用及返回指令789.2 散转程序实验799.2.1 实现方法799.2.2 源程序文件809.2.3 程序分析解释829.2.4 小结839.3 统计含58H关键字的实验849.3.1 实现方法849.3.2 源程序文件849.3.3 程序分析解释85第10章 位操作指令的学习10.1 位操作指令8710.1.1 位数据传送指令8710.1.2 位控制修正指令8710.1.3 位逻辑运算指令8810.2 将P1.0的状态传送到P2.0的实验8810.2.1 实现方法8810.2.2 源程序文件8810.2.3 程序分析解释8910.3 比较输入数大小的实验9010.3.1 实现方法9010.3.2 源程序文件9010.3.3 程序分析解释9110.4 将累加器A中的立即数移出的实验9110.4.1 实现方法9210.4.2 源程序文件9210.4.3 程序分析解释9210.5 实现逻辑函数的实验9310.5.1 实现方法9310.5.2 源程序文件9310.5.3 程序分析解释94第11章 栈操作指令、空操作指令、伪指令及字节交换指令的学习 11.1 栈操作指令9611.1.1 堆栈指令9611.1.2 出栈指令9611.2 空操作指令9611.3 伪指令9711.3.1 汇编起始命令9711.3.2 汇编结束命令9711.3.3 等值命令9711.3.4 定义字节命令9811.3.5 定义字命令9811.3.6 预留存储区命令9911.3.7 定义位命令99 11.3.8 定义数据地址命令99 11.4 字节交换指令9911.5 查0~9平方表实验10011.5.1 实现方法10011.5.2 源程序文件10011.5.3 程序分析解释10211.6 利用NOP指令产生精确方波实验10411.6.1 实现方法104 11.6.2 源程序文件10411.6.3 程序分析解释10611.7 MCS51指令分类表107第12章 定时器/计数器及实验12.1 定时器/计数器的结构及工作原理11112.2 定时器/计数器方式寄存器和控制寄存器11212.3 定时器/计数器的工作方式11312.3.1 方式011312.3.2 方式111412.3.3 方式2115 12.3.4 方式311512.4 定时器/计数器的初始化11612.5 蜂鸣器发音实验117 12.5.1 实现方法11712.5.2 源程序文件11712.5.3 程序分析解释11812.6 定时器T1方式2计数实验11812.6.1 实现方法11812.6.2 源程序文件11912.6.3 程序分析解释119 12.7 定时器T1方式1定时实验120 12.7.1 实现方法12012.7.2 源程序文件12012.7.3 程序分析解释121第13章 中断系统及实验13.1 中断的种类12413.1.1 外中断12413.1.2 内中断12413.2 MCS51单片机的中断系统12413.2.1 中断源及控制12413.2.2 中断响应12713.3 令LED输出试验板上的蜂鸣器发出1 kHz音频的实验12813.3.1 实现方法128 13.3.2 源程序文件12913.3.3 程序分析解释12913.4 利用外中断方式进行数据采集实验13013.4.1 实现方法130 13.4.2 源程序文件130 13.4.3 程序分析解释131 13.5 中断嵌套实验13213.5.1 实现方法13213.5.2 源程序文件13213.5.3 程序分析解释13313.6 交通灯控制器实验13413.6.1 实现方法134 13.6.2 源程序文件13413.6.3 程序分析解释13613.7 键控计数实验13813.7.1 实现方法138 13.7.2 源程序文件13813.7.3 程序分析解释139第14章 汇编语言的程序设计及实验14.1 单片机应用系统的设计过程14114.2 汇编语言程序设计步骤14214.3 顺序程序设计14214.4 右移循环流水灯实验14314.4.1 实现方法14314.4.2 源程序文件14314.4.3 程序分析解释14414.5 循环程序设计145 14.6 找数据块中最大数的实验14514.6.1 实现方法14514.6.2 源程序文件14614.6.3 程序分析解释14714.7 延时子程序的结构14814.8 寻找ASCII码“$”的实验14914.8.1 实现方法14914.8.2 源程序文件14914.8.3 程序分析解释15014.9 子程序设计、调用及返回15114.9.1 子程序的结构特点151 14.9.2 编写子程序时的注意要点15114.9.3 子程序的调用与返回15214.9.4 子程序嵌套15214.10 使P0口的8个LED闪烁20次实验15214.10.1 实现方法15214.10.2 源程序文件15214.10.3 程序分析解释15314.11分支程序设计15414.11.1 单分支程序15414.11.2 多分支程序15414.12 做简单的+、-、×、÷实验15614.12.1 实现方法15614.12.2 源程序文件15614.12.3 程序分析解释15814.13 查表程序设计16014.14 单片机演奏音乐的实验16114.14.1 实现方法16114.14.2 源程序文件16114.14.3 程序分析解释163 14.15 数据排序实验16414.15.1 实现方法16414.15.2 源程序文件16514.15.3 程序分析解释171 第15章 键盘接口技术及实验15.1 独立式键盘17215.2 行列式键盘17315.3 独立式键盘接口的编程模式17315.4 行列式键盘接口的编程模式17415.5 键盘工作方式17415.6 独立式键盘输入实验17515.6.1 实现方法175 15.6.2 源程序文件17515.6.3 程序分析解释17715.7 行列式键盘输入实验17815.7.1 实现方法17815.7.2 源程序文件17815.7.3 程序分析解释18015.8 扫描方式的键盘输入实验18115.8.1 实现方法18115.8.2 源程序文件18115.8.3 程序分析解释18215.9 定时中断方式的键盘输入实验18315.9.1 实现方法18315.9.2 源程序文件18315.9.3 程序分析解释184第16章 LED显示器接口技术及实验16.1 LED数码显示器的构造及特点186 16.2 LED数码显示器的显示方法188 16.2.1静态显示法18816.2.2 动态扫描显示法18916.3 静态显示实验19016.3.1 实现方法19016.3.2 源程序文件19016.3.3 程序分析解释19116.4 慢速动态显示实验19216.4.1 源程序文件192 16.4.2 程序分析解释19316.5 快速动态显示实验19316.5.1 源程序文件19316.5.2 程序分析解释19416.6 实时时钟实验19516.6.1 实现方法19516.6.2 源程序文件19516.6.3 程序分析解释198 第17章 字符型液晶（LCD）模块原理及设计学习17.1 液晶显示器概述20217.2 16×2字符型液晶显示模块（LCM）特性20317.3 16×2字符型液晶显示模块（LCM）引脚及功能20317.4 16×2字符型液晶显示模块（LCM）的内部结构20317.5 液晶显示控制驱动集成电路HD44780特点20417.6 HD44780工作原理205 17.6.1 DDRAM——数据显示用RAM20617.6.2 CGROM——字符产生器ROM20717.6.3 CGRAM——字型、字符产生器RAM20817.6.4 IR——指令寄存器20917.6.5 DR——数据寄存器20917.6.6 BF——忙碌标志信号20917.6.7 AC——地址计数器20917.7 LCD控制器的指令20917.7.1 清除显示器21017.7.2 光标归位设定21017.7.3 设定字符进入模式21017.7.4 显示器开关21017.7.5 显示光标移位21117.7.6 功能设定211 17.7.7 CGRAM地址设定211 17.7.8 DDRAM地址设定21117.7.9 忙碌标志BF或AC地址读取212 17.7.10 写数据到CGRAM或DDRAM中212 17.7.11 从CGRAM或DDRAM中读取数据21217.8 LCM工作时序21217.9 单片机驱动LCM的电路213第18章 体验第一个液晶程序的效果并建立模块化设计的相关子程序18.1 体验第一个液晶程序的效果21518.1.1 源程序文件21518.1.2 程序分析解释21818.2 查询忙碌标志信号子程序222 18.2.1 源程序文件22218.2.2 程序分析解释22218.3 写指令到LCM（IR寄存器）子程序22318.3.1 源程序文件22318.3.2 程序分析解释22318.4 写数据到LCM（DR寄存器）子程序22318.4.1 源程序文件223 18.4.2 程序分析解释22418.5 清除显示屏子程序224 18.5.1 源程序文件22418.5.2 程序分析解释22418.6 启动LCM子程序224 18.6.1 源程序文件22518.6.2 程序分析解释22518.7 让字母“F”在显示屏的第2行第10列显示227 18.7.1 源程序文件22718.7.2 程序分析解释22818.8 使LCM显示2行字符串（英文信息）22918.8.1 源程序文件22918.8.2 程序分析解释232 18.9 使LCM显示2行字符串（英文信息）并循环移动23318.9.1 源程序文件23318.9.2 程序分析解释235第19章 简单的液晶显示型自动化仪器的设计学习及实验19.1 工业生产自动计数器238 19.1.1 实现方法23819.1.2 源程序文件23819.1.3 程序分析解释24619.2 设备运行状态自动显示器249 19.2.1 实现方法25019.2.2 源程序文件25019.2.3 程序分析解释25319.3 液晶显示计时时钟25419.3.1 源程序文件25419.3.2 程序分析解释26019.4 让液晶显示屏显示自制图形“中”26419.4.1 实现方法26419.4.2 源程序文件26419.4.3 程序分析解释266 19.5 液晶显示屏显示复杂的自制图形26819.5.1 实现方法26819.5.2 源程序文件268 19.5.3 程序分析解释271第20章 Keil C51集成开发环境的设置及调试方法20.1 工程项目的建立、源程序文件的建立及加载27320.1.1 建立工程文件27420.1.2 源程序文件的建立27620.1.3 添加文件到当前项目组中27820.2 工程的详细设置28020.2.1 Target页面28020.2.2 Output页面28120.2.3 Listing页面28220.2.4 C51页面28320.2.5 Debug页面 28420.3 编译、连接28520.4 Keil C51集成开发环境软件的调试方法28620.4.1 常用调试命令286 20.4.2 断点设置28620.4.3 在线汇编28720.4.4 程序调试时的常用窗口287 20.5 外围接口工具28920.5.1 P1口作为输入端口28920.5.2 P1口作为输出端口29020.5.3 外部中断INT0291 20.5.4 定时器/计数器0292第21章 看门狗定时器使用及简单的接口扩展 21.1 看门狗定时器的使用29321.2 实验： P0~P3口的32个LED（发光管）依次流水点亮，形成“流水灯” 293 21.2.1 实现方法29421.2.2 源程序文件294 21.2.3 程序分析解释295 21.3 模拟程序失控情况的“流水灯”实验297 21.3.1 源程序文件297 21.3.2 程序分析解释29921.4 简单的接口功率扩展30021.5 常用的外部芯片扩展30221.5.1 数据存储器6264的扩展及应用实例30321.5.2 用8255A可编程并行接口芯片扩展I/O口及应用实例30721.5.3 用8155A可编程并行接口芯片扩展I/O口及应用实例31021.5.4 扩展8位A/D转换芯片ADC0809及应用实例31421.5.5 扩展8位D/A转换芯片DAC0832及应用实例317 参考文献320[1]