第1章 如何学习单片机
在错误的道路上日夜兼程,最终也无法成功,方法和思路绝对是最重要的。一些学技术的同学,往往看到这类章节会直接跳过去,因为大多数类似章节都是废话连篇。但是,今天在这里作者可以很负责地告诉你,本章节讲到的学习单片机的方法,都是作者学习单片机的无数经验和教训总结出来的瑰宝。因为作者披荆斩棘,开辟了道路,所以可以告诉读者路在何方;也因为作者摸过烧红的铁块,烫了手,所以也可以告诉读者教训和代价是什么。希望各位都能站在作者的肩膀上,看得更远。
### 标题1.1 学什么类型的单片机
单片机的型号那么多,如何选取一款合适的进行学习?如果身边有比较现成的学习单片机的条件,有什么条件就学习什么型号。比如,读者所在的公司刚好用到某个型号单片机,那么就方便多了。开发板不用购买,直接用公司现成的板子,指导老师到处都是,公司的工程师,只要虚心地请教,相信他们都愿意帮你解答问题。或者跟着学习的导师,正在使用某个型号的单片机开发产品,那么同样的道理,你也会有得天独厚的优势,直接跟着学就行了。单片机型号虽然众多,看起来纷繁复杂,其实它们的基本原理、基本用法都是想通的,只要熟练掌握其中一种,其他的都可以触类旁通,快速上手。
如果这些条件都没有,那就跟着作者学吧,建议读者学习51单片机。为什么呢?虽然现在单片机种类和型号非常多,每个型号都有一定的市场份额,但是哪个型号也没有早期51单片机那般风光和火爆,虽然现在地位不是那么高了,但是因为51单片机积累的资料非常多,大家学起来就会拥有众多的参考资料,所以上手肯定比其他型号要快一些。如果学习稍微偏门的单片机,可能一个简单的软件问题就要折腾好长时间,不仅仅浪费了学习时间,更重要的是打击了学习单片机的信心。
那么是不是每种单片机都要学一遍呢?答案当然是否定的。大家跟着作者来学习51单片机,必须得学会举一反三和融会贯通的能力。单片机型号那么多,挨个学下来估计头发都白了也学不完,所以大学跟着学51单片机,不能仅仅当作51单片机来学习,更重要的是要当作“单片机”来学,要通过这个教程,把所有的单片机的内部资源都搞清楚、弄明白,每个内部模块的用法理解透彻,这样当遇到一个从未用过的单片机,也就知道如何下手去使用它进行开发了。
## 标题 1.2 学习单片机的最佳方法
前边提到过,单片机是一门实用技术,学习它已经不是为了应付考试了,下面给大家总结了单片机的学习方法;一个要领,四个步骤。
学习单片机的要领就是:在实践中成长,In Doing We Learn !
学射箭得去拉弓,整形只摆造型肯定不行;学游泳得下水扑腾,整天在岸上做模仿活动不行;学开车得上车上去开,坐沙发上肯定学不会。同样的道理,学单片机,整天盯 着单片机书看肯定不行,也必须亲自动手去练。
没有不下水就成为游泳健将的,也没有不到车上练就能成为赛车手的,这点大家都清楚,可为什么那么多人学单片机的时候,总是只抱着一本书看呢。第一,小学、中学甚至大学的学习模式都是如此,学什么东西主要都是靠扯看书,应付书面考试;第二,很多人想实践却不太清楚该怎么去实践。
遇到问题查书比直接看书的效果要好过百倍。不是不让大家看书,而是说看了一点以后,要马上去实践验证,然后再回头结合实践的结果,理解书上的内容。从这个地方,大家会得出一个结论来,就是学实际的过程和应付考试不同,书上的内容不需要你去硬性记忆,书是用来查的,不是用来背的。
下面就是学习单片机的四个步骤。
1.鹦鹉学舌
刚出生的孩子叫“爸爸”“妈妈”的时候,他甚至不知道“爸爸”“妈妈”是什么意思,更不会理解这些声音是什么意思,但是当带着孩子见到他爸爸就让他喊“爸爸”,见到他妈妈就让他喊“妈妈”,见到爷爷就喊“爷爷”…慢慢会发现,次数多了,孩子就知道谁是爸爸,谁是妈妈,谁是爷爷,谁是奶奶了。
大家刚开始接触单片机的时候,也属于单片机行业的新生儿。单片机的样子,单片机外围的各种器件,单片机内部的各种结构,单片机使用C语言的编程方法,初学者可能都没有见过,脑子里全无概念。没关系,有些概念和方法不理解也没有关系,甚至不需要去理解,只需要跟着去鹦鹉学舌式学习。第一遍学习某一节课的内容时,对于程序,大家就可以完全跟着抄下来,甚至抄两三遍,过一段时间会发现,好多东西也认识了,好多概念也慢慢地理解清楚了,也能大概看懂别人的小程序了。但学习时切忌觉得自己看会了,而简单复制粘贴。
2.照葫芦画瓢
很多同学学习的时候喜欢看视频、程序,甚至看别人的程序都能看懂,觉得自己就会了,等到自己写程序的时候,感觉就是老鼠啃天,不知道从哪里下手了,这是初学者很容易犯的“眼高手低”的毛病,所以第二步的内容就非常重要了。
这就是要求每一位同学,在学完当前课的内容,把第一步顺利完成以后,关掉视频数据,关掉源代码,自己通过看电路图和查找非源代码的其他任何资料,把当节课的程序代码重新默写出来,边写边多少理解那么一点点,而不是纯粹的背诵,应该说是背诵加理解的结合。甚至学过几节课以后,可以回头把前边曾经这样实现过的课程,再按照这种方法做一遍。千万不要认为这一步没有必要,这一步是读者能否真正学会单片机的一个关键。在学完本课程之前,每一课内容都要这样做,如果每一个程序都能够完美地完成,那么可以说,当节课的内容,百分之七八十已经掌握了。
3.他山之石,可以攻玉
单片机技术的最大特点就是可以通过修改程序来实现不同的功能,因此举一反三的能力就必不可少了。每一节课的实例一般都会布置几个作业,大家尽量去独立完成这个作业。在完成这个作业的过程中可以参考程序思路,在这个基础上通过动脑思考去构建自己的程序框架,最终将程序完成。
在工程师实际产品研发的时候,很多情况下也是如此。比如一个产品,如果从起步,可能会走很多弯路,遭遇很多前人也曾遭遇过的挫折,所以通常的做法是寻找或购买几款同类产品,然后先研究它们的各自优缺点,学习它们的长处,然后在同类产品基础上再来设计自己的产品。这就是“他山之石,可以攻玉”。
初学者在学习的时候往往遇到很多问题,应该想到,遇到的问题,可能前辈们早就遇到过了,所以遇到问题后不要慌张,首先利用搜索引擎在网上搜一下。要做什么新东西,先去网上找相关资料了解一下。不管是编程还是硬件设计,多参考别人的东西,只要把别人的东西分析明白了,自己用起来了,也就成自己的知识了。
4.理念实践结合,温故知新
当大家把所有的课程都按照前边三步完成后,不妨再把书打开,再看看书。经过了自己的实战经历,再看书的时候,对很多知识点会有一种恍然大悟的感觉。甚至视频教程、书籍都可以反复看几遍,可能有的知识点当时学习的时候不明白,过了一段时间,回过头来再学习的时候,一下就明白了。
1.3 单片机学习的准备工作
1.足够的信心、恒心和耐心
有同学问过我,单片机这门技术难不难。我觉得这个问题可以从下面两个方面去分析。首先,要从战略上藐视它。那么多同学跟着老师学一段时间就可以做出小车,超声波测距,甚至做出机器人,似乎很厉害的样子。他们又不是三头六臂,我们也没有什么做不了的道理。实际上要说技术,其实就是一层窗户纸,表面看不透彻,感觉特别神秘,实际只要你稍微一努力就能捅破它,夸张点说,单片机在逻辑上的关系,只有小学的水平,简单得很。正所谓会者不难,难者不会,大家不懂这个东西,看起来感觉很神秘,所以只要认真踏实坚持学习下去,肯定能学好这门技术。
其次,从战术上要重视它。单片机这东西,如果十天八天就学会了,那么这个技术还能值钱吗?可以这样说,如果一个技术很简单就被学会,那么很多人都会的这个技术,肯定也没有什么前途和钱途。那究竟多久能学会呢?我给大家制定的学习方案,根据每个人的基础不同,平均每天要拿出两个小时以上的学习时间,大概一到三个月就可以入门。入门的概念是给读者一个单片机开发任务,起码知道要努力的方向和解决问题的大概方法。技术这东西,关键是坚持做下去,有恒心和耐心,如果长时间不用,肯定还会生疏。所以要想成为单片机高手,起码需要一年左右的单片机开发的历练才行。成为单片机高手的概念就是自己可以从头根据自己的想法去设计一个电路,根据需要的功能编写代码,做一个产品出来。
2.教材和教程
要学习单片机这门技术,良好的教材和教程必不可少。 单片机方面,大家可以直接学习这本《手把手教你学51单片机-----C语言版》(第2版),并学习作者精心制作的配套视频教程。另外,因为单片机开发使用的是C语言,所以最好能再有一本纯C语言的教材,学到一些C语言细节问题的时候,可以方便大家查阅,或者也可以直接把相关问题通过网络搜索一下,绝大部分情况都会找到满意的答案。
3.计算机一台、单片机开发板一块
计算机是学习单片机必不可少的工具,因为编写程序、查阅资料都得用到、但是有句题外话说一下,不要把计算机当成游戏机或者影碟机,偶尔玩玩游戏看看电影是可以的,劳逸结合,但是不可沉溺其中,否则还不如没有计算机。
单片机开发板是必需的。如果读者还有上学,学校实验室一般都会有开发板,可以考虑跟老师借一个,或者使用师兄师姐们用过的,这样可以省点钱。当然,如果身边有高手,比如辅导老师,会单片机的师兄,在他们的指导下做一个也可以,身边有人指导,不懂的问题还可以问他们。如果这些条件都不具备,那么可以购买一个,先学习别人板子的设计思路,给自己以后设计电路板打下基础。在这里就顺便推荐一下KST-51开发板。KST-51开发板是出自经验丰富的一线工程师之手,其中的设计都是根据实际项目开发的思路进行的,包括整体规划、电路设计、器件布局等,可以为今后的项目开发提供一个优质的参考。另外一方面,因为本教程是基于KST-51开发板做的,所以配套来用就可以节省时间,提高学习效率。
1.4 单片机开发软件环境搭建
单片机开发,首要的两个软件是编程软件和下载软件。编程软件用Keil uVision5的51版本,也称为Keil C51,不做过多介绍,先直接讲如何安装。
(1)首先准备Keil uVision5安装源文件,双击安装文件,弹出安装的欢迎界面。
(2)单击Next按钮,弹出License Agreement对话框,安装许可协议需要在“I agree to all the terms of the preceding License Agreement"前打勾。
(3)单击Next按钮,弹出Folder Selection对话框。设置安装默认路径C:\Keil文件夹。单击Browse按钮,可以修改安装路径,这里建议用默认的安装路径,如果要修改,也必须使用英文路径,不要使用包含有中文字符的路径。
(4)单击Next按钮,弹出Customer Information对话框,输入用户名、公司名称以及E-mail地址即可。
(5)单击Next按钮,就会自动安装软件。
(6)安装完成后弹出安装完成对话框,并且出现几个选项。大家刚开始把这几个选项的勾全部去掉就可以了,先不用关注有什么作用。
(7)最后,单击Finish按钮,Keil编程软件开发环境就装好 了。
1.5 Keil基本概况介绍
首先,用Keil打开一个现成的工程,认识一下Keil软件。
可以很轻松地分辨出菜单栏、工具栏、工程管理区、程序代码区和信息输出窗口。这个是Keil5的英文版,网上有一些汉化版本,但不建议使用。即使读者的英语不好,使用英文版本的软件也一点问题没有,刚开始大家先跟着去使用,一共没几个单词,不需要去翻译,用几次就记住怎么用了。因为以后做实际开发的时候,大多数软件都是英文版的,如果现在学习的时候一直用中文软件,将来一旦换了其他的英文软件就会慌了,所以从现在开始慢慢熟悉英文软件,将来再用到其他英文软件的时候,就可以做到触类旁通、轻车熟路了。
Keil软件的菜单栏和工具栏的具体细化功能,都可以很方便从网上查到,不需要记忆,随用随查即可。在这里介绍一点,关于Keil软件里边的字体大小和颜色设置。在菜单Edit-Configuration-Colors&Fonts里边可以进行字体类型、颜色、大小的设置。
因为用的是C语言编程,所以在Windows栏中选择8051:Editor C Files,然后在右侧Element栏目里可以选择要修改的内容。一般平时用到的只是其中几项而已,比如:Text-普通文本,Text Selection-选中的文本,Number-数字, /Comment/-多行注释,//Comment-单行注释,Keyword-C语言关键字,String-字符串。Keil本身都是有默认设置的,可以直接使用默认设置,如果觉得不合口味,那就在这里更改一下,改完后直接单击OK按钮,看效果就可以了。
1.6 答读者问
很多读者经常问一些问题,有一些很有现实或 普遍意义,于是作者把有代表性的直接写出来给大家参考,让大家了解这门技术,了解这个行业。
(1)单片机学完了能做什么?
单片机应用非常广泛,电子、电气、自动化、通信等领域都有大量应用,至于能做什么,得看读者将来做什么工作。如同计算机一样,计算机可以用来编程、看电影、打游戏等,用计算机做什么是不一定的。但是掌握好这门技术,起码可以让读者学会一种工具,为将来从事电子、电气、通信、自动化等领域的工作做好准备。
(2)学单片机的捷径是什么?
做技术必须脚踏实地,没有任何捷径可走。如果非要说有,那只能告诉你,拳不离手,曲不离口就是最好的捷径,作者学习 单片机的时候,每天早上8点半进入实验室,晚上9点半离开实验室,曾经创下连续3个月没有休息日的记录。如果你也能这样学,那很快就可以学好这门技术了。
(3)学习单片机应该学习什么语言,有没有必要再学习汇编?
相比较来说,汇编语言比较接近单片机的底层,使用汇编语言有助于理解单片机内部结构。简单的程序使用汇编语言,程序效率也可能比较高,但是当程序容量达到成千上万行以后(这时也仅能算个不太小的项目,还远没到大项目的级别),汇编语言在组织结构,修改维护等方面就会成为有噩梦了,此时C语言就有不可替代的优势了。所以实际开发过程中,目前至少90%以上的工程师都在用C语言做单片机开发,只有在很低端的应用中或者是特殊要求的场合才会用汇编语言开发,所以建议大家还是用C语言开发比较好一些。
如果现在读者正在上学学到了汇编语言,建议认真学一下,学好了肯定会有益无害。但是现在如果说想直接快速学会单片机技术,那就不建议去看汇编语言了,直接学C语言就可以了。那些单片机底层的结构等等,可以在日后的开发过程中慢慢理解。
(4)学会单片机能找什么样的工作?
单片机是一个工具,和计算机有点类似但不完全一样,学会计算机可以用来编程,可以用来画图,可以用来看电影等。学会单片机可以用来做通信技术,做自动控制技术等,但是单片机本身仅仅是一个工具,在用单片机的时候,慢慢接触多了,会有一个应用方向。不仅仅要会单片机,也得对这个应用方向熟悉,比如个人从事过扩频通信技术的算法研究,那么就要对扩频通信熟悉,然后把这个技术用单片机实现出来,也得会用单片机。当然大家也不用担心,找工作的时候公司对这个方向问题要求也不会很高,但多懂点肯定也会提高自己的竞争力。
(5)学完了单片机工资待遇如何?
对于技术来说,技术水平高低直接决定工资薪酬。技术如果学得不好,那工作都找不到,更谈不上工资待遇了,而技术做得好,那工资就自然会很高。一旦要决定从事技术,就不要把过多的精力关注在能挣多少钱上,而应该放在如何提高自身的技术水平上,只要技术水平高,比很多人都厉害,钱自然就找上门了。有一部印度的励志电影叫作《三傻大闹宝莱坞》,推荐做技术的都可以看看,里边有一句经典台词非常适合技术人员:追求卓越,成功就会在不经意间追上你!