描述
开 本: 16开纸 张: 纯质纸包 装: 平装是否套装: 否国际标准书号ISBN: 9787302354659
赞誉
前言
第1章 如何学习单片机
1.1 学什么类型的单片机
1.2 学习单片机的最佳方法
1.3 单片机学习的准备工作
1.4 单片机开发软件环境搭建
1.5 Keil基本概况介绍
1.6 答读者问
第2章 点亮你的LED
2.1 单片机的内部资源
2.2 单片机最小系统
2.2.1 电源
2.2.2 晶振
2.2.3 复位电路
2.3 LED小灯
2.4 程序代码编写
2.4.1 特殊功能寄存器和位定义
2.4.2 新建一个工程
2.4.3 编写点亮小灯的程序
2.5 程序下载
2.6 练习题
第3章 硬件基础知识学习
3.1 电磁干扰
3.2 去耦电容的应用
3.3 三极管在数字电路中的应用
3.3.1 三极管的初步认识
3.3.2 三极管的原理
3.3.3 三极管的应用
3.4 74HC138三八译码器的应用
3.5 LED闪烁程序
3.6 练习题
第4章 C语言基础以及流水灯的实现
4.1 二进制、十进制和十六进制
4.2 C语言变量类型和范围
4.3 C语言基本运算符
4.4 for循环语句
4.5 while循环语句
4.6 函数的简单介绍
4.7 Keil软件延时
4.8 流水灯程序
4.9 练习题
第5章 定时器与数码管基础
5.1 逻辑电路与逻辑运算
5.2 定时器的学习
5.2.1 定时器的初步认识
5.2.2 定时器的寄存器
5.2.3 定时器的应用
5.3 数码管的学习
5.3.1 数码管的基本介绍
5.3.2 数码管的真值表
5.3.3 数码管的静态显示
5.4 练习题
第6章 中断与数码管动态显示
6.1 C语言的数组
6.1.1 数组的基本概念
6.1.2 数组的声明
6.1.3 数组的初始化
6.1.4 数组的使用和赋值
6.2 if语句
6.3 switch语句
6.4 数码管的动态显示
6.4.1 动态显示的基本原理
6.4.2 数码管显示消隐
6.5 单片机中断系统
6.5.1 中断的产生背景
6.5.2 定时器中断的应用
6.5.3 中断的优先级
6.6 练习题
第7章 变量进阶与点阵LED
7.1 变量的作用域
7.1.1 局部变量
7.1.2 全局变量
7.2 变量的存储类别
7.3 点阵的初步认识
7.4 点阵的图形显示
7.5 点阵的动画显示
7.5.1 点阵的纵向移动
7.5.2 点阵的横向移动
7.6 练习题
第8章 函数进阶与按键
8.1 单片机最小系统
8.1.1 电源
8.1.2 晶振
8.1.3 复位电路
8.2 函数的调用
8.3 函数的形式参数和实际参数
8.4 按键
8.4.1 独立按键
8.4.2 矩阵按键
8.4.3 独立按键的扫描
8.4.4 按键消抖
8.4.5 矩阵按键的扫描
8.5 简易加法计算器
8.6 练习题
第9章 步进电机与蜂鸣器
9.1 单片机IO口的结构
9.2 上下拉电阻
9.32 8BYJ48型步进电机详解与实例
9.3.1 电机的分类
9.3.2 28BYJ48型步进电机原理详解
9.3.3 让电机转起来
9.3.4 转动精度与深入分析
9.3.5 编写实用程序的基础
9.3.6 包含综合应用的实用程序
9.4 蜂鸣器
9.5 练习题
第10章 实例练习与经验积累
10.1 数字秒表实例
10.1.1 不同数据类型间的相互转换
10.1.2 定时时间精准性调整
10.1.3 字节操作修改位的技巧
10.1.4 数码管扫描函数算法改进
10.1.5 秒表程序
10.2 PWM知识与实例
10.3 交通灯实例
10.4 51单片机RAM区域的划分
10.5 长短按键的应用
10.6 练习题
第11章 UART串口通信
11.1 串行通信的初步认识
11.2 RS232通信接口
11.3 USB转串口通信
……
第12章 指针基础与I602液晶的初步认识
第13章 I602液晶与串口的应用实例
第14章 I2C总线与E2PROM
第15章 实时时钟DSI302
第16章 红外通信与DS18B20温度传感器
第17章 模数转换A/D与数模转换D/A
第18章 RS-485通信与Modbus协议
第19章 实践项目开发——多功能电子钟
第20章 单片机开发常用工具的使用
附录A ASCII码字符表
附录B C语言运算符及优先级
附:KST-51开发板原理图
单片机技术是现代工业自动化、电子电气、通信及物联网等领域的一门主流技术。随着人们生活及生产方式的自动化、智能化程度越来越高,单片机技术早已融入我们生活的每一个角落,几乎所有的家电内部都有单片机的身影,无数的自动化及智能公共设施也都有单片机在其背后兢兢业业地工作着。同时,单片机技术也是学习ARM嵌入式系统、FPGA设计等更高阶技术的一个基础。
很多同学都想学好单片机技术,可能看了不少书,也付出了很多的努力,但却总感觉似懂非懂,遇上具体项目也很茫然而无从入手。目前市面上关于单片机开发的书有很多,但绝大多数,要么是过于理论化,全是架构讲述和汇编指令等,学了半天仍不知单片机为何物。要么只是一些很简单的小实验,学完后也只能做到点亮个小灯、显示个数字等,C语言指针都没有用到过,综合实践的例子更是一个没有。在学完这类教材后无法深入下去,很难跟实际项目开发衔接起来,于是可能会怀疑自己的能力,适不适合搞单片机。
从作者多年从事单片机领域的工作经验来说,单片机这东西,要说难的话真不怎么难,外行人看起来可能挺神秘,其实主要是没人帮忙去点破各种缘由,学不会的主要原因是方法不对头,没有专业的人员带领大家入门。
基于这些原因,我们编写了这本《手把手教你学51单片机(C语言版)》,并且配套了相关的视频教程、电子教案、源代码和实验开发板(详情点击www.kingst.org),手把手地带领大家来学习单片机技术,给单片机初学者带来福音,让大家一步一个脚印地掌握单片机技术。
《手把手教你学51单片机(C语言版)》这本书除了讲解简单的实验和编程语法、由浅入深地讲解单片机技术和C语言编程技巧外,更重要的是结合了多个模块,以实际工程项目的编程规则来逐步带领大家学习实际开发中的电路设计和编程思路。尤其是C语言的指针和结构体的灵活运用、单片机的多模块编程、实际项目开发流程指导等,更是当前单片机类教材中少见的瑰宝。通过对本教材的透彻掌握,可以使读者在进入公司后能够快速适应并能承担实际的项目开发,可以说这本教材为同学们搭建了从初学者步入工程师殿堂的桥梁。
本书特色
1) 实践为主,理论与实践相结合
现阶段,学习单片机不是为了应付考试,也不是为了去撰写论文,而是真正学会单片机开发技术。因此本书主要起到一个辅导实践的作用,通过每一章节的学习,目的不是让大家记住背过哪些理论,而是让大家知道如何去实际操作编程,了解方法后,大家就可以真正地去实践操作一下,从而达到学习和掌握单片机技术的目的。
2) 科学的学习方案,由浅入深循序渐进
众多初学者不知道单片机该如何学习,不要紧,本书为你制定了一套科学的学习方法和思路,只要紧跟着书中的方法和思路,按照书中要求的去实践,相信很快就可以学会单片机了。本书的学习套路和传统的方法大不相同,传统的是先讲基本原理,然后再举例,本书则是尽可能先举例子,建立起鲜活的形象,然后带领大家去探求其中的奥秘,逐一解释例程中的每个知识点的原理,这样会非常有利于大家对例程的理解。
3) 细致讲解,形象比喻
自然万物都是相通的,单片机也不例外。其实单片机技术的很多原理和道理都跟人们的实际生活类似。在课程讲解的过程中,会尽量把难以理解的技术问题和实际生活经验相联系,用形象的比喻来帮助大家透彻理解原理。
4) 例程丰富,设计规范,与实际项目紧密结合
以前的教材大多是学校老师或者专业写书人的著作,相对来说和实际项目开发有所偏离。我们认为: 学习技术,无限接近实际项目才是正道。因此参与编写此书的人员都是有着多年的丰富的实际项目开发经验的工程师,所有的电路设计、编程的思路和规范,都是与实际项目开发相结合的,这样大家在入门后,能够很快地投入到实际开发中去。
5) 重点关注实用技术
本书的内容偏重于单片机的应用而非详尽的理论阐述。传统的书籍作者一般会把和单片机、C语言相关的内容一一列举介绍出来,而本书的原则是常用的重点讲解分析,不常用的只做简单介绍,早已经过时的或者极少用到的内容直接不予理会,提高本书的精华度。用一位网友的描述就是: 都是干货,对实际开发相当有用。
6) 配套视频教程
除了纸质书本之外,还附赠了DVD光盘,内容是视频教程、电子课件(PPT)、各章节的实例源代码和习题答案等。
7) 完善的技术讨论平台
本书提供论坛技术讨论平台: www.kingst.org。读者可以在上边找到我们的联系方式,下载所有的学习视频和文档资料,可以加入到我们的技术讨论群中和大家一起讨论学习,共同进步。
本书主要内容
全书一共20章,从第1章到第18章以实验为载体,从单片机最小系统和C语言基本语法开始讲解,逐步深入,讲解单片机内部资源和C语言的各种用法,并穿插介绍实际项目开发常用的电路设计思路和编程技巧等。本书在知识讲解的过程中,有些地方没有按照传统思路先介绍后应用,而是先应用后讲解,这样的方式更有利于大家深入理解知识点,清楚地了解知识点的用法和原理。第19章是项目开发指导,带领大家逐一走过实际项目开发的全部流程,并最终完成它,让大家进行一次实际项目开发前的一个实战演习。第20章讲解了单片机开发中一些常用工具的用法,熟练运用它们,可以帮助大家高效率地定位并解决问题。
关于我们
相信很多学电子的同学和我接触单片机的经历一样,大学里开了C语言和单片机相关的课程,但是上完课了却从未见过单片机长什么样子,也不知道C语言有何用处,考试的时候通过背一下书上的概念和程序就那么通过了,头脑中除了留下“单片机”和“C语言”这样两个概念外,其他的全都就着馒头下肚了,没在大脑中留下一片云彩。
一个偶然的机会,我进入了我的单片机启蒙恩师李冬明老师的实验室,从此真正的单片机进入了我的世界。李老师给了我一套学习板,让我从师兄编写的程序开始学习,不懂的可以问师兄师姐。刚开始的学习很难,什么都不懂,甚至想问问题都不知道该问什么,但是我还是坚持从早上8点半到晚上9点半全天候在实验室里学习。大概两三个月的时间,随着老师布置给我的第一个任务的完成,我发现自己一下理解单片机了,当然这顿悟离不开两三个月的积累。半年后正式开始参与老师项目开发的一些简单工作,算是入门单片机了。我找工作的那年,由于经济危机带来就业问题很严峻,但是带着在实验室学习的技术和积累的经验,我在就业大潮中很容易地找到了工作,而且进入工作岗位后,我迅速进入状态,一个月后在公司就开始参与实际产品研发工作了,几乎没有什么过渡期。
回顾我的单片机之路,我发现我是个幸运儿。一个班级里几十个人,一个学校又有那么多电子专业的学生,最终能够真正跟着老师参与项目开发锻炼的就那么几个,而全国有很多很多高校,最终有机会得到特训参加电子比赛以及项目开发实践机会的人太少太少了,大多数同学只能在外围羡慕嫉妒恨。更有很多同学发现自己没这种机会后就自甘堕落,整天逃课玩游戏,最终大学毕业两手空空,如果不靠拼爹,靠自己很难找到称心的工作。大多数同学能考上大学,脑子一点也不比别人笨,只是没有一个领路人,没有一个正确的学习方法,缺少了参与学习的平台和参加实践的机会。
随着我自己工作中技术水平的不断提高,我也发现传统的单片机教材完全跟不上技术发展的节奏,导致这个行业的初学者非常迷茫和无奈。找了几个志同道合的朋友出来创业的时候,决定把单片机教学相关工作作为工作室一项业务,先后做过两个版本的《手把手教你学单片机》视频教程。2013年初,和清华大学出版社商定撰写《手把手教你学51单片机(C语言版)》这本教材,旨在帮助那些想学单片机但又无从下手的初学者们,帮助同学们真正跨过这道门槛,步入工程师的行列。
本书在编写过程中得到李冬明老师的大力指点和指导,由衷地表示感谢。李冬明老师是一位非常严谨和认真的老师,他的严谨不仅体现在教学上,在科研上对我们的要求也是无比严格。我跟着他学习的时候,他经常说的一句话就是: “做技术必须要认真,很多人做事的时候喜欢糊弄,但做技术绝对不可以。技术是逻辑性很强的东西,不应该有任何侥幸心理,你糊弄它的话它就糊弄你。”这一点我在做实验的时候已经体会到了,曾经由于自己的不认真,电容极性接反,导致电容爆掉,板子烧毁。
本书的诸多与实际开发相关的设计思路、编程技巧和算法等得到崔长胜工程师的大力指导,由衷地表示感谢。此外,本书在编写过程中,也得到了广大单片机爱好者热情的支持和宝贵的反馈,在此表示真诚的感谢。
限于作者水平,书中难免存在不当之处,恳请广大读者批评指正。任何批评和建议请发至: [email protected]。
宋雪松2014年2月
何宾(博士,畅销书《Xilinx FPGA设计权威指南》作者)
在该书出版前夕,很荣幸有机会阅读了样章。整体感觉是这本书具有突出的原创性和优秀的实践性!作者是真正在用“心”写书,为什么这么说呢?这本书其实就是作者在和读者分享自己学习单片机的历程。作为一个工程师,作者从系统的角度,告诉读者学习单片机的方法,而不是就事论事地单纯讲应用。本书始终围绕着一个主题,即告诉读者如何根据不同应用要求,构建相关硬件接口和设计软件程序。书中给出的实例,基本上涵盖了单片机最为典型的应用场合。该书为读者提供了完备的学习生态系统,包括视频、课件、开发板和论坛。这样,读者和作者之间就建立了一个很好的交流平台,有利于高效学习。
于寅虎(电子产品世界总编)
20世纪80年代诞生以来,8051就从未离开过嵌入式应用开发工程师的视线。在30多年的历程中,以8051为内核的单片机在结构、功能和开发语言等方面一直不断演进,至今仍被大量应用于各种电子设备,仍有大批的电子工程师采用8051单片机从事嵌入式系统的开发。作为微控制器的鼻祖,8051奠定了嵌入式芯片系统的经典体系结构; 掌握8051的开发应用,有利于从事更高层次的嵌入式开发系统的学习。该书的突出特点就是紧跟时代步伐,从实战角度论述,其设计思路、编程技巧和程序算法源于实践。作者能够灵活运用C语言的指针和结构体,可以将已呈现SoC特征的8051的性能发挥到极致。希望读者能够从8051开始,开启美妙的嵌入式开发之旅。
杨晖(电子技术应用副总编)
宋雪松是一个电子技术的追梦人!他在追逐单片机的道路上,摸过烧红的铁块,有过无数的坎坷; 幸运的是,他坚持学习,勇于突破,终于成长为一名有理想、有本领的嵌入式工程师。该书是作者总结多年的学习经验和培训经历,凝练出的单片机学习的*实践途径。该书摒弃了传统的“先讲基本原理再举例”的学习套路,以一个个项目实例为载体,理论联系实践,手把手教会读者掌握单片机系统设计的方法和技巧; 是一本极具变革思想的前沿教材,推荐阅读!
刘继曾(教师,罗定职业技术学院)
站在单片机初学者的角度,尤其是高职高专的广大师生的立足点,学习单片机的目标就是成长为单片机开发工程师。该书通过一个个独立的模块讲解,然后综合这些模块开发实际项目——这正是我们学习单片机的最有效的途径!甚至可以说,这本书是单片机学习的里程碑著作,值得学习,值得珍藏。
吴常玉(青岛东软载波科技股份有限公司,高级嵌入式系统工程师)
毫无疑问,宋雪松这本《手把手教你学51单片机(C语言版)》既有较高的专业技术含量又通俗易懂,还附赠大量超值服务。想当初,本人在单片机与嵌入式系统学习的过程中,是摸着石头过河,走过不少弯路。现在想想,如果一开始就遇到了这样一本书,“手把手”地学习下来,至少可以节省两三年的摸索时间。真心希望更多的电子初学者们读到此书,提高学习效率。
夏皓(上海读者)
我以前从未期待过某本书出版,但是自从得知《手把手教你学51单片机(C语言版)》要出版的消息后,我就越来越期待宋雪松老师撰写的这本书了,很荣幸现在有幸先睹为快。读过很多书,很多技术类图书即使贴有“初学”、“入门”的标签,也仅仅是标榜。而宋雪松老师是真正注重入门读者的问题,该书以通俗、生动的语言解释了复杂的知识,避免了晦涩难懂的专业术语,同时又不失培养读者学习行业规范,是一本极好的入门教材!
白一哲(广州读者)
我很久没有看到过这么好的教材了,好像正好你想知道什么它就告诉你什么,你缺什么它就给你讲解什么。宋雪松老师一定是倾其全力,把宝贵的学习和教学经验奉献给了读者; 尤其是书中的实战项目,更是让人耳目一新。我目前只阅读到了文字教程,还没有看视频教程,非常期待!也更期待宋老师后续出版更高级的教程,可以领单片机初学者走出迷茫,成长为成熟的单片机工程师。
刘蛟宇(深圳读者)
《手把手教你学51单片机(C语言版)》有个鲜明的特点:“实践总结理论,理论指导实践”。该教程善于“手把手”地带领读者去做各种奇妙的实验,接着“手把手”地剖析与之紧密联系的数电、C语言等理论根基,而后又利用这些理论去把前面的实验做改善或演变。其中的乐趣会强烈地吸引着你去“动手实践”,去“举一反三”!
在错误的道路上日夜兼程,最终也无法成功,方法和思路绝对是第一重要的。一些学技术的同学,往往看到这类章节会直接跳过去,因为大多数类似章节都是废话连篇。但是,今天在这里我可以很负责任的告诉你,本章节讲到的学习单片机的方法,都是我们学习单片机的无数经验和教训总结出来的瑰宝。因为我们披荆斩棘,开辟了道路,所以可以告诉你路在何方;也因为我们摸过烧红的铁块,烫了手,所以也可以告诉你教训和代价是什么。希望各位都能站在我们的肩膀上,看得更远!
1.1 学什么单片机
单片机的型号那么多,如何选取一款合适的进行学习?如果身边有比较现成的学习单片机的条件,有什么条件就学习什么型号。比如,你所在的公司刚好用到某个型号单片机,那么就方便多了。开发板不用购买,直接用公司现成的板子,指导老师到处是,公司的工程师,只要你耐心虚心的不耻上问,相信他们都愿意帮你解答问题。或者你跟着学习的导师,正在使用某个型号的单片机开发产品,那么同样的道理,你也会有得天独厚的优势,直接跟着学就行了。单片机型号虽然众多,看起来纷繁复杂,其实它们的基本原理、基本用法都是相通的,只要熟练掌握其中一种,其它的都可以触类旁通,快速上手了。
如果你这些条件都没有,那就跟着我学吧,我建议你学习51单片机。为什么呢?虽然现在单片机种类和型号非常多,每个型号都有一定的市场份额,但是哪个型号也没有早期51单片机那般风光和火爆,虽然现在地位不是那么高了,但是因为51单片机积累的资料非常多,大家学起来就会拥有众多的参考资料,所以上手肯定比其他型号的要快一些。如果你学习稍微偏门的单片机,可能一个简单的软件问题就要折腾你好长时间,不仅仅浪费了你的学习时间,更重要的是打击了学习单片机的信心。
那么是不是每种单片机我们都要学一遍呢?答案当然是否定的。大家跟着我来学习51单片机,必须得跟着学会举一反三和融会贯通的能力。单片机型号那么多,挨个学下来估计头发白了也学不完,所以大家跟着我学51单片机,不能仅仅当做51来学习,更重要的是要当做“单片机”来学,要通过我们的这个教程,把所有的单片机的内部资源都搞清楚弄明白,每个内部模块的用法理解透彻,这样当你遇到一个从没有用过的单片机,也就知道如何下手去使用它进行开发了。
1.2 如何学习单片机
前边提到过,单片机是一门实用技术,我们学习它已经不是为了应付考试了,我给大家总结了单片机的学习方法是:一个要领,四个步骤。
学习单片机的要领就是:在实践中成长,In Doing We Learn!
学射箭,你得去拉弓,整天只摆造型肯定不行;学游泳,你得下水扑腾,整天在岸上做模仿活动不行;学开车,你得坐车上去开,坐沙发上肯定学不会。同样的道理,学单片机,整天盯着单片机书看肯定不行,你也必须得亲自动手去练。
没有不下水就学会游泳成为游泳健将的,没有不到车上练就能成为赛车手的,这点大家都清楚,可为什么那么多人学单片机的时候,总是只抱着一本书看呢。第一,我们小学中学甚至大学的学习模式都是如此,学什么东西主要都是靠看书,应付书面考试;第二,很多人想实践却不太清楚该怎么去实践。
遇到问题查下书比直接看书的效果要好过百倍。不是不让大家看书,而是看了一点以后,要马上去实践验证,然后再回头结合实践的结果,理解书上的内容。从这个地方,大家要得出一个结论来,就是在学实际技术的过程中,和应付考试不同,书上的内容不需要你去硬性记忆,书是用来查的,不是用来背的。
下面,就是我总结的跟着我学习单片机的四个步骤。
第一步:鹦鹉学舌。
刚出生的孩子叫“爸爸”“妈妈”的时候,他甚至不知道“爸爸”“妈妈”是什么意思,更不会理解这些声音是什么意思,但是我们带着孩子见到他爸爸就让他喊“爸爸”,见到妈妈就让他喊“妈妈”,见到爷爷就喊“爷爷”……慢慢的你会发现,次数多了,孩子就知道谁是爸爸,谁是妈妈,谁是爷爷,谁是奶奶了。
大家刚开始接触单片机的时候,也属于单片机行业的新生儿。单片机的样子,单片机外围的各种器件,单片机内部的各种结构,单片机使用C语言的编程方法,初学者可能都没有见过,脑子里全无概念。没关系,有些概念和方法你不理解也没有关系,甚至不需要你去理解,你只需要跟着我去鹦鹉学舌式的学习,第一遍学习某一节课的内容时,对于程序,大家就可以完全跟着抄下来,甚至抄两三遍,过一段你会发现,好多东西你也认识了,好多概念你也慢慢的理解清楚了,你也能大概看懂别人的小程序了,切忌觉得自己看会了,而简单复制粘贴。
第二步:照葫芦画瓢。
很多同学学习的时候喜欢看,看我做的视频,看我写的程序,甚至看别人的程序,都能看懂,觉得自己就会了,等到自己写程序的时候,感觉就是老鼠啃天,不知道从哪里下手了,这是初学者很容易犯的“眼高手低”的毛病,所以第二步的内容就非常重要了。
我的要求是,每一位同学,在学完了当前课的内容,把第一步顺利完成以后,然后关掉视频教程,关掉源代码,自己通过看电路图和查找非源代码的其他任何资料,把当节课我写的程序代码重新默写出来,边写边多少理解那么一点点,不是纯粹的背诵,应该说是背诵加理解的结合体。甚至学过几节课以后,可以回头把前边曾经这样实现过的课程,再按照这种方法做一遍。千万不要认为这一步没必要,这一步是你能否真正学会单片机的一个关键,在学完本教程之前,每一课内容都要这样做,如果每一个程序你都能够完美的完成,那么可以说,当节课的内容,百分之七八十你已经掌握了。
第三步:他山之石,可以攻玉。
单片机技术的最大特点就是可以通过修改程序来实现不同的功能,因此举一反三的能力就必不可少了。每一节课的例程后边,我一般都会布置几个作业,大家尽量去独立完成这个作业。在完成这个作业的过程中,都可以参考我的程序思路,在这个基础上通过动脑思考去构建你自己的程序框架,最终将程序完成。
在我们工程师实际产品研发的时候,很多种情况下也是如此。比如一个产品,我们如果从零起步的话,可能会走很多弯路,遭遇很多前人已曾遭遇过的挫折,所以我们通常的做法是寻找购买几款同类产品,然后先研究他们的各自优缺点,学习他们的长处,然后在同类产品基础上再来设计我们自己的产品,这就是“他山之石,可以攻玉”。
初学者在学习的时候,往往遇到的问题很多,你应该想到,你遇到的问题,可能前辈们早就遇到过了,所以遇到问题后,不要慌张,首先利用谷歌或者百度这些搜索引擎在网上搜一下,要做什么新东西,先去网上找相关资料了解一下,不管是编程还是硬件设计,多多参考别人的东西,只要把别人的东西分析明白了,自己用起来了,也就成为自己的知识了。
第四步:理论实践结合,温故知新。
当大家把所有的课程都按照前边三步完成后,这个时候不妨再把书打开,再看看书,经过了自己的实战经历,再看书的时候,对很多知识点会有一种恍然大悟的感觉。甚至视频教程、书籍都可以反复看几遍,可能有的知识点当时学习的时候不明白,过了一段时间,回过头来再学习的时候,一下就明白了。
1.3 单片机学习的准备工作
第一:足够的信心、恒心和耐心。
有同学问过我,单片机这门技术难不难。我觉得这个问题得从两个方面去分析。
首先,我们从战略上藐视它。那么多同学跟着老师学一段时间就可以做出来小车,超声波测距,甚至做出来机器人,似乎很拽的样子。那他们又不是三头六臂,我们也没有什么做不了的道理。实际上要说技术,其实就是一层窗户纸,表面看不透彻,感觉特别神秘,实际只要你稍微一努力就可以捅破它,夸张点说,单片机在逻辑上的关系,只有小学的水平,简单的很。正所谓会者不难,难者不会,大家不懂这个东西,看起来感觉很神秘。所以大家只要认真踏实坚持学下去,肯定能学好这么技术。
其次呢,我们从战术上要重视它。你说单片机这东西,如果十天八天就学会了,那么这个技术还能值钱吗?我可以这样去表达,如果一个技术很简单就被学会,那么很多人都会的这个技术,肯定也没什么前途和钱途。那究竟多久能学会呢?我给大家制定的学习方案,根据每个人的基础不同,平均每天要拿出2个小时以上的学习时间,大概一到三个月可以入门。入门的概念是给你一个单片机开发任务,你起码知道要努力的方向和解决问题的大概方法了。技术这东西,关键是坚持做下去,有恒心和耐心,如果长时间不用的话,肯定还会生疏。所以要想成为单片机高手,起码需要一年左右的单片机开发的历练才行。成为单片机高手的概念就是你自己可以从头根据自己的想法,去设计一个电路,根据需要的功能编写代码,做一个产品出来。
第二:教材和教程。
要学习单片机这门技术,良好的教材和教程必不可少。单片机方面,大家可以直接学习我们这本《手把手教你学单片机——51单片机C语言开发》,我们还精心制作了配套的《手把手教你学单片机》的视频教程。本着开源、共享的理念,我们的视频教程都是免费开放的,大家可以到我们的网站www.kingst.org找到下载链接。另外,因为我们做单片机开发使用的是C语言,所以最好能再有一本纯C语言的教材,学到一些C语言的细节问题的时候,可以方便大家查阅,或者你也可以直接把相关问题通过谷歌和百度搜索一下,绝大部分情况下它们都会给你满意的答案的。
第三:电脑一台、单片机开发板一块。
电脑,是学习单片机必不可少的工具,因为编写程序,查阅资料都得用到,但是有句题外话说一下,不要把电脑当成游戏机或者影碟机,偶尔玩玩游戏看看电影是可以的,劳逸结合,但是不可沉溺其中,否则还不如没有电脑。
单片机开发板,这也是必须的。如果你还在上学,学校实验室一般会有开发板,可以考虑跟老师借一个,或者使用师兄师姐们用完的,这样可以省点钱。当然,如果身边有高手,比如辅导老师,会单片机的师兄,在他们的指导下做一个也可以,身边有人指导的话,不懂的问题还可以问他们。如果这些条件都不具备,那么可以购买一个,先学习别人的板子设计思路,给自己以后设计电路板打下基础。在这里就顺便推荐一下我们的KST-51开发板,我不敢说我们的设计是最好的,但是我可以很负责任的说,我们的板子是出自经验丰富的一线工程师之手,其中的设计都是根据实际项目开发的思路进行的,包括整体规划、电路设计、器件布局等等,可以为你今后的项目开发提供一个优质的参考。另外一方面,因为我们的教程是基于我们的开发板做的,所以大家配套来用的话可以节省时间,提高学习效率。
当然,即使不购买我们的开发板,你想学单片机,也还是要有一块开发板的,不能总是用软件仿真,软件仿真是学不会单片机的。经常有同学过来问我,老师我用软件模拟的好用,做了硬件不好用是什么原因。在这里我提一下,如果你上课用这个软件仿真,糊弄老师应付考试是可以的,但是实际开发和仿真软件却差别很大,如果真心想学好单片机这门技术,那我只能告诉你,拿起烙铁焊电路,动手写程序,远离仿真软件,靠软件仿真永远学不到真正的技术。
1.4单片机开发软件环境搭建
单片机开发,首要的两个软件一个是编程软件,一个是下载软件。编程软件我们用Keil uVision4的51版本,也叫做Keil C51,不做过多介绍,先直接讲如何安装。
1、首先准备Keil uVision4安装源文件,双击安装文件,弹出安装的欢迎界面,如图1-1所示。
2、点击“Next”按钮,弹出“License Agreement”对话框,如图1-2所示。这里显示的是安装许可协议,需要在“I agree to all the terms of the preceding License Agreement”打勾。
3、点击“Next”按钮,弹出“Folder Selection”对话框,如图1-3所示。这里可以设置安装路径,默认安装路径在“C:Keil”文件夹下。点击“Browse…”按钮,可以修改安装路径,这里建议大家用默认的安装路径,如果你要修改,也必须使用英文路径,不要使用包含有中文字符的路径。
4、点击“Next”按钮,弹出“Customer Information”对话框,如图1-4所示。大家输入用户名、公司名称以及E-mail地址即可。
5、单击“Next”,就会自动安装软件,如图1-5所示
6、安装完成后,弹出来安装完成对话框,如图1-6所示,并且出现几个选项,大家刚开始把这几个选项的对号全部去掉就可以了,先不用关注他有什么作用。
7、最后,点击“Finish”,Keil编程软件开发环境就这么装好了。
1.5 Keil基本概况介绍
首先,我们用Keil先打开一个现成的工程,来认识一下Keil软件,如图1-7所示。
第2章 点亮你的LED
这节课的标题是点亮LED,虽然任务很简单,但是需要大家了解的单片机基础知识的内容却很多,特别是对于初学者,刚开始要在头脑中建立一个单片机的概念,课程最后通过点亮一个LED小灯来增加初学者对单片机的兴趣和自信。
2.1 单片机的内部资源
在这里我所讲到的单片机内部资源,和传统单片机书籍中讲单片机内部结构不同,我这里讲到的内部资源,是指作为单片机用户,单片机提供给我们可使用的东西。总结起来,主要是三大资源:
Flash——程序存储空间,早期单片机是OTPROM。
RAM——数据存储空间。
SFR——特殊功能寄存器。
在早期的单片机中,主要是用OTPROM(One Time Programmable Read-Only Memory,即一次可编程只读存储器)来存储单片机的程序,程序只能写入一次,如果发现错了,没办法,只能换一片,重新写入了。随着技术的发展,Flash以其可重复擦写且容量大成本低的优点成为现在绝大多数单片机的程序存储器。对于单片机来说Flash最大的意义是断电后数据不丢失,这个概念类似于我们电脑的硬盘,我们保存了电影、文档、音乐等文件,把电源关掉后,下次重新开电脑,所有的文件都还照样存在。
RAM是单片机的数据存储空间,用来存储程序运行过程中产生的和需要的数据,跟电脑的内存是相似的概念,其实最典型的比喻是我们的计算器,我们用计算器计算个加减法,一些中间的数据都会保存在RAM里边,关电后数据丢失,所以我们每次打开计算器,都是从归零开始计算。但是它的优点,第一是读写速度非常快,第二是理论上是可无限次写入的,即寿命无限,不管程序怎么运行怎么读写它都不会坏。
第三个资源是SFR,特殊功能寄存器。这个概念大家可能刚开始理解不了,但是一定要记住。单片机有很多很多功能,每个功能都会对应一个或多个SFR,我们就是通过对SFR的读写来实现单片机的多种多样的功能的。
讲到这里,我们来了解一下51单片机。通常我们一说到51单片机,指的都是兼容Intel MCS-51体系架构的一系列单片机,而51是它的一个通俗的简称。全球有众多的半导体厂商推出了无数款这一系列的单片机,比如Atmel的AT89C52,NXP(Philips)的P89V51,宏晶科技的STC89C52……具体型号千差万别,但他们的基本原理和操作都是一样的,程序开发环境也是一样的。这里我们要分清楚51这个统称和具体的单片机型号之间的关系。
单片机内部资源的三个主要部分我们清楚了,那么我们选择STC89C52这款单片机来进行学习。STC89C52是宏晶科技出品的一款51内核的单片机,具有标准的51体系结构,全部的51标准功能,程序下载方式简单,方便学习,我们就用它来学习单片机。它的资源情况:Flash程序空间是8K字节(1K=1024,1字节= 8位),RAM数据空间是512字节,SFR我们后边会逐一提到并且应用。
2.2 单片机最小系统
为什么称之为单片机最小系统呢?单片机最小系统,也叫做单片机最小应用系统,是指用最少的原件组成单片机可以工作的系统。单片机最小系统的三要素就是电源、晶振、复位电路,如图2-1所示。
图2-1 单片机最小系统电路
这张最小系统的电路图节选自我们的KST-51开发板原理图,下面我们就照这张电路图来具体分析最小系统的三要素。
2.2.1 电源
这个很好理解,电子设备都需要供电,就连我们的家用电器(手电筒^_^)也不例外。目前主流单片机的电源分为5V和3.3V这两个标准,当然现在还有对电压要求更低的单片机系统,一般多用在一些特定场合,在学习中我们不做过多的关注。
我们所选用的STC89C52,它需要5V的供电系统,我们的开发板是使用USB口输出的5V直流直接供电的。从图2-1可以看到,供电电路在40脚和20脚的位置上,40脚接的是 5V,通常也称为VCC或VDD,代表的是电源正极,20脚接的是GND,代表的是电源的负极。 5V和GND之间还有个电容,作用我们下节课介绍。
这个地方我们还要普及一个看原理图的知识。电路原理图是为了表达这个电路的工作原理而存在的,很多器件在绘制的时候更多考虑的是方便原理分析,而不是表达各个器件实际位置。比如上边的单片机引脚图,引脚的位置我们是可以随意放的,但是每个引脚上有一个数字标号,这个数字标号代表的才是单片机真正的引脚位置。一般情况下,这种双列直插封装的芯片,左上角是1脚,逆时针旋转引脚号依次增加,一直到右上角是最大脚位,我们现在选用的单片机一共是40个引脚,因此右上角就是40(在表示芯片的方框的内部),如图2-2所示,大家要分清原理图引脚标号和实际引脚位置的区别。
图2-2 单片机封装图
2.2.2 晶振
晶振,又叫晶体振荡器,从这个名字我们就可以看出来,它注定一生都要不停振荡的。他起到的作用是为单片机系统提供基准时钟信号,类似于我们部队训练时喊口令的人,单片机内部所有的工作都是以这个时钟信号为步调基准来进行工作的。STC89C52单片机的18脚和19脚是晶振引脚,我们接了一个11.0592M的晶振(它每秒钟振荡11,059,200次),外加两个20pF的电容,电容的作用是帮助晶振起振,并维持振荡信号的稳定。
2.2.3 复位电路
在图2-1左侧是一个复位电路,接到了单片机的9脚RST(Reset)复位引脚上,这个复位电路如何起作用我们后边再讲,现在着重讲一下复位对单片机的作用。单片机复位一般是3种情况:上电复位、手动复位、程序自动复位。
假如我们的单片机程序有100行,当某一次运行到第50行的时候,突然停电了,这个时候单片机内部有的区域数据会丢失掉,有的区域数据可能还没丢失。那么下次打开设备的时候,我们希望单片机能正常运行,所以上电后,单片机要进行一个内部的初始化过程,这个过程就可以理解为上电复位,上电复位保证单片机每次都从一个固定的相同的状态开始工作。这个过程跟我们打开电脑电源开电脑的过程是一致的。
当我们的
评论
还没有评论。