前 言
在单片机的“江湖”中,8051单片机历来都是兵家必争之地。这是因为8051单片机有着悠久的历史和最为庞大的用户群,很多时候它已经成为8位单片机领域的一种行业标准,众多器件都会以8051单片机为例给出驱动代码。作为单片机的初学者,选择从8051单片机起步绝对是一个非常正确的选择。
本书将采用一个全新的方式,带领你从零基础开始学习单片机和C语言编程,不仅让你在学习的过程中认识常用的电子元器件及其识别方式,而且使你快速地掌握8051单片机原理以及如何使用C语言来为其编写程序。当阅读完本书的全部内容后,你将会真正体会到8051单片机的经典传承和“电子DIY”的无穷魅力,从而使你走上电子研发工程师的梦想之旅!
全书共计四篇28章,第一篇是入门篇,主要介绍基础的电子元器件、DIY常用的工具、C语言基础知识,以及如何使用μVision2集成开发环境为8051系列单片机开发应用程序。第二篇是基础篇,重点介绍8051系列单片机内中断、定时器、串行口等的原理及应用。第三篇是应用篇,重点介绍基础的数字电路,以及如何扩展8051系列单片机的I/O口数量并提高总线的驱动能力等。第四篇是提高篇,主要介绍如何利用8051系列单片机强大的编程能力来模拟常用的总线时序,以实现与外围数字器件的通信。
本书不拘泥于概念和原理的探究,而是立足于实践,从系统板和基础电路起步,一章一个例子、一章一个实验、一章一小结、一个模块一套或多套代码,每篇结尾处还有综合的实验环节,让你低投入、快速入门8051系列单片机的开发。
本书定位于学生或电子爱好者的入门指导书,阅读本书没有学历、基础知识的限制,只要享受阅读、勤于动手,读者有无基础都可以在短时间内入门8051系列单片机的开发。本书使用流行的C语言编写全部代码,因此本书还是一本C语言的开发实践书,为用户在今后进行嵌入式开发和程序代码的移植带来方便。
本书的配套视频教程是《我和单片机的21天之旅》,读者可以到优酷网下载观看,该视频教程自2009年在优酷网上推出以来,深受大专院校师生和广大单片机爱好者的喜爱,本书是在该视频教程的基础上,进行了进一步的内容充实和归纳整理,是视频教程的凝练和升华。
由于作者水平所限,加之写作时间仓促,书中难免存在错误,在此恳请读者和有识之士给予批评斧正,也欢迎大家通过互联网与我分享8051系列单片机的开发心得。
本书得以出版,要特别感谢机械工业出版社华章公司缪杰以及幕后的工作人员,他们对本书的选题、立意、编写以及后续的修改给予了大力支持和指导。另外要感谢的是我的哥哥高显功,作为高级电气工程师并出于浓厚的亲情,在百忙的研发工作中抽出了宝贵的时间,担任了本书的校对工作,并对本书的编写方法提出了很多有价值的指导意见。最后要感谢我的家人,在我奋笔疾书的日日夜夜,照顾了我的饮食起居,让我能更加专注于本书的创作。
尺有所短,寸有所长。如果你时常会对电子设备萌发出一些新奇的想法或创意,请一定将其捕捉起来,并通过本书的阅读和实践,努力地将其变为现实,这也许就是你走上研发之路的起点,你的人生也会因此变得更加精彩纷呈。再次感谢您选择阅读本书,祝学业有成,事业顺达!
高显生
2016年4月于哈尔滨
目 录
前言
第一篇 一切从“芯”开始
第1章 缤纷电世界
1.1 电路中的秘密
1.1.1 欧姆定律
1.1.2 电压、电阻和电流
1.2 小元器件有大智慧
1.2.1 电阻器
1.2.2 电位器
1.2.3 电容器
1.2.4 电感器
1.2.5 继电器
1.2.6 蜂鸣器
1.2.7 晶体振荡器
第2章 神秘的半导体
2.1 二极管
2.1.1 二极管的原理
2.1.2 二极管的功能
2.1.3 发光二极管
2.1.4 稳压二极管
2.2 晶体管
2.2.1 晶体管的原理
2.2.2 晶体管的功能
2.3 场效应晶体管
2.3.1 结型场效应晶体管
2.3.2 绝缘栅型场效应晶体管(MOS管)
2.4 集成电路
2.4.1 集成电路的特点
2.4.2 集成电路的分类
2.5 模拟与数字
2.5.1 模拟信号
2.5.2 数字信号
2.5.3 模拟电子电路
2.5.4 运算放大器
2.5.5 数字电子电路
2.5.6 逻辑状态0和1
2.5.7 逻辑门
第3章 入门C语言
3.1 数据和运算
3.1.1 C语言的由来
3.1.2 数的进制
3.1.3 码制
3.1.4 数据类型
3.1.5 常量
3.1.6 变量
3.1.7 运算符
3.1.8 复合赋值运算符
3.2 语句
3.2.1 控制语句
3.2.2 其他语句
3.3 函数
3.3.1 自定义函数
3.3.2 函数的声明和调用
3.4 程序
3.4.1 程序的构成
3.4.2 程序的注释
3.4.3 局部变量和全局变量
3.5 预处理命令
3.5.1 宏定义
3.5.2 文件包含
3.6 构造类型数据
3.6.1 数组
3.6.2 结构体
3.6.3 共用体
第4章 8051单片机
4.1 内部架构
4.1.1 运算和控制
4.1.2 8051的由来
4.1.3 冯·诺依曼结构
4.1.4 8051的功能组件
4.2 8051的引脚功能
4.2.1 引脚排列
4.2.2 I/O口的内部结构
4.3 基本运行电路
4.3.1 时钟电路
4.3.2 时序
4.3.3 复位电路
第5章 DIY最小系统
5.1 元器件的布放
5.1.1 PCB
5.1.2 洞洞板
5.1.3 面包板
5.2 工具和材料
5.2.1 焊接的工具
5.2.2 焊接的方法
5.2.3 测量工具
5.3 搭建最小系统
5.3.1 确定目标单片机
5.3.2 ISP下载
5.3.3 面包板上的8051
第6章 第一个C程序
6.1 集成开发环境
6.1.1 软件开发流程
6.1.2 工具集
6.2 C51功能扩展
6.2.1 数据类型
6.2.2 存储器类型
6.2.3 存储模式
6.2.4 中断服务程序
6.3 编写C程序
6.3.1 安装集成开发环境
6.3.2 安装ISP下载软件
6.3.3 软件开发项目的建立
6.3.4 编写C程序
6.3.5 程序的编译
6.3.6 烧写目标芯片
第二篇 经典的内部架构
第7章 软件仿真
7.1 位操作
7.1.1 DIY更加可靠的系统
7.1.2 位处理机
7.1.3 位寻址的应用
7.2 软件仿真的方法
7.2.1 μVision2调试器
7.2.2 调试工具
7.2.3 单步调试
7.2.4 使用断点调试
7.2.5 使用监视窗口调试
7.2.6 调试按钮的功能
7.2.7 寄存器的初始状态
7.3 库函数
7.3.1 库函数的分类
7.3.2 库函数的使用
7.3.3 头文件
第8章 驱动数码管
8.1 数码管的原理
8.1.1 内部结构
8.1.2 显示方式
8.1.3 段码
8.2 数码管的驱动
8.2.1 静态显示实例
8.2.2 动态显示实例
第9章 按键解码
9.1 键盘的原理
9.1.1 按键的确认
9.1.2 按键抖动的消除
9.1.3 键盘接口
9.2 键盘的编程
9.2.1 独立键盘的编程
9.2.2 矩阵键盘的编程
第10章 谁打断了我的工作
10.1 中断
10.1.1 中断源
10.1.2 中断的处理过程
10.1.3 中断的优先级
10.1.4 中断的相关寄存器
10.2 外部中断
10.2.1 外部中断的触发方式
10.2.2 外部中断的应用
第11章 肚子里的钟表
11.1 定时/计数器
11.1.1 定时/计数器的结构
11.1.2 定时/计数器的工作原理
11.1.3 定时/计数器的控制寄存器
11.1.4 定时/计数器的配置
11.2 定时/计数器的编程应用
11.2.1 基于中断的定时器应用
11.2.2 基于查询标志位的定时器应用
第12章 串行通信
12.1 通信方式
12.1.1 并行通信和串行通信
12.1.2 单工通信和双工通信
12.1.3 同步通信和异步通信
12.2 通用异步收发器
12.2.1 UART的结构
12.2.2 UART的控制寄存器
12.2.3 串行口的工作方式
12.2.4 数据的校验
12.2.5 波特率的设定
12.3 串行通信接口
12.3.1 串行接口的电气标准
12.3.2 串行接口的物理标准
12.3.3 多机通信
12.4 串行口的编程应用
第三篇 越来越少的I/O口
第13章 让驱动更给力
13.1 总线收发器
13.1.1 I/O口的驱动能力
13.1.2 74HC245的功能
13.1.3 总线收发器的应用
13.2 总线收发器的编程应用
第14章 数据的闸门
14.1 锁存器
14.1.1 74HC573的功能
14.1.2 74HC573的引脚排列
14.2 锁存器的编程应用
第15章 三八译码器
15.1 三八译码器的原理
15.1.1 74HC138的功能
15.1.2 74HC138的引脚排列
15.1.3 点阵显示块
15.1.4 74HC138的应用
15.2 74HC138的编程应用
15.2.1 显示心形图案
15.2.2 让图像动起来
第16章 串入并出
16.1 串入并出
16.1.1 74HC595的功能
16.1.2 74HC595的引脚排列
16.2 74HC595的编程应用
16.2.1 74HC595驱动数码管
16.2.2 74HC595驱动点阵显示块
第17章 能听话的电动机
17.1 步进电动机的特点
17.1.1 步进电动机的分类
17.1.2 步进电动机的工作原理
17.1.3 步距角的计算方法
17.2 28BYJ48型步进电动机
17.2.1 28BYJ48电动机性能指标
17.2.2 28BYJ48电动机线圈结构
17.2.3 步进电动机的励磁方式
17.3 步进电动机的驱动
17.3.1 ULN2003的功能
17.3.2 ULN2003的驱动电路
17.4 步进电动机的编程应用
第18章 控制无处不在
18.1 脉冲宽度调制
18.1.1 模拟控制与数字控制
18.1.2 PWM的理论基础
18.1.3 PWM波形的特点
18.2 PWM的编程应用
18.2.1 PWM调光实验
18.2.2 PWM调速实验
第四篇 总线魔术师
第19章 被诅咒的玻璃
19.1 1602液晶显示器
19.1.1 1602液晶的特点
19.1.2 1602液晶的引脚功能
19.1.3 1602液晶的显示数据RAM
19.1.4 1602液晶的字符发生器
19.1.5 1602液晶的工作时序
19.1.6 1602液晶的操作指令
19.2 1602液晶的编程应用
19.2.1 通用字符显示
19.2.2 自定义字符显示
第20章 数字万年历
20.1 实时时钟
20.1.1 DS1302的引脚排列
20.1.2 BCD码
20.1.3 DS1302的内部结构
20.1.4 DS1302的寄存器
20.1.5 DS1302的控制指令
20.1.6 DS1302数据传输格式
20.1.7 DS1302初始化
20.2 DS1302的编程应用
第21章 威武的SPI总线
21.1 SPI总线
21.1.1 SPI总线的结构
21.1.2 SPI的通信方式
21.2 存储器93C46
21.2.1 93C46的引脚功能
21.2.2 93C46的操作指令
21.2.3 93C46的传输时序
21.3 93C46的编程应用
第22章 优雅的I2C总线
22.1 I2C总线
22.1.1 I2C总线的特点
22.1.2 I2C总线通信协议
22.1.3 I2C器件的寻址
22.2 存储器24C02
22.2.1 24C02的引脚排列
22.2.2 24C02的操作
22.3 I2C总线的编程应用
第23章 模拟与数字间的转换
23.1 D/A转换器
23.1.1 D/A转换原理
23.1.2 D/A转换器的性能参数
23.2 A/D转换器
23.2.1 A/D转换器的分类
23.2.2 A/D转换器的工作原理
23.2.3 A/D转换器的性能指标
23.3 PCF8591转换器
23.3.1 PCF8591内部功能
23.3.2 PCF8591的控制
23.3.3 PCF8591的D/A转换
23.3.4 PCF8591的A/D转换
23.4 PCF8591的编程应用
23.4.1 D/A转换器的编程应用
23.4.2 A/D转换器的编程应用
第24章 发热的射线
24.1 红外线遥控的特点
24.1.1 红外遥控编码的帧结构
24.1.2 红外编码的方式
24.1.3 红外调制与解调
24.2 红外线的接收与发射
24.2.1 红外线解码
24.2.2 红外线编码
第25章 感受你的体温
25.1 DS18B20的功能介绍
25.1.1 DS18B20的特点
25.1.2 DS18B20的引脚定义
25.1.3 DS18B20的内部结构
25.1.4 温度值的存储方式
25.1.5 DS18B20的工作时序
25.2 DS18B20的控制指令
25.2.1 ROM指令
25.2.2 RAM指令
25.3 DS18B20的编程应用
25.3.1 DS18B20的供电
25.3.2 DS18B20的应用
25.3.3 DS18B20的编程
第26章 梅雨的季节
26.1 湿度传感器的功能
26.1.1 DHT11的性能指标
26.1.2 DHT11的典型应用
26.1.3 DHT11的通信时序
26.2 DHT11的编程应用
第27章 蝙蝠的回声
27.1 超声波测距
27.1.1 超声波测距模块的工作原理
27.1.2 超声波测距模块
27.2 超声波测距的编程应用
第28章 点阵也疯狂
28.1 点阵型液晶
28.1.1 COG液晶的功能
28.1.2 显示屏与显存的对应关系
28.1.3 显存的组织结构
28.1.4 读写时序
28.1.5 UC1701X指令集
28.2 点阵型液晶的应用
28.2.1 液晶显示器的接口电路
28.2.2 汉字的取模方法
28.2.3 图像的取模方法
28.2.4 汉字和图形显示
附录A 8051系列单片机系统板原理图
附录B 搭建系统板所需的材料清单
附录C 8051系列单片机全能型实验板:电立方/大学城系列
后记