编辑推荐
全新改写的《例说51单片机(C语言版)(第3版)》在上一版的基础上,提供了更加丰富完整的内容,让读者能够快速地进入单片机与数字微控制器的领域。在第3版里大部分都重新绘制,以高分辨率呈现。
凝聚单片机应用教学专家多年以验和心血,讲解更透彻,效果更突出!
畅销不衰的单片机经典入门教程,基本开发环境、8×51结构与应用、系统应用等根据需要安排于各章节,适于教学编排。
每个单元都有大量的范例与练习。电路与电路之间,程序与程序之间。都保持着关联性,让读者轻松入门。
内容简介
《例说51单片机(C语言版)(第3版)》分为基本开发环境、8x51结构与应用、外围系统应用三部分。前两章为基本开发环境的介绍,其中包括8x51基本知识、开发系统(mVision3)与程序设计语言(KeilC)。第3章到第8章为8x51结构与应用,包括输入/输出端口、中断、定时器/计数器、串行口等,并分别以实例引出。第9章到第14章则是外围系统应用,包括音乐程序的开发、步进电机的控制、AD/DAC接口芯片的应用、LED点阵的驱动、LCD模块的应用、习题解答等。《例说51单片机(C语言版)(第3版)》整体结构采用循序渐进的方式,对于每个单元的展开,也是循序渐进的。电路与电路之间,或程序与程序之间,都保持着关联性。在前一个电路(或程序)的基础之上,只做一些微小的改变,就可开发出另一个电路(或程序),让读者轻松入门。在每个实例演练之后,给出“思考一下”的单元,读者能即学即用,动脑思考,让所学知识得以进一步巩固。《例说51单片机(C语言版)(第3版)》可作为大中专院校的单片机教材,也可以作为广大科技人员和爱好者的单片机技术参考书。
内页插图
目录
第1章 轻松看MCS-51 1
1-1 微型计算机与单片机 2
1-2 8051基础知识 2
1-2-1 8x51的结构 2
1-2-2 89C51/89S51的封装与引脚 3
1-2-3 89S51的基本电路 6
1-2-4 MCS-51系列 8
1-2-5 关于Atmel的51系列 10
1-3 认识MCS-51的存储器结构 11
1-3-1 程序存储器 11
1-3-2 数据存储器 12
1-3-3 特殊功能寄存器 14
1-4 MCS-51的时序分析与复位 18
1-4-1 时序分析 18
1-4-2 复位 19
1-5 MCS-51的开发流程与工具 20
1-5-1 传统开发工具 21
1-5-2 Altium Designer电路设计软件 22
1-5-3 Keil mVision3集成开发环境 23
1-5-4 89S51的在线刻录功能 23
1-6 实例演练 24
1-7 实时练习 31
第2章 认识mVision3与Keil C 33
2-1 mVision3环境简介 34
2-1-1 认识mVision3环境 34
2-1-2 项目管理与选项 37
2-1-3 认识调试/仿真环境 39
2-1-4 外围操作 40
2-2 Keil C语言的基本结构 43
2-3 变量、常数与数据类型 47
2-3-1 数据类型 47
2-3-2 变量名称与保留字 49
2-3-3 变量的作用范围 50
2-4 存储器的形式与模式 50
2-4-1 存储器的形式 51
2-4-2 存储器的模式 52
2-5 Keil C的运算符 53
2-6 Keil C的流程控制 57
2-6-1 循环指令 57
2-6-2 选择指令 60
2-6-3 跳转指令 62
2-7 数组与指针 63
2-7-1 数组 63
2-7-2 指针 64
2-8 函数与中断子程序 64
2-8-1 函数 65
2-8-2 中断子程序 65
2-9 Keil C的预处理命令 66
2-10 实时练习 67
第3章 输出端口的应用 69
3-1 认识MCS-51的输入/输出端口 70
3-2 输出电路设计 72
3-2-1 驱动LED 72
3-2-2 驱动蜂鸣器 73
3-2-3 驱动继电器 74
3-2-4 驱动固态继电器 75
3-2-5 驱动七段LED数码管 76
3-3 实例演练 78
3-3-1 驱动蜂鸣器实验 78
3-3-2 驱动继电器实验 81
3-3-3 霹雳灯实例演练 83
3-3-4 驱动七段LED数码管实验 85
3-4 实时练习 87
第4章 输入口的应用 89
4-1 认识MCS-51的输入口 90
4-2 输入设备与输入电路设计 90
4-2-1 输入设备 90
4-2-2 输入电路设计 93
4-2-3 抖动与去抖动 95
4-3 实例演练 97
4-3-1 拨码开关控制 97
4-3-2 按钮开关控制 99
4-3-3 按钮切换式控制 100
4-3-4 按钮开关应用 102
4-3-5 BCD拨码开关 104
4-3-6 多个按钮开关 106
4-3-7 按钮开关放开后动作 111
4-4 实时练习 113
第5章 输入/输出端口的高级应用 115
5-1 键盘扫描 116
5-1-1 键盘扫描原理 118
5-1-2 4×4键盘程序分析 120
5-1-3 认识MM74C922/MM74C923 122
5-2 七段LED数码显示管扫描 124
5-2-1 认识七段LED数码管模块 125
5-2-2 认识7447/7448 128
5-2-3 认识74138/74139 131
5-3 静态显示与动态显示 132
5-3-1 使用BCD译码器 133
5-3-2 直接驱动 135
5-3-3 使用扫描译码器 136
5-3-4 闪烁 137
5-3-5 交替显示 138
5-3-6 飞入 139
5-3-7 跑马灯 141
5-4 实例演练 142
5-4-1 4位数七段LED数码管 142
5-4-2 直接驱动七段LED数码管 145
5-4-3 跑马灯 148
5-4-4 4×4键盘与七段LED数码管 150
5-4-5 MM74C922 153
5-5 实时练习 154
第6章 中断的应用 156
6-1 认识MCS-51的中断 157
6-1-1 MCS-51的中断 157
6-1-2 中断使能寄存器IE 158
6-1-3 中断优先级寄存器IP 159
6-1-4 定时器/计数器控制寄存器TCON 160
6-1-5 中断向量 160
6-1-6 中断的应用 160
6-2 中断子程序的仿真 161
6-3 实例演练 162
6-3-1 外部中断INT0 162
6-3-2 外部中断INT1 164
6-3-3 两个外部中断 167
6-3-4 键盘中断 170
6-4 实时练习 172
第7章 定时器/计数器的应用 174
7-1 8x51的定时器/计数器 175
7-1-1 MCS-51的定时器/计数器 175
7-1-2 定时器/计数器方式寄存器TMOD 175
7-1-3 定时器/计数器控制寄存器TCON 178
7-1-4 计数寄存器 178
7-1-5 定时器/计数器的应用 180
7-2 8x52的Timer2 181
7-2-1 T2CON寄存器 181
7-2-2 捕获方式 182
7-2-3 自动加载方式 183
7-2-4 波特率发生方式 183
7-3 8x51的节电方式 184
7-3-1 待机方式 185
7-3-2 掉电方式 185
7-3-3 电源控制寄存器PCON 186
7-4 认识看门狗定时器 186
7-5 实例演练 188
7-5-1 闪烁灯——查询方式 188
7-5-2 闪烁灯——中断方式 190
7-5-3 60秒定时器 191
7-5-4 秒表 194
7-5-5 频率发生器 197
7-5-6 频率计 200
7-5-7 看门狗定时器 204
7-6 实时练习 206
第8章 串行口的应用 208
8-1 数据通信概念 209
8-2 认识8x51的串行口 210
8-3 认识相关寄存器 211
8-4 波特率设置 213
8-5 特殊功能与多处理器数据传输 215
8-5-1 帧错误检测 215
8-5-2 自动地址识别 216
8-5-3 多处理器通信 217
8-6 认识MAX232 218
8-7 认识74164/74165 220
8-8 实例演练 221
8-8-1 移位式数据串入 221
8-8-2 移位式数据串出 223
8-8-3 Mode 1实验 225
8-8-4 Mode 2实验 229
8-8-5 Mode 3实验 231
8-8-6 点对点互传 232
8-8-7 多处理器通信 234
8-9 实时练习 237
第9章 声音的产生 239
9-1 发声电路 240
9-2 音调与节拍 241
9-3 音调的产生 243
9-4 节拍的产生 248
9-5 实例演练 254
9-5-1 简易电子琴 255
9-5-2 DoReMi实验 257
9-5-3 生日快乐歌实验 260
9-5-4 快乐点唱机一 262
9-5-5 快乐点唱机二 268
9-6 实时练习 270
第10章 步进电机的控制 272
10-1 认识步进电机 273
10-1-1 步进电机的结构 273
10-1-2 步进电机的动作 274
10-1-3 步进电机的定位 276
10-2 步进电机驱动电路 278
10-2-1 小型步进电机的驱动电路 278
10-2-2 达林顿晶体管驱动电路 279
10-2-3 FT5754驱动电路 279
10-3 实例演练 280
10-3-1 用延迟子程序产生驱动信号 280
10-3-2 用定时器产生驱动信号 282
10-3-3 1-2相驱动 284
10-3-4 方向控制 286
10-4 实时练习 288
第11章 ADC与DAC的应用 290
11-1 模/数转换原理 291
11-2 认识AD转换IC 294
11-3 数/模转换原理 298
11-4 认识DA转换IC 302
11-5 内含ADC的51系列 305
11-6 认识温度传感器 307
11-7 实例演练 309
11-7-1 电压测量一 309
11-7-2 电压测量二 312
11-7-3 电压测量三 314
11-7-4 温度测量 317
11-7-5 ADC的温控实验 319
11-7-6 DAC实例演练 323
11-8 实时练习 324
第12章 LED点阵的应用 327
12-1 认识LED点阵 328
12-2 LED点阵驱动电路 330
12-3 LED点阵显示方式 335
12-4 LED点阵动态显示 336
12-4-1 水平移动 336
12-4-2 垂直移动 342
12-5 实例演练 345
12-5-1 8×8 LED点阵静态显示 345
12-5-2 8×8 LED点阵静态多色显示 348
12-5-3 8×8 LED点阵平移 350
12-5-4 8×8 LED点阵跑马灯 353
12-5-5 8×8 LED点阵垂直移动 355
12-5-6 8×8 LED点阵卷动 358
12-5-7 16×16 LED点阵显示 360
12-6 实时练习 363
第13章 LCD模块的应用 365
13-1 认识LCD模块 366
13-2 中文LCD模块 371
13-3 LCM控制指令 374
13-4 LCM的初始化设置与常用函数 377
13-5 LCM与8x51的连接 384
13-6 实例演练 384
13-6-1 LCD文字显示 385
13-6-2 自定义字符图案 387
13-7 实时练习 394
第14章 习题解答 396
精彩书摘
第1章 轻松看MCS-51
1-1 微型计算机与单片机
一般地,微型计算机系统包括中央处理单元(CPU)、存储器(Memory)及输入/输出单元(I/O)三大部分,如图1.1所示。CPU就像是人的大脑一样,控制整个系统的运行;存储器则是存放系统运行所需的程序及数据,包括只读存储器(Read Only Memory,ROM)及随机存取存储器(Randon Access Memory,RAM),通常ROM用来存储程序或永久性的数据,称为程序存储器,RAM则是用来存储程序执行时的暂存数据,称为数据存储器;I/O是微型计算机系统与外部沟通的管道,其中包括输入端口与输出端口。这三部分分别由不同的元件组成,然后把它们组装在电路板上,形成一个微型计算机系统。
单片微型计算机(即单片机或微控制器)就是把中央处理单元、存储器、输入/输出单元等全部放置在一个芯片里,如图1—2所示,只要再配置几个小元件,如电阻器、电容器、石英晶体、连接器等,就成为一个完整的微型计算机系统。因此整个系统的体积小、成本低、可靠性高,成为目前微型计算机控制系统的主流。
前言/序言
首先感谢许多老师的爱戴,以及出版社的支持与包容,使得本书快速再版,而这个版次非常不同,绝对会让大家耳目一新!本书在编写之初,就抱着严谨的态度,要让这本书成为这类书籍的标杆。事实证明,我们仅做到了部分,仍有很大的改善空间。所以,这一年来,我们以此书为教材,在不同场合,针对高职学生及在职人员分别开设了多个班次,几乎每个班次都从第一章上到最后一章。而每个班次都有许多建议、调整与勘误,使得第三版能极尽完美。
循序渐进的坚持本书大概可分为基本开发环境、8x51结构与应用、外围系统应用3部分,简述如下。
前两章属于基本开发环境的介绍,其中包括8x51基本知识、开发系统(LLVision3)与程序语言(Keilc)。第3章到第8章为8x51结构与应用,包括输入/输出端口、中断、定时器/计数器、串行口、看门狗定时器、节电方式等,并分别以实例导引。在此着重于讲述8x51本身的控制,让大家更深刻地了解这种单片机微控制器。
第9章到第13章则是外围系统应用,包括音乐程序的开发、步进电机的控制、AD/DA接口芯片的应用、LED点阵的驱动、LCD模块的驱动等。在此着重于8x51与其他外围设备的连接,当然,也针对常用外围设备详细介绍,并探讨了其应用方法。
本书整体结构采用循序渐进的方式,对于每个单元的展开,也是循序渐进的,电路与电路之间,或程序与程序之间,都保持着关联性,在前一个电路(或程序)的基础上,仅做些微小的改变,就可开发出另一个电路(或程序),让读者没有压力。关于这一点,的确让我们费尽心思。在每个实例演练之后,进一步给出“思考一下”的单元,让大家能即学即用,动脑思考,让所学知识更加扎实。
《例说51单片机(C语言版)(第3版)》 内容简介 本书是《例说51单片机》系列的第三版,旨在为读者提供一套全面、深入且易于理解的51系列单片机开发教程。本书以C语言为主要编程语言,结合大量的实例,循序渐进地引导读者掌握51单片机的硬件原理、指令系统、开发环境以及各类常用外设的接口和应用。无论您是初学者还是希望提升技能的开发者,都能从本书中获益。 第一部分:基础入门与原理剖析 第一章 51单片机概述 本章将带您走入51单片机的世界。我们将从单片机的发展历程入手,阐述单片机在现代电子系统中的重要地位和应用领域。随后,重点介绍51系列单片机作为经典的微控制器,其为何历经多年仍具生命力,并概括其在工业控制、智能家居、仪器仪表等方面的广泛应用。本章还将初步介绍51单片机的基本组成,包括CPU、存储器、I/O端口、定时器/计数器、中断系统等核心模块,为后续的学习打下坚实的基础。我们会用直观的方式解释这些模块的功能,让您对单片机有一个整体的认识。 第二章 51单片机硬件结构详解 深入了解硬件是掌握单片机的关键。本章将对51单片机的内部硬件结构进行详细的剖析。我们将逐一介绍CPU的工作原理,包括其指令集、寄存器组以及数据通路。重点讲解片内RAM(数据存储器)和ROM(程序存储器)的结构、寻址方式和读写时序。此外,还将详细阐述P0、P1、P2、P3四个I/O端口的电气特性、工作模式及其在不同应用中的配置方法,例如作为通用I/O口、连接外部存储器、作为特殊功能接口等。定时器/计数器的原理、工作模式(定时模式、计数模式、波形输出模式)及其工作流程也将得到详尽的讲解,这是实现精确计时和事件计数的关键。中断系统的结构、中断源、中断优先级、中断响应过程以及中断服务程序的编写方法,对于提高系统的实时性和效率至关重要,本章也将予以重点说明。 第三章 C语言在51单片机开发中的应用 C语言因其高效、灵活以及接近硬件的特性,成为51单片机开发的首选语言。本章将侧重于C语言在51单片机开发中的具体应用。我们将介绍常用的C51编译器的使用方法,包括工程的创建、源文件的编写、编译、链接以及生成可执行文件的过程。重点讲解C51特有的关键字和数据类型,例如`sbit`、` sfr`、` sfr16`、`bit`、`unsigned char`、`unsigned int`等,以及如何利用它们访问单片机的特殊功能寄存器和I/O口。本章还将通过大量代码实例,演示如何使用C语言进行位操作、字节操作、字操作,如何实现延时函数,以及如何通过C语言程序控制LED灯的亮灭、蜂鸣器的鸣叫等基础操作,让读者快速上手C语言编程。 第四章 开发环境搭建与程序下载 高效的开发环境是提高开发效率的保障。本章将指导读者搭建完整的51单片机开发环境。我们将介绍常用的集成开发环境(IDE),如Keil uVision,详细讲解其安装、配置过程,包括目标芯片的选择、编译器的设置、仿真器的配置等。同时,还将介绍常用的硬件烧录器(下载器)的使用方法,如STC下载器、USB-Blaster等,并演示如何将编译生成的HEX文件下载到目标单片机中。本章还将讲解单片机仿真器的使用,通过仿真,可以在不使用硬件的情况下,对程序进行调试,找出潜在的错误,极大地提高了开发调试效率。 第二部分:核心模块深入应用与实例解析 第五章 I/O端口扩展与应用 本章将深入探讨51单片机I/O端口的扩展技术及其应用。我们将介绍如何利用74HC595等移位寄存器实现I/O端口的扩展,从而驱动更多的LED、数码管或其他输出设备。同时,还将讲解如何利用P0端口连接外部RAM和ROM,实现更大的存储空间扩展,并演示如何进行数据和地址的读写操作。本章还将展示如何利用I/O端口连接键盘矩阵,实现多按键的扫描和识别,以及如何设计中断触发的按键输入。 第六章 定时器/计数器的高级应用 定时器/计数器是51单片机实现定时、计数、脉冲测量等功能的关键。本章将深入讲解定时器/计数器的各种工作模式,并给出丰富的应用实例。例如,利用定时器实现精确的LED闪烁(可编程频率),利用定时器实现按键消抖,利用定时器测量脉冲宽度和频率,以及利用定时器产生PWM(脉冲宽度调制)信号,用于控制电机转速或LED亮度。我们还会介绍如何使用两个定时器协同工作,实现更复杂的功能。 第七章 中断系统的工作原理与应用 中断是单片机处理突发事件和提高效率的重要机制。本章将详细讲解51单片机中断系统的所有细节。我们将深入分析外部中断(INT0、INT1)、定时器中断、串口中断等中断源的触发条件、中断优先级、中断向量地址以及中断响应过程。重点演示如何编写中断服务程序,如何处理中断嵌套,以及如何通过中断实现多任务并行处理,例如,一个中断用于接收串口数据,另一个中断用于控制LED闪烁,从而实现系统的高效响应。 第八章 串行通信(UART)详解 串行通信是单片机与其他设备进行数据交换的重要方式。本章将全面介绍51单片机的串行通信接口(UART)的工作原理和应用。我们将详细讲解UART的波特率发生器、发送/接收缓冲器、数据位、停止位、奇偶校验位等参数的设置。重点演示如何利用C语言实现单字节发送/接收,以及如何实现不定长数据的收发。本章还将给出实际应用案例,例如,单片机与PC机的串口通信(通过MAX232芯片),单片机之间通过串口进行数据交换,以及连接蓝牙模块或Wi-Fi模块进行无线通信的初步思路。 第三部分:实用外设接口与综合项目实战 第九章 数码管显示技术 数码管作为一种常见的显示器件,在仪器仪表、电子时钟等产品中应用广泛。本章将详细介绍数码管的驱动原理,包括共阳极数码管和共阴极数码管的区别,以及其引脚功能。重点演示如何利用I/O端口驱动单个数码管和多位数码管显示,包括静态显示和动态扫描显示。本章还将介绍如何通过C语言程序在数码管上显示数字、字母,甚至一些简单的ASCII字符,并给出实例,如数字时钟显示、计算器结果显示等。 第十章 键盘输入技术 键盘是用户与单片机交互的重要输入设备。本章将深入讲解键盘的结构和输入原理。我们将介绍矩阵键盘的扫描原理,包括行扫描和列扫描。重点演示如何编写C语言程序,实现矩阵键盘的键值识别,并给出详细的扫描码解析方法。本章还将介绍如何处理按键的按下、抬起以及长按事件,并提供实例,如简单的计算器、菜单选择等。 第十一章 ADC与DAC接口应用 模数转换器(ADC)和数模转换器(DAC)是单片机与模拟世界进行交互的关键。本章将介绍常用的ADC芯片(如PCF8591、ADC0804)和DAC芯片(如DAC0832)的接口原理和使用方法。重点讲解如何通过C语言程序读取ADC采样值,实现对模拟信号(如温度、光照强度、电压)的测量。同时,还将演示如何利用DAC输出模拟信号,例如,产生不同频率和幅度的正弦波、方波等。 第十二章 PWM及其应用 脉冲宽度调制(PWM)是一种高效的模拟信号控制方法。本章将详细阐述PWM的产生原理,以及在51单片机中的实现方式。我们将介绍如何通过定时器产生不同占空比的PWM信号,并重点讲解其在电机调速、LED亮度调节、舵机控制等方面的实际应用。本章还将给出详细的PWM参数计算和代码实现。 第十三章 SPI与I2C总线通信 SPI(Serial Peripheral Interface)和I2C(Inter-Integrated Circuit)是两种常用的串行通信协议,广泛应用于单片机与各类传感器、存储器、显示模块之间。本章将详细介绍SPI和I2C总线的硬件接口、通信原理、时序关系以及主从设备的工作方式。重点演示如何利用C语言编写相应的驱动程序,实现与SPI接口的EEPROM(如25LCxx系列)、SD卡,以及I2C接口的LCD1602、OLED显示屏、传感器(如BMP180、DS18B20)等外设的数据读写和控制。 第十四章 综合项目实战 本章将通过几个综合性的项目,将前面所学的知识融会贯通,帮助读者巩固和提升实际应用能力。我们将设计并实现一些具有代表性的嵌入式系统,例如: 电子时钟模块: 结合RTC(实时时钟)芯片(如DS1302/DS3231),实现精确的时间显示,并支持闹钟功能。 简易数据采集与显示系统: 利用ADC采集环境传感器数据(如温度、湿度),并通过LCD/OLED显示,同时可通过串口将数据发送到PC端。 红外遥控接收与控制系统: 学习红外遥控信号的编码和解码原理,实现用遥控器控制LED、电机等设备。 智能家居模拟系统: 结合多个传感器和执行器,模拟一个简单的智能家居场景,例如,光照强度控制LED灯亮灭,温度过高时报警等。 附录 51系列单片机指令系统速查表 51系列单片机常用寄存器功能说明 开发工具软件使用说明(如Keil C51) 常用传感器/模块的中文数据手册链接 本书特色 C语言驱动: 全面采用C语言作为开发语言,符合现代嵌入式开发的潮流,更易于学习和维护。 实例丰富: 每一章节都配有大量精心设计的、可执行的代码实例,让读者“看得懂,学得会,用得上”。 循序渐进: 内容从基础到深入,从原理到应用,逻辑清晰,适合不同层次的读者。 全面覆盖: 涵盖了51单片机开发所需的绝大部分核心知识点和常用外设接口。 实践导向: 强调动手实践,通过项目实战帮助读者提升解决实际问题的能力。 光盘内容 本书附带的光盘提供了丰富的配套资源,包括: 开发环境软件: Keil uVision集成开发环境的安装包和注册机。 源代码: 本书所有例程的C语言源代码,方便读者参考和修改。 硬件电路图: 书中涉及的重点实验电路的原理图。 仿真软件: 部分单片机仿真软件,用于脱机调试。 相关资料: 51系列单片机的数据手册、常用芯片的数据手册、PDF格式的参考书籍等。 通过本书的学习,读者将能够独立完成基于51系列单片机的各种嵌入式系统的设计与开发,为进一步学习更高级的微控制器打下坚实的基础。