如果你学的不是跟这相关的专业,觉得很新奇吗,离我们生活很远吗?那这抱歉了,你真想多了,说新奇啊--单片机诞生于1971年,比咱们年龄都大吧。 说离我们远啊,你每天都会遇到,电梯送你上下楼,图书馆的门禁拦住你又放你进去,上厕所方便后自动冲水,这些其实都是单片机君们在默默的工作。
单片机从1971年发展至今,各方面都得到了发展,种类上更丰富,集成度更高,价格更便宜,功能上更强大。 一般的书籍和网上的资料都会说单片机在仪器仪表、工业控制、家用电器、医用设备、航空航天等方面有广泛的应用。 工业控制主要是因为单片机工作的稳定程度是最高最稳定的,如工业机器人的控制啊、流水线啊都需要稳定的重复工作,所以就专门嵌入一个微控制器到这个系统里去执行已经编辑好的程序。 嵌入式系统的稳定度是最高的,极少出现死机、程序跑飞的现象,所以啊,电梯、游乐场里过山车啊飞轮啊都由单片机控制。 家用电器很多啊,比如自动洗衣机,你输入个数它就知道要洗多久,洗完之后它又自动用清水洗,又甩干。 都是单片机在按照已经编好的程序在干活,而且智能家居现在是一个很热门的话题,让你整个家都是智能的,包括地板和窗户。 这里的例子真的很多,大家到百度上一百度都能百度出一大堆,我就不再累述。 因为单片机体积小、控制功能强、功耗低、环境适应能力强、扩展灵活和使用方便,导航、控制、测控、通信等各个领域都要依仗于它。 其实没必要说要学,没人要你学,学这件事要是自己想学,然后才能学好才能坚持下来,这里只是跟你说这东西挺好的,学不学你自己决定。 而不能说学了之后对你好,我觉得这种叫勾引,很卑鄙,不知道大家什么感受,其实我觉得大学里最后留在心里的都是自己喜欢的自己自学的东西。 老师教的有时应付考试的,真的没留下啥痕迹,其实这也不奇怪,就比如说接触了单片机,一学一看还挺有意思,自己就喜欢了,又自己查书查资料,又自己开始动手干活,自己买元件,自己请教别人,自己制造出了作品,自己发现问题和解决。 其实这个学习的过程是多维度的,不但收获了知识还增强了综合解决问题的能力,比课堂上老师直接灌输的一维学习方式要强太多了。 况且在课堂上,大多数时候还是我们在非自愿、受威逼利诱的情况下迎合应试教育。 学校有时会说一句话:我们的学生基础知识扎实,工作之后上手快!明显胡说八道,上手快靠什么,靠能力。 考试、知识和能力是三码事,不能因为努力取得了好的考试成绩就说掌握了知识,更不能说这知识又都转化成了能力,而在现实生活中,直接使用的是能力。 那你告诉告诉我要看多少本书才能学会包饺子?我觉得大学校园里的主题词不是青春、也不是奋斗,而是迷茫。 大家不知道为了什么要伺候好每个科目的成绩,不知道为了什么要考研、出国,不知道自己想干什么能干什么,大概都是为了别人说的一句好,甚至是以后会好。 一个东西如果自己觉得不感兴趣觉没意义,最好真的不学。 如果真的感兴趣,如果可以,通过这样的一次学习经历把学习的主动性、积极性从大学那僵尸一大波一大波的教室里解放出来。 不奢求老师家长社会的扯淡,美好未来的色诱,不屈服应试教育的挂科惩罚的迫害,只是简简单单的学点东西,不管有没有用,只是自己愿意没有为什么。 单片机学习是很难的,不能速成,你必须承认这一点,有些号称能帮你从入门到精通,那些大多都是牛皮膏药,基本上讲的都是些入门的东西,市面上的讲单片机的书本内容基本上八九成是一样的。 学习单片机的视频,八九成一样,不同的人讲的,主讲人的水平高低不同。 而正真高深的单片机程序处理,你在网上基本上找不到,偶尔能有那么一两个高手把自己的一点点心得分享出来,也许你半天都不能领悟其真谛。
正真的高手是这么炼成的?唯有自己日积月累,不断坚持、思考读成熟的程序,加上自己对程序的悟性,等到2到3年方可有所造诣。 首先我们来谈谈C语言基础,单片机程序开发,基本上用的是C语言,你的语言学的怎么样?对于关键词的使用是否已经融会贯通了?对于语法规则是否已经掌握? 这是一门实践的知识,没有实践你的C语言等于0,他的功能可不是书上那些例子,输个数做个加减乘除把结果输出,利用他的关键字及语法规则,勾画出无限的生产力。 对于C语言的知识你要达到这种水平:当你的想法出现的时候,功能要求已有并且你能立刻用C语言描绘出来。 C语言只是一个工具,实现我们的想法的工具,对于工具的使用要信手拈来! 例如把一个字节数据高底位一一兑换、把脉冲数转换为时间及检测出按键的连续两次按下等等,看到问题的时候具体的实现代码在老海呈现了没。 工具用熟了以后,我们该学习什么?对语法熟练以后就应该重点学习程序设计的方法,请大家分清两个概念,C语言只是工具,会C语言并代表你会设计程序。 首先是能将复杂的功能要求拆分为若干个细小功能,用C语言描述实现,再将这些小功能用你的C语言工具串起来组成我们所需要的复杂功能。 整个过程下来C语言都只是实现你想法的工具,看到这里你是否还敢用“玩”、“精通”来形容单片机吗,当真正进入单片机殿堂的时候你会感觉这是一个浩瀚无边的宇宙,你会越发感觉自己的渺小,只有更好,没有最好。 总结几点个人的学习的经验: C语言与程序设计的学习是相辅相成的,他们共同进步,就如同你的两只脚,谁都不能超过谁很远。 学习单片机之前请先学习C语言,请不要相信什么零基础也能学好,至少20天,要把基础知识掌握,在进入单片机学习,视频网上一大把,学会操作基础模块,在这个阶段你可以在网上寻找知识学习,将你开发板的模块程序都练一遍。 当你开发板学完了,这个时候该这么办了,这就是我今天重点要讲的。 如果你就是浅尝辄止,那么你可以说自己入门了,如果你想有所造诣那么你还远着了,对于走过了这个阶段以后,我的要求就是“背程序”,就如同别人学习英语背文章增强语感。 我说所的“背程序”,并非死记硬背,属于一种重复强化训练,围绕几个主题:
- 按键读取;
- 数码管显示(重复计算显示代码);
- LCD1602液晶显示;
- AT24C02读写;
- DS1302读写;
- DS18B20读写。
每个项目从建工程到下载成功要在20分钟以内,最好练到在10分钟左右。 对于代码需要精简而又有内涵,当你做好以后能增强你的语感及常规程序设计能力。 最后以同样的方式训练一个综合项目——多功能数字钟,这个项目可能需要一个上午才能做好。 这个过程的目的很简单,增强C语言工具的使用能力,在单片机编程这块,对于基础模块的程序设计能力,完成从感觉自己什么都懂,可要写点什么东西时又不知如何下手到实现一些简单功能程序能迅速写出来的转变。 这个方式枯燥乏味但是效果还可以,可以借鉴借鉴。 完成了上述工作,紧接着多练习综合项目,这个时候只能靠自己,学程序没有别的,只能多练,多想! 用你的开发板编写:计算器、电子日历、电子密码等各类能把你开发板上的资源综合起来用的程序。 假想就是在做项目,要对自己提出苛刻的功能要求,切记不多说差不多了,要做到完美。 再往下走,完美要回过头学习单片机原理,去学习汇编,学习单片机的运行原理对你编程有极大的帮助,再把你的C语言书拿出来,细细的看前几章节。 再往下走,你应该去研究指针了,将指针应用到你的程序当中,它可以给你解决以往你所遇到的很棘手的问题。 讲到指针,该想到结构体了,我们应该去学习链表了,我们要将简单数据结构应用到单片机了。 这个期间你如果能去学习在操作系统上的编程是很有必要的,如在VC上做简单功能界面,Linux系统编程。 这可以让你看看别人优秀代码,从中吸取经验,就算看不到源代码,也可以从别人的函数所具备的功能上思考的自己的函数设计,改善自己的函数,我的很多函数功能设计方式就是这么来的。
真心希望你坚持下来了,到这个时候你基本上已经能独立解决很多问题了。 关于单片机学习,内容远不止这些,上述只讲了单片机的程序设计方面,硬件这一块也极为重要,不理解硬件也设计不好程序。