描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787302626893丛书名: 计算机科学与技术丛书
本书内容安排从每个阶段实用的角度出发,秉持着通俗易懂的原则,第一部分主要为介绍单片机入门知识,选择了市面上常用的4种单片机(STC89C52RC、PIC16、MSP430和STM32)与开源界非常流行的Arduino开发平台进行对比,帮助读者了解不同单片机的开发方式。第二部分结合实际单片机项目中的方法与技巧,从工程的角度出发,讲解单片机的进阶知识。
单片机是一门对综合性知识要求非常高的课程,单片机的入门一直以来对初学者来讲是个老大难题,而入门后如何将这些知识运用到实际项目中,进一步提升单片机开发使用技能又是一个难题。一般来讲,实战项目带有很多技巧性,需要大量的知识和经验积累。针对这些情况,本书将从入门和实用的角度出发,全面系统的介绍单片机从入门到进阶及实战的技巧。全书包含两大部分,第一部分以单片机入门为主,通过对比8051、PIC16、MSP430、STM32多种单片机和Arduino开发平台下I/O、中断、定时器、扩展芯片、I2C总线、SPI总线及串口等外设模块的使用方式,总结介绍了一套适用于通用单片机外设的开发方法;第二部分结合实际单片机项目中的方法与技巧,从工程的角度出发,围绕读者将会面对的工程领域电路及软件开发方法、代码规范、模块化程序编写、项目基本开发流程、实用状态机编程、单片机操作系统思维方式编程、算法的本质及常用算法原理与应用场景、单片机中的数据结构、代码版本管理、基于模型开发方式实例分析与移植、Arduino开发平台介绍与基本使用方法、VS Code开发工具在单片机中的应用,让入门读者近距离感受工程项目中的开发方式。 本书适合作为电子信息类本、专科学生入门与进阶单片机知识的参考书,也可作为电子爱好者实战参考书,对于单片机或嵌入式工程师来讲也是一本不错的参考书籍。
入门篇
第1章经典的LED例子
1.18051单片机点亮LED
1.2PIC单片机点亮LED
1.3MSP430单片机点亮LED
1.4STM32单片机点亮LED
1.5Arduino点亮LED
第2章LED点亮例子剖析
2.1LED电路解析
2.2单片机科普
2.2.1计算机主板
2.2.2手机CPU
2.2.3单片机内部组成
2.3单片机运行程序解剖
2.3.1CPU运行程序的本质
2.3.2点亮一颗LED汇编代码剖析
第3章初学者搭建电路神器——面包板
3.1初学者使用面包板的好处
3.2面包板使用简介
3.3面包板在实际项目中的妙用
3.3.1原型电路验证
3.3.2单片机连接分立元器件或模块
3.3.3多平台、多模块系统验证
第4章开发环境搭建
4.18051单片机Keil开发环境搭建
4.1.18051单片机软件安装与编译
4.1.2STC系列8051单片机固件下载
4.2STM32单片机开发环境搭建
4.2.1STM32单片机软件安装与编译
4.2.2STM32单片机固件下载
4.3MSP430开发环境搭建
4.3.1软件安装与编译
4.3.2代码下载
4.4PIC开发环境搭建
4.4.1软件安装与编译
4.4.2PIC单片机代码下载
4.5Arduino开发环境搭建
4.5.1Arduino IDE开发环境搭建
4.5.2Arduino IDE代码下载
4.5.3MSP430 Arduino开发环境搭建
4.6Proteus仿真环境搭建
第5章I/O端口的基本输出——多变的输出控制
5.1I/O基本知识
5.1.1万物皆有电阻
5.1.2欧姆定律
5.1.3I/O专业术语
5.2单片机I/O端口输出电路内部剖析
5.2.1STC单片机I/O端口
5.2.2PIC16单片机I/O端口
5.2.3MSP430单片机I/O端口
5.2.4STM32单片机I/O端口
5.3I/O作为输出使用的几种方式
5.3.1小电流输出驱动
5.3.2电平匹配或小功率驱动
5.3.3大功率大电压驱动
5.3.4设备工作电压远高于安全电压
第6章I/O端口的基本输入——不限于按键输入
6.1开关基础知识普及
6.1.1微动开关
6.1.2感应开关
6.1.3电容触摸开关
6.1.4人体感应模块
6.1.5普通6×6按键
6.2单片机I/O输入模式
6.2.1上拉输入
6.2.2下拉输入
6.2.3浮空输入
6.3单片机I/O端口输入电路内部剖析
6.3.18051单片机I/O输入
6.3.2PIC16单片机I/O输入
6.3.3MSP430单片机I/O输入
6.3.4STM32单片机I/O输入
6.4几种常用的输入方式
6.4.1直连单片机I/O端口
6.4.2匹配电平后连接单片机I/O端口
6.4.3超过安全电压或跨距离信号输入
第7章单片机引脚不够用——外挂扩展芯片
7.1使用扩展芯片情形及步骤
7.28051单片机驱动——8线译码器
7.38051单片机实现74HC245收发器驱动
7.48051单片机驱动74HC573锁存器
第8章中断——单片机“一心多用”却不落下重要事情
8.1生活中的中断场景
8.28051单片机外部中断
8.3PIC16单片机中断
8.4MSP430单片机中断
8.5STM32单片机中断
8.6Arduino外部中断
8.7外部中断总结
第9章不甘只为定时器——它还有很多妙用
9.18051单片机定时器
9.2PIC16定时器
9.3MSP430定时器
9.4STM32定时器
9.5Arduino定时器
9.6定时器使用总结
第10章较少引脚多做事——总线
10.1总线的诞生
10.2总线初探
10.2.1手动模拟驱动74HC595
10.2.28051单片机驱动74HC595
10.3SPI总线原理与使用
10.3.1SPI总线介绍
10.3.28051单片机驱动MCP23S08输出
10.3.38051单片机读取MCP23S08按键值
10.4I2C总线驱动PCA9554
10.4.1I2C总线简单介绍
10.4.2输出控制流水灯
10.4.3读取I2C输入数据控制LED
第11章串口通信——单片机与外界沟通常用方式
11.1原始通信方式与基本模式
11.1.1单工通信模式
11.1.2半双工通信模式
11.1.3全双工通信模式
11.2串口通信由来
11.3串口通信单片机实现
11.3.18051单片机串口通信
11.3.2PIC16单片机串口通信
11.3.3MSP430单片机串口通信
11.3.4STM32单片机串口通信
11.3.5Arduino单片机串口通信
11.3.6串口通信总结
11.4同是串口通信,别被接口和协议弄糊涂
11.4.1串口通信物理接口
11.4.2串口通信协议
第12章非常重要却常被忽略的技能——调试
12.1使用硬件调试器
12.1.1PIC单片机调试
12.1.2MSP430单片机调试
12.1.3STM32调试
12.1.4单片机调试器使用总结
12.2一颗LED能反馈的信息众多
12.2.1定时器中断中使用LED调试
12.2.2串口通信中使用LED调试
12.2.3LED直接显示设备状态
12.3使用最方便的调试方式——串口
12.4任何时候要有快速找到解决问题的办法
12.4.1软硬件问题确定
12.4.2尽可能用熟悉的东西,找可靠渠道购买
第13章有趣的显示方式
13.1生活中的LED变形记
13.2单总线全彩灯
第14章A/D——数字与模拟世界沟通的桥梁
14.1A/D原理
14.2PIC单片机A/D
14.3MSP430单片机A/D
14.4STM32单片机A/D
14.5Arduino A/D
第15章以为只是PWM,没想到有这么多“魔法”
15.1PWM介绍
15.1.1多种方式实现PWM
15.1.2专用名词解释
15.2呼吸灯原理剖析
15.3舵机控制
15.4步进电动机控制
15.4.1步进电动机原理
15.4.2步进电动机控制实现
15.5PWM直流电动机调速
提高篇
第16章学了很多东西,实际项目中如何用——硬件部分
16.1实际项目电路与单片机入门电路差距
16.2供电电路
16.2.1开发板供电
16.2.2消费电子产品供电
16.2.3工业控制器供电
16.2.4车用控制器供电
16.2.5电源电路总结
16.3输入电路
16.3.1开发板输入电路
16.3.2工业输入电路
16.3.3车用输入电路
16.4输出电路
16.4.1工业功率输出电路
16.4.2车用功率输出电路
16.5A/D采集电路
16.5.1工业A/D输入电路
16.5.2车用A/D输入电路
16.6通信电路
16.6.1开发板通信电路
16.6.2车用通信电路
16.7对比分析总结
第17章别让单片机学习停留在点亮LED
17.1初学者单片机软件能力徘徊不前
17.2怎么改变这种现状
17.2.1项目分解能力
17.2.2程序框架搭建能力
17.2.3算法能力
17.3单片机成长捷径
17.4站在巨人的肩膀上
17.4.1Arduino平台
17.4.2开源代码托管平台
第18章要想路走得远,编程规范少不了
18.1组织结构
18.1.1工程文件组织结构
18.1.2文件夹代码组织结构
18.1.3程序结构
18.2标识符命名
18.2.1命名基本原则
18.2.2宏与常量命名
18.2.3变量命名
18.2.4函数命名
18.2.5文件命名
18.3代码排版
18.3.1代码缩进
18.3.2代码分行
18.3.3头文件
18.3.4注释排版
18.3.5代码可读性
18.4注释
18.4.1注释基本原则
18.4.2文件注释
18.4.3函数与代码注释
18.6变量、结构、常量、宏
18.7函数规范
18.7.1函数命名
18.7.2函数参数
18.8变量和结构规范
18.9宏表达式与常量规范
18.10表达式规范
第19章模块化程序编写
19.1点亮LED模块化程序改造
19.1.1.h文件编写
19.1.2.c文件编写
19.2模块化程序编写进阶
19.3打造可重复利用的软件模块
第20章多功能电子钟——项目开发基本流程
20.1项目需求
20.2项目规格说明
20.3项目总体方案
20.4项目概要设计
20.4.1硬件概要方案
20.4.2软件概要设计
20.5项目详细设计
20.6项目调试与验证
20.7项目测试
20.8项目批量阶段
第21章网红楼梯灯
21.1项目需求
21.2项目规格说明
21.3项目总体方案
21.4项目概要设计
21.4.1硬件概要方案
21.4.2软件概要方案
21.5项目详细设计
21.5.1硬件详细方案
21.5.2软件详细方案
21.6项目调试与验证
21.7项目测试
第22章状态机编程,不止于按键
22.1状态机实现按键功能
22.2状态机基本原理与实现
22.3状态机串口接收协议
22.3.1简单版串口协议
22.3.2实用串口协议
第23章可以不用操作系统,但是要会操作系统方式编程
23.1不要被操作系统吓到,其实它也可以很简单
23.2动手写一个简单操作系统
23.2.1构造一个简单的调度器
23.2.2任务更新与启动
23.3与市面主流系统对比
第24章算法和程序是两码事
24.1程序和算法
24.1.1算法本质
24.1.2程序本质及与算法之间联系
24.2单片机项目中的典型算法
24.2.1滤波算法
24.2.2PID算法
24.2.3校验算法
24.3别在程序上花太多时间,算法才是值得付出的
第25章Windows和单片机平台算法对比
25.1贪吃蛇
25.1.1贪吃蛇游戏实现要点
25.1.2贪吃蛇原理解析
25.2Windows系统下贪吃蛇代码解析
25.2.1游戏区域初始化
25.2.2绘制食物与蛇身
25.2.3检测蛇碰撞
25.2.4蛇吃食物
25.2.5蛇身移动坐标更新
25.2.6蛇身变换方向
25.3单片机实现贪吃蛇
25.3.1游戏变量与宏定义
25.3.2复位蛇身与游戏开始
25.3.3按键检测与设定蛇运动方向
25.3.4蛇身移动坐标更新
25.3.5吃食物检测
25.3.6产生新食物
25.3.7碰撞检测
25.3.8显示蛇与食物
25.4俄罗斯方块
25.4.1俄罗斯方块类型
25.4.2方块下落显示区域
25.4.3预览方块和分数显示
25.4.4按键检测和移动方块
25.4.5旋转方块
25.4.6方块消除
第26章数据结构——感受不到你的存在
26.1链表——多任务调度
26.1.1单向链表
26.1.2双向链表
26.2队列——通信缓冲
26.2.1环形队列基本操作
26.2.28051单片机队列操作示例
26.2.3队列操作在实时系统中的应用
第27章代码版本工具——让代码管理更规范
27.1混乱的代码管理方式
27.1.1复制粘贴——标题命名法
27.1.2复制粘贴——日期管理法
27.3使用工具科学管理代码,让重复的代码不再重复
27.3.1代码管理软件介绍
27.3.2代码管理软件安装
27.3.3代码管理软件打开与使用
27.4Git科普及作用
27.4.1Git简介
27.4.2Git能够解决的问题
27.4.3Git实现原理
第28章不用写一行代码的开发方式——基于模型开发
28.1一个基于模型的简单例子
28.2当你以写代码为荣时,殊不知正在被机器悄悄取代
28.3任意单片机使用基于模型开发
28.3.18051单片机使用Simulink模型开发
28.3.2Simulink生成模型代码简单剖析
28.3.3其他单片机模型移植
28.4基于模型开发方式进阶思考
第29章打造实用的Arduino平台
29.1打造个人的Arduino开发平台
29.1.1添加Arduino支持的单片机类型
29.1.2添加Arduino软件库
29.2Arduino IDE多文件工程建立
29.3多种仿真平台总有一个适合你
29.3.1使用Proteus仿真Arduino
29.3.2在线TinkerCAD仿真
29.3.3使用在线Wokwi仿真
第30章万能开发工具VS Code
30.1VS Code简介
30.2VS Code开发环境搭建
30.3单片机开发平台PlatformIO
30.3.1添加PlatformIO扩展插件
30.3.2PlatformIO新建8051单片机工程
30.3.3PlatformIO新建Arduino工程
为初学者打造一本全方位介绍单片机入门与进阶的图书,帮助初学者入门,并梳理单片机学习过程中的整个脉络是本书的主旨。可能有读者会问,市面上有这么多单片机入门书和视频,本书在内容上有什么优势?这里简单谈谈自己的看法,笔者曾经带过很多初学者,也经常与刚踏入单片机行业或放弃该行业的从业者进行交流,加上笔者本身是通过一步步自学过来的,对单片机学习过程中的“坑”深有体会,这里所讲的“坑”倒也不是学习单片机本身面临的知识点难度,而是适合初学者的一套学习方法。所以在本书中,读者也将看到介绍方法与思路贯穿全书。其实各行各业都一样,入门这一步非常困难,困难在刚开始读者对很多知识(以单片机为例: C语言、单片机原理、模拟电路基础知识、数字电路基础知识、计算机原理、I2C总线、SPI总线、寄存器)都不懂,不知道从何学起,但是一旦入门,很多读者经常会感慨“原来就这么回事”,脉络清晰了,怎么去补充知识,怎么去学,自然而然也就清晰了。本书内容仅仅帮助初学者如何去学习,限于篇幅,许多知识点没有进一步展开介绍,俗话说得好: “师傅领进门,修行靠个人。”单片机和嵌入式开发也一样,入门之后,可每个人根据职业规划或爱好朝着自己的方向不断地补充新的知识和技能。
许多初学者以为单片机开发就是写代码,在笔者看来,写代码应该放到最后一步。首先读者需要将整个单片机项目分解、细化,看一下哪些知识点是自己熟悉的,哪些知识点是自己不熟悉的,不熟悉的知识点再进一步分解成哪些是需要花时间与精力解决的,整个项目要使用什么样的软件框架,把关键问题解决之后再去写代码,会起到事半功倍的效果。
掌握模块化设计思路,其实各行各业都有这种模块化思想,例如一辆机动车自上而下看包括发动机、变速箱、底盘、外观、内饰等,如果再进一步分解发动机,则包括排气系统、进气系统、冷却系统、燃油系统、配气机构、曲轴连杆等模块。单片机系统中这种模块化思想也体现得淋漓尽致,一个单片机包括CPU、RAM、Flash、时钟系统、输入输出(I/O)、I2C、SPI、串口、定时器、RTC模块等;一个单片机项目包含的程序模块通常有数字输入模块、数字输出模块、通信模块、系统调度模块等,掌握这种模块化设计思想会让你在各行各业中获益良多。
笔者是个物理爱好者,大学期间学的也是物理学专业,出于对电子技术的热爱,从大二开始,不断参加各种科技、电子协会,帮助班上和在校同学解决各种电器问题,小到吹风机、音响,大到电视机、计算机、空调、洗衣机等,还多次积极协助组织参与“三下乡”活动,将科技知识带进农村,为老百姓切切实实答疑解惑并解决实际电器问题。此外,笔者也多次参加各层级举办的电子类竞赛,尽管有的比赛成绩不是很理想,但是在竞赛过程中都能学有所获,受益良多。正是这些实战经历,使笔者在很多方面对单片机和嵌入式的理解比较独特,也希望这些独特的理解能帮到各位读者。
本书内容安排从每个阶段实用的角度出发,秉持着通俗易懂的原则,第一部分主要介绍单片机入门知识,与众多介绍单片机入门的方式不同,笔者特地选择了市面上常用的4种单片机(STC89C52RC、PIC16、MSP430和STM32)与开源界非常流行的Arduino开发平台进行对比,一方面通过对比帮助读者了解不同单片机的开发方式; 另一方面也可以总结这些单片机开发方式的共同点,以便读者以后碰到新单片机时可以将这种技巧快速应用其中。另外需要指出的是,关于上面4款单片机其实在业内有非常优秀的入门教程,8051单片机有郭老师的《10天学会单片机》视频、STM32有野火的《零死角玩转STM32》和正点原子的《手把手教你学STM32》,所以在介绍该部分内容时笔者只挑重点,有些甚至是一笔带过,但是该部分资料都会统一放在本书提供的资源中。
一直以来,单片机进阶是很多初学者面临的老大难问题,一方面市面上系统性的书籍比较少; 另一方面单片机进阶学习需要结合实际项目,单纯通过理论方式很难将这些经验描述到位。笔者花了很多心思梳理了单片机进阶的整个知识框架,从第16章在实际工程应用中的电路着手到第17章的软件痛点分析,其中参考了网上大量文章及初具规模公司中实用的一些规范; 第18章介绍了基础版的代码规范,旨在帮助读者养成一个良好的代码编写习惯。实际项目中的程序往往是复杂但又有迹可循的; 第19章特地介绍了如何编写模块化程序,以便读者更好地读懂和编写有一定代码量的单片机程序,而要做好一个单片机项目,特别是在多人协作开发时,一个好的研发流程显得尤为重要,很多技术公司发展到一定规模后都面临流程上的问题; 第20章以一个实际的案例介绍了一个完整项目的基本开发流程,为了更进一步让读者对这种开发方式有所理解; 第21章特地补充了一个实际做好的项目,帮助读者巩固研发流程; 从第22章开始主要介绍一些实际项目中的技巧,例如第22章中的状态机原理及实际项目中哪些地方用到状态机,并进一步延伸出状态机更广泛的用途; 第23章则使用通俗易懂的方式介绍操作系统方式编程和如何打造一个基础版的操作系统,通过与市面上主流的实时系统μC/OSⅡ做对比,读者会发现其实开发操作系统也没有想象中那么难。在校期间,很多计算机与电子类专业学生经常会听到老师说算法才是程序的灵魂,但是算法到底是什么及单片机中算法该如何应用在第24章中进行了详细介绍。为了让读者进一步认识算法; 第25章和第26章详细介绍了两个非常熟悉的游戏(贪吃蛇与俄罗斯方块)在Windows和单片机上的实现方式,让读者可以更进一步地理解算法的本质。单片机软件本身是抽象的,单片机能实现相应功能,其实主要是程序编写者的功劳,为了将这些单片机资源利用好,数据结构起到了重要作用,第26章还详细介绍了单片机中常用的几种数据结构。许多单片机入门者包括从业多年的工程师对于如何维护代码一直比较模糊,特别是多人协作开发同一个项目时,这种问题显得尤为突出; 第27章针对当前流行的分布式代码版本管理作了基础和实用的介绍,这种管理方式无论是对于写代码还是文档管理都是一个非常不错的选择。笔者认为技术从业者要勇于探索和拥抱新的技术、新的开发方式,人类社会的进步就是机器不断取代人力的过程,单片机开发也一样,特别是长期从事单片机开发行业的工程师应该有感触,绝大部分时间是在做一些普通人都能做的事情,对于一款单片机来讲它的资源、开发方式基本上是固定的,所以第28章介绍了一种基于模型的开发方式,这种开发方式在未来一定会得到全面普及,只是以何种方式、何时出现的问题。一个好的工具、平台同样也能提高项目的开发效率,第29章介绍的Arduino开发平台,尽管许多读者非常熟悉,但是也希望通过本书的这种介绍方式使读者能对开源平台有一个全新的理解,而第30章的VS Code也算是微软近年来的大作,几乎横跨整个代码界,其便捷性和可扩展性给工程师带来了极大的便利性。
最后感谢周围关心与支持笔者的亲人与朋友。
本书写作过程比较仓促,书中难免存在疏漏之处,希望读者能够批评指正,也真心希望读者能通过本书学到或悟到一些对您有用的东西。
王良升2022年10月
配套资源
评论
还没有评论。