最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

51單片機學習經(jīng)驗分享

2023-06-07 16:19 作者:穿山甲開源工作室  | 我要投稿

0x00 序

從入門學習到自娛自樂玩單片機到現(xiàn)在,不知不覺有十余年,這些年不免會被新人問到一些如何入門的問題,諸如:

如何入門單片機?

有哪些基礎知識要掌握?

有沒有什么推薦的書籍?

我想通過學習單片機做好玩的東西、從事相關行業(yè)(等等其他目的)可以嗎?

我解答過很多,但都是在技術交流群里想到什么說什么,這次做一個整理,希望能幫助到一些讀者。

本文僅適合入門8051單片機的學員。我的經(jīng)驗始終是經(jīng)驗,只能作為參考,獨立思考,應該從現(xiàn)在開始——在我的經(jīng)驗中找到適合你自己的方法!

0x01定位很重要

首先要清楚定位,或者說,你為什么要學習單片機,我總覺得,知道為什么學習(帶著問題學)比怎么學習重要,怎么學習( 學習方法)比知識點重要。

我這里總結(jié)出幾個類型:

1、為了工作學習,聽說單片機相關的行業(yè),如嵌入式、物聯(lián)網(wǎng)發(fā)展很快,就業(yè)前景好,薪資待遇高。

2、單片機愛好者,包括科班學生和半路出家的,也有些是先相關專業(yè)(專業(yè)),在學習工作中,需要相關知識,進而了解、喜歡單片機,想做點東西解決工作、生活中的一些小痛點。

3、出于興趣的非科班愛好者:學習單片機更多的是為了娛樂,豐富經(jīng)驗。這類人基礎參差不齊,有些是科班出身,但不從事此行業(yè)或未曾深入學習;有些是零基礎;我接觸過各種行業(yè)(專業(yè))的人想學習單片機的,如:養(yǎng)殖戶、流行音樂的rap、外賣員同志、退休人員,形形色色。當然還有人就是想玩,不為什么。

至于第一類人,我只能給點世俗的建議:你需要一個聰明的大腦,一紙名校文憑,只要肯學習,畢業(yè)后就業(yè)問題不大。以目前的行業(yè)發(fā)展來看,單片機(嵌入式)在很長一段時間內(nèi)都會是熱門就業(yè)行業(yè),你只需要清楚自己的方向就行。非名校的學生雖然在這幾年的大行情下找工作相對困難,但只要你基礎扎實,有像樣的時間項目,也問題不大。我見過很多學生,幾個禮拜就自稱學完了51,然后學習stm32。這樣行嗎?對于天才來說,肯定行,那么人人都是天才嗎?

我更傾向于循序漸進的學習方式,也因為工作經(jīng)歷,我更喜歡把絕大多數(shù)人當做普通人,作為普通人,不管是科班學生還是前面提到的第二、三類人,我相信只要有興趣,一定會克服種種困難,至少可以入門。以就業(yè)來說,即便是只入門水平,也可以從事相關行業(yè)。坐在電腦面前搞開發(fā)固然是水平的體現(xiàn),但這個行業(yè),不僅僅是只有開發(fā)人員。我以前的學生,就有去電子廠去維修工的,有專門畫PCB做產(chǎn)品測試的,也認識半路出家去維修設備的。都是憑技術賺錢,不是編程的料,也沒必要苛求,找到合適自己的就好。

0x02 入門單片機

興趣

我把興趣放在首位,這真的很重要?;蛟S讀者覺得,學技術本來就是靠興趣啊,是不是老生常談?大多數(shù)和我一樣經(jīng)歷過高考還不是學霸的讀者都知道,對自己的不喜歡的學科,只有硬著頭皮去學,只是為了在盛夏到來之前的6月,答完一份或許會改變你命運的試卷。

當邁入大學,或從事工作,有了自己的時間折騰感興趣的東西,尤其是通過自己的努力做出了一件作品,甚至會讓你產(chǎn)生一種錯覺:如果當初我高中再努力一點,會不會讀更好的學校,現(xiàn)在會不會在更好的實驗室,有更好的工作?可惜沒有如果。

我見過太多太多只會無腦學習的,他們能熟練說出IIC、SPI、UART、中斷等理論,也都會做老師布置的作業(yè)和開發(fā)板里的例子??墒悄阕屗麄冏鳇c不一樣的,有人就不會了,這是為什么?我總結(jié),是沒有目標,缺乏實踐。

我建議初學者結(jié)合興趣給自己樹立一個目標,這個目標可以是實際的,也可以是理論上的。我知道很多讀者是通過光立方知道我的,有人就是想做這個光立方,想學習它的原理,這就是一個目標。而我這種人,最開始是沒有這種目標的。但是我對遙控車、機器人感興趣,我想知道自動門、聲光控制的樓梯燈等等這些東西的原理,我想搞清楚,所以我來學習,這樣也是可以的。

有了興趣,你在學習的過程中,就會有想法。比如:我能不能自己做一個遙控車?我能不能自己做一個空氣質(zhì)量檢測設備?你會有很多想法,興趣會激發(fā)你去查資料、去動手,而不是局限在課堂上和單片機開發(fā)板的視頻教學里。

切記,一定要有想法,不管多么簡單幼稚,一定要去實踐,你的天賦可能一般,但實踐可以彌補。

基于興趣的動力

記得十多年前,才開始學模電數(shù)電,有個電路是做一個數(shù)控電源,通過按鍵控制電路輸出不同的電壓。為了焊接好這個電路,我搞到凌晨三點。回想起整個高中時代,我只有逃課通宵打游戲這么賣力過。等到第二天,我的電路正常工作,至此,我終于有了些成就感,這種成就感是在高中的三年模擬五年高考中得不到的——畢竟,我根本就不喜歡那些。

大學才開始學習焊接電路的時候,我的焊接水平很差,那時候沒有智能手機,沒留下照片,用我的老師的話形容我的焊點,就是雞屎堆。我的同學就有焊接的很好的,加上老師非常形象的“諷刺”,每次作品完成后,我都默默的告訴自己,下次一定要比我同學焊接的好。

這十幾年來,中間是有幾年沒做什么好玩的東西,但我沒放棄學習和思考,因為在很年輕的時候,因為興趣,養(yǎng)成了這個習慣,想放棄也難了

這就是興趣所給我的動力。

單片機除了涉及硬件,還有編程。很多看過我作品的人以為我編程很厲害,這其實學習經(jīng)驗尚淺之人的一種誤解。如果有些編程經(jīng)驗的人來看我的程序,就會發(fā)現(xiàn),我的程序沒有什么特別體現(xiàn)水平之處。我的作品大多數(shù)講究創(chuàng)意,在技術方面并不需要很復雜的知識。所以說,不要覺得會做我那些設計就意味著編程有多厲害了,我始終覺得我是入門了而已。

編程需要興趣驅(qū)使,你們看不到的是我在編程上花的時間,光立方的程序我反復修改過3000多次,遙控車我也是寫了1000多次。如果不是興趣,恐怕我不會如此堅持。

編程也需要天賦,這和做硬件不同。硬件設計更多的是經(jīng)驗,而編程除了需要經(jīng)驗,還需要有些天賦。當然天賦并不是絕對的,后天的努力也可以彌補,下文也會說到如何學習編程。就算后天的努力,在編程方面也只能達到寫寫簡單的程序,也沒有關系,我始終認為,編程是少數(shù)人可以做的好的,只要你有了這方面的基礎,或許你會發(fā)現(xiàn)其他類型的工作也很適合你。

數(shù)電模電基礎

學習單片機之前,需要一些基礎知識。數(shù)電、模電都需要有一定的了解。這方面的書籍理論還是有難度的,不要說非科班學生。就連大多數(shù)科班學生在學習理論時也是費力的。

好在入門單片機,只需要對模電、數(shù)電有所了解,當然數(shù)電要多一些。個人覺得,可以先先閱其大概。比如必學的是放大電路,學完了,尤其是自學的人,可能計算都不會,那怎么辦呢?你可以在購物平臺買個二三十的收音機套件,自己組裝焊接。通常賣家會提供原理圖。根據(jù)原理圖學習,那是最好不過的,你說看不懂也沒關系,bilibili這種網(wǎng)站很多人做基礎知識科普,哪里不會就看哪里,還有很多的技術交流群。

我羅列一些我當初入門時焊接過的套件,僅供參考,畢竟過去了十幾年,套件的選購也要與時俱進了。

FM收音機(學習放大原理)

可調(diào)電源套件(學習電源設計、整流濾波等基本原理)

聲光報警套件(學習邏輯電路)

CD4060、CD4017相關的彩燈電路(學習邏輯電路)

數(shù)字時鐘套件

功放電路(TDA系列,小燒一下即可),給自己做一套小音響

焊接、調(diào)試的電路的過程,就是你把抽象的理論具體化的過程,根據(jù)實物的現(xiàn)象,再來分析、學習原理。調(diào)試一些簡單的電路,能讓你掌握萬用表等工具的使用方法,這都是后面玩單片機所必須的技能。

關于書籍,可直接在網(wǎng)購平臺搜索“電路基礎”,買你認為價格合適的,順眼的即可。如果是業(yè)余愛好者,我推薦大多數(shù)專科學校所使用的教材(有些書籍會說明是高職教材),大專院校的教程相比本科教程而言,理論部分少一些,還有些教材注重實踐。

是否購買開發(fā)板

是否購買開發(fā)板這個問題,是被網(wǎng)友問的最多的,這里根據(jù)我的經(jīng)驗給出一些建議。

讀了前面的基礎知識介紹,你可能發(fā)現(xiàn)學單片機并沒想的那么簡單。個人認為,某些開發(fā)板鼓吹“一個月學會單片機”、“15天學會單片機”、“零基礎學會單片機”,“人人學會單片機”,恐怕更多的是一種營銷口號。我從來不去看這些教程,做技術講究的是實事求是,而不是喊口號。

我并不反對購買開發(fā)板,網(wǎng)上流行的開發(fā)板教程我都大致看過,還是說的過去的。前面提到的基礎內(nèi)容,可以在學習開發(fā)的同時兼顧學習。盡管這樣做你會發(fā)現(xiàn)幾乎沒時間娛樂、游戲。想學好一門專業(yè),尤其是這種需要大量時間實踐的專業(yè),確實要放棄一些東西。

是否購買開發(fā)板,也要根據(jù)自己的學習環(huán)境考慮。如果經(jīng)濟條件允許,可以購買一套價格合理的開發(fā)板。購買之前一代要看例程代碼多不多,最好索要幾節(jié)免費的資料或視頻。如果有自信的賣家,肯定會很大方的提供給你這些預覽資料。我之前也購買過STM32單片機的最小系統(tǒng)板,賣家的資料完全公開,不買也可以先下載。我就是看了資料后覺得不錯,最終確定買這家的,為了避免打廣告的嫌疑,這里就不指明賣家了。我想說的是,根據(jù)我的方法夠買開發(fā)板,可以減少被坑的幾率。

當然,學習單片機也不是非要購買開發(fā)板。在我的大學時代,單片機基礎是通過仿真軟件學習,實物幾乎都是自己手工焊接。我一個師弟,不知道哪里搞到一個開發(fā)板的原理圖,自己用萬能板焊出了所有模塊,然后網(wǎng)上找資料,研究各種模塊的用法。這樣半年下來,單片機學的非常好,還鍛煉了動手能力和電路調(diào)試能力。這些能力如果通過開發(fā)板方式學習,恐怕是很難短期內(nèi)掌握的。

不管是本科生還是專科生,你有條件有自己的實驗室,或者你的室友也不是很介意你在寢室玩電烙鐵,我更希望讀者優(yōu)先通過自己焊接電路的方式學習單片機,入門級的電路焊接起來并不是很復雜。電路的調(diào)試能力和故障排除能力是在日后的工作中十分重要的。

開發(fā)板的優(yōu)點是穩(wěn)定,有些單片機只有貼片封裝,如STM32,也只能買開發(fā)板。我在研究STM32程序時,就買的廉價的最小系統(tǒng)板(只有單片機的裸板,引出I/O口)。想測試什么功能時,如果有成品模塊,就買來接線用。沒有成品,就自己手工焊接,然后測試程序。而有些人往往需要馬上利用開發(fā)板上的各種模塊驗證一些想法,這個時候是非開發(fā)板不可的。但往往這個階段的人,已經(jīng)度過了初學階段。

總結(jié):時間允許,環(huán)境允許的情況下,優(yōu)先考慮用手工焊接電路的方式學習。其次考慮購買開發(fā)板。如果你的專業(yè)課程是學習STM32,建議只購買最小系統(tǒng)板,周邊模塊電路自己焊接。

PS:我也在設計單片機開發(fā)板,但區(qū)別于網(wǎng)購平臺上主流的產(chǎn)品。我會設計出更側(cè)重實踐、適合初學者入門的開發(fā)板和教程。而且是完全免費的,不需要購買,只需要自己打樣即可使用。也因為和傳統(tǒng)的單片機開發(fā)板有很大不同,短期內(nèi)是不能和大家見面了,預計1年左右有雛形,2年后成體系。

英語

我覺得,除了業(yè)余愛好者,其他人都有必要學好英語。學編程本身到不需要英語有多好,畢竟編程的關鍵字不多,死記硬背也記下來了。建議學好英語是因為,很多擴展性的資料很多都是英文的。如一些芯片手冊、一些國外愛好者設計的代碼等。至少目前來說,翻譯軟件還不能完全滿足技術方面文章的翻譯需求。

我建議讀者至少要做到有一定的詞匯量和語法基礎,結(jié)合翻譯軟件能看懂英文技術文檔即可。

0x03如何學單片機

實際上,我被問及最多的是“如何學好單片機”,然而,我至今都不認為我學的有多好,我也只能分享一些學習經(jīng)驗。至于能不能學好,我覺得這是天賦和努力的結(jié)果,何況每個人對“好”的定義也不一樣。有人滿足于找到工作,能坐在辦公室做開發(fā),有人則滿足業(yè)余時間能diy一些小東西。我屬于后者,只不過我可能再網(wǎng)上交流的過程中,多了一些思考,我覺得我可以做出更好的教程,幫助更多的人學好單片機。

這里先放上書籍,STC的官網(wǎng)(http://www.stcmcudata.com)里,下面拉,是有電子書可以下載的,有條件的可以購買紙質(zhì)書。我覺得這些書寫的都很好,足夠初學者學校8051單片機的基礎理論。

硬件篇

有了模電數(shù)電基礎、有了一定的焊接、調(diào)試經(jīng)驗,可以說打開了硬件的門。但單片機,最終的目的是可以設計電路。給一個現(xiàn)成的電路前,讓你分析、焊接、調(diào)試,只要肯花時間,你總會找到解決方法。如果你能設計一個電路,可以滿足別人提出的要求。這就是能力。隨著能力的提升、經(jīng)驗的豐富,你可以設計出更好的電路,這叫做水平。

從學習現(xiàn)有電路到可以設計電路,我沒有什么捷徑,只能說多看、多學習、多思考。并開始學習看各種元器件的手冊。很多人做我的光立方設計時,問我74HC154的工作原理,我從來沒回答過。這些知識網(wǎng)絡上都有。甚至有些人在購買元件的時候,問我窄體和寬體的74HC有沒有區(qū)別,又或者問,窄體芯片上些的是“CD74HC154EN”,這個到底是不是74HC154呢?問出這種問題的,往往是沒任何基礎的人。這不是基礎知識問題,而是懶的問題。這類人懶惰到不愿意自己查閱手冊,也不愿意利用網(wǎng)絡搜索引擎,甚至不愿意咨詢賣家。


窄體芯片上寫有“CD74HC154EN”


寬體74HC154

懶,是學不好電路的。因為懶,不愿意了解芯片,更不愿意去看更多的電路設計。

還是以74HC154為例。如果接觸了這款IC,還要思考,怎么通過程序控制它的輸出?有沒有類似的芯片?如果一時間找不到74HC154,有什么芯片可以代替?記住,永遠不要滿足于現(xiàn)有的知識,要主動的擴展自己的知識面。

最后要說的是,多焊接,多練習。網(wǎng)上找開源設計,先學習他人的設計方法。這里也不得不說,國內(nèi)好的設計拿出來開源的,相對于國外,還是較少。這也是我當初學習時遇到的最大的阻力。很多好玩的、看了后自己也想做的設計,卻沒有電路圖,沒有源代碼。這也是為什么我做開源的原因。

開發(fā)板也好,課堂也好,都是給你一個現(xiàn)成的例子去驗證。可是,那不是永遠別人說什么,你做什么嗎?學習是這樣嗎?多年交流的過程中,我遇到很多這種情況:我會模塊A的驅(qū)動,也會模塊B的驅(qū)動,利用A和B,實現(xiàn)一個功能C,他就不會了??隙ㄓ凶x者說,我沒想法,也不知道給自己設計什么實踐項目。我這里給讀者留了兩個我經(jīng)常逛的網(wǎng)站,里面很多有意思的設計,完全可以自己去復刻一下,哪怕你把設計拿出來討論,研究它的原理也是好的。

網(wǎng)站1:https://www.instructables.com/

網(wǎng)站2:https://hackaday.io/projects?sort=views

用軟件繪制電路圖、PCB也是要刻苦練習的。萬能板焊接只是起步,是搭建模型或是做一些小制作的一種最直接方法。但我也推薦,個人或?qū)W校,條件允許的前提下,多打樣PCB來實踐。這方面的經(jīng)驗,在日后的工作中非常重要。

繪圖往往是開發(fā)人員的工作,如果你的編程能力較差,完全可以把更多的精力放在繪圖上,這也是一門學問。繪圖的經(jīng)驗,需要大量的時間實踐去積累,沒有幾年的經(jīng)驗,很難設計出優(yōu)質(zhì)的電路。

如果你不怎么會畫PCB,但你有良好的焊接功底、電路分析故障、調(diào)試能力,這些也是企業(yè)所需要的。我的第一份實習工作,就需要這種能力。每天坐在辦公室等電話,哪里的設備壞了,過去現(xiàn)場維修。比如焊接通信線路,更換損壞的模塊等等?;蛟S這份工作沒有特別的難度,但好在清閑,有更多的時間來自學提升。我的一些同學、朋友,直到現(xiàn)在,都在從事這方面的工作,他們當然沒有研發(fā)人員的工資高,但我看他們每天過的很輕松愉快,這何嘗不好呢?如果說有什么缺點,就是可能經(jīng)常去外地跑,跑的多了,接觸的人多了,你還可能轉(zhuǎn)去做售前,做點商務,都是可能的。

實不相瞞,以后我就打算從事這方面的工作,這樣才有時間設計各種好玩的東西。讀者們也不要把這份工作想的過于簡單,設備的調(diào)試可不一定就是拿著萬用表到處懟,也需要用軟件調(diào)試、抓取數(shù)據(jù)。能力越強,維護的設備也就越復雜,售價越高。這種客戶請你過來,往往希望你馬上可以解決問題,人家可是等著用設備呢。我這些年就處理過幾次類似的事情,設備不復雜,但是調(diào)試人員搞了小一個月都不能讀取數(shù)據(jù),我過去后很快就搞定了。我不是說我有多厲害,我想說的是,這種工作總得有人去做,還能接觸各種各樣的人和事,也算蠻有意思的。

編程篇

在學生時代。想必你和我一樣發(fā)現(xiàn)這樣一個現(xiàn)象:不管什么課程,一樣的老師,一樣的內(nèi)容,永遠有人學的比你好。編程也是,你光有了興趣,但人家聰明的孩子,就是比你理解快,這個你有辦法嗎?反正我是沒辦法,有辦法我高中就考出好成績,讀更好的大學了。

沒天賦就學不好學編程嗎?當然也不是。我承認天賦的重要性,但我更看重后天的努力,下面的文字,中心思想是讓讀者了解如何提高自己,縮小先天帶來的差距。

我的自學之路

我讀大學時,單片機課程是用匯編語言,也只有一學期,可以想見,這一學期能學到多少東西。后來我覺得有必要學習單片機C編程,那時候也早已大學畢業(yè),就只能自學。

因為有匯編基礎,我對單片機的寄存器、中斷等概念已經(jīng)非常了解(再次強調(diào)學匯編的重要性)。我只需要學習C語言基礎即可。并不需要在原理上過多糾結(jié)。比如匯編中控制P1端口輸出,代碼為 MOV P1,#55H,我只需要知道,C語言中,同樣功能的語句是P1 = 0x55即可。

但C語言畢竟和匯編有很大的不同,有很多新知識需要我去學習。我的學習方法是,用過小項目學習。下面是我做過的一些實驗:

1 單片機實現(xiàn)流水燈

2 控制1位數(shù)碼管

3 控制多位數(shù)碼管

4 數(shù)碼管顯示溫度(DS18B20)

5 數(shù)碼管顯示時鐘(DS1302)

上面這些東西,都是我自己焊接電路,網(wǎng)上找代碼逐一實現(xiàn)。最開始,while循環(huán),for循環(huán),數(shù)組查詢,這些出現(xiàn)在程序里,我都是一頭霧水。但我不恥下問,我會問懂C語言的師弟,我也不知疲倦的通過搜索引擎學習C語言的基本知識。雖然開始慢,但畢竟對單片機本身很熟悉,沒多久,我就算掌握了一點C基礎。然后我又給自己加大難度,做了這些實驗:

6 單片機控制1602或12864

7 1620顯示溫度

8 1602超聲波測距

9 12864顯示ADC轉(zhuǎn)換

10 單片機之間的串口通信

讀者們可以發(fā)現(xiàn),這些實驗越來越有難度,但網(wǎng)上都有資料,結(jié)合單片機手冊,我也很快就掌握了這些內(nèi)容。有了些基礎后,就開始著手用C語言做新的設計,最開始是把我之前設計的光立方由匯編代碼移植為C代碼。后面又設計了光立方、手勢遙控車等作品。

說到手勢遙控車,最開始我是沒這想法的,當時只是用藍牙模塊做了一個無線遙控小車。我最開始也并不知道電機如何驅(qū)動,也沒用過藍牙模塊,都是自己通過網(wǎng)絡學習加以反復實踐。想到做手勢遙控車是接觸了ADXL345模塊,當初純粹是想學習一下IIC通信。我讀取到ADXL345模塊數(shù)據(jù)后,發(fā)現(xiàn)模塊還可以測量傾角,所以就萌生了當遙控器的想法。

對于當時的我,實現(xiàn)手勢遙控并不容易。我記得和師弟個人在實驗室里整整兩周,甚至吃飯都在思考程序怎么寫。最后還是做出來了。這里也不得不說,直到現(xiàn)在,我的編程水平仍然很一般,搞算法對我來說最頭痛的事情。這也是為什么手勢遙控車至今都沒加入PID處理。

從我的自學C編程之路可以看出,雖然我有匯編基礎得以快速入門,但我同樣也花了時間和精力,從簡單到復雜,循序漸進??偟脕碚f,我是通過一個個的小項目學習,這些小項目,在大多數(shù)開發(fā)板中也都可以學到(買不買心理有數(shù)了吧,能自己焊接當然沒必要買了)。

有些人入門后,也有計劃像我那樣做一些小項目。我經(jīng)常被問到這種問題:

我會寫數(shù)碼管程序,也會寫按鍵程序,但如何把兩部分結(jié)合起來,做一個計數(shù)器呢?如果把這個問題難度擴大,可以看做:我可以控制88的點陣(64個LED),但怎么編程控制88*8的光立方(512個LED)呢?

這其實并不是編程問題,而是設計問題。如何設計代碼實現(xiàn)功能,這是一種思想的體現(xiàn),這個過程,我覺得是一種藝術。而編程語言,不過是實現(xiàn)藝術的工具。

市面上大多數(shù)單片機編書籍或視頻教程中,基本上都是這種套路:給出一個項目,給出代碼,講解代碼功能。這樣做無可厚非,不過學習者并不能學到精髓——為什么要這樣設計?我也看過一些開發(fā)板給出的代碼,這些代碼本身就設計的不好,試問,一個本身就設計的有問題的代碼,講解的再好,又有什么意義呢?

如何學會設計程序——把用戶功能轉(zhuǎn)換為代碼,最好是優(yōu)雅的代碼。這需要花時間去領悟。也是為什么我計劃設計開發(fā)板的原因,我的B站空間,也會陸續(xù)的發(fā)布一些基礎知識,以及編程方法的方面的文章?;A知識是必須的,但怎么運用知識設計程序,才是最終目的。

如果你擅長編程,那做開發(fā)工作是最好的。雖然內(nèi)陸和沿海地區(qū)的差距較大,以我朋友在沿海地區(qū)和重慶、成都地區(qū)的薪資作為參考,作為開發(fā)人員的薪酬還是比較可觀的。如果找不到開發(fā)方面的工作,也可以先從事我前文提到的技術支持一類的工作。積累必要的工作經(jīng)驗。畢竟,不是人人都可以把自己關在宿舍里幾年就可以成就一個大疆。大多數(shù)還是循序漸進,騎驢找馬。

補充:單片機編程不同于軟件開發(fā)

有人問我,我學過C語言,是不是對學習單片機有幫助?我也是學過C編程的,根據(jù)我的經(jīng)驗,我只能說,有一點點幫助,很皮毛的幫助。對于學過C編程的人來說,上手來說確實要快一點,但僅限于此。上手快,不代表你會很快的掌握單片機編程。

這是因為,單片機的開發(fā)環(huán)境(Keil為主)和C語言(VC等)是不一樣的,很多地方不能用C語言的角度去理解單片機編程。單片機編程,是直接操作硬件,特別是用匯編編程時。這也牽涉出另一個新被問及較多的問題,要不要學習匯編編程呢?我的回答是,學習匯編是非常必要的,因為以下幾點:

① 在某些領域,是非匯編編程不可的,如汽車的遙控鑰匙,以及諸如此類的通信類編程;

② 還有些芯片的技術手冊,給出的例程代碼本身就是匯編,如果你需要用C語言設計程序,前提就是看得懂官方給出的匯編例程;

③ 學習單片機的寄存器功能、尋址方法等。

④學習單片機寄存器知識,理解單片機編譯原理,也是非匯編不可的。如果你有時間或興趣,可以閱讀這篇文章,文中分析編譯的過程,就需要匯編語言。(有興趣的可以閱讀一下這篇文章)

很多網(wǎng)友和我交流說,他們學校不再開設單片機匯編教學,從長遠看,這是不利于學生的發(fā)展的,但好在可以通過互聯(lián)網(wǎng)學習匯編知識。這里我推薦《微機原理與接口技術》(清華大學出版社)作為匯編入門。入門后,讀者可購買一些提供了匯編實例的單片機書籍再學習單片機匯編編程。

前期學習匯編,不需要搞特別復雜的程序,掌握書中的程序即可。如果是學習STC公司的單片機,參考STC官方手冊中的匯編代碼是一種性價比最高的方法,它完全免費,代碼可讀性強。

篇幅有限,關于編程先寫這么多。我會在日后的時間里,陸續(xù)更新編程方面的文章。

0x04 選擇什么單片機

現(xiàn)在主流的單片機平臺有51單片機、STM32、STM8、arduino、AVR等,大部分人都是通過學習51單片機入門。有些人學了一段時間,聽說有STM32、arduino等平臺更強大,于是51還沒學好就轉(zhuǎn)投其他。又或者不少讀者此時正在糾結(jié),要不要學一段時間51后轉(zhuǎn)為學習STM32等。

這里我想說,如果已經(jīng)選擇了51作為入門的讀者,或者專業(yè)課程一開始就學習STM32人,好好的學下去。單片機編程,最重要的是程序思路。以光立方為例,這個設計可以用51單片機,也可以用STM32實現(xiàn)。

經(jīng)常遇到一些人,他們只學過STM32單片機,看到我的光立方用的是51單片機,就問我:STM32能做光立方嗎?當我回答能時,他們又問:怎么做呢?我也曾耐心回答:STM32和51單片機做光立方的區(qū)別是I/O口、定時器、串口初始化這些不同,但控制燈珠的邏輯是完全相同的。只要你理解了硬件控制原理,就不難把程序移植到STM32單片機。問我這些問題的,至今我也沒見過有用STM32做出光立方的。因為真正會學好編程和硬件的人,看了我的電路及代碼,自然知道怎么做。沒有學好的人,你讓他用什么單片機都無法實現(xiàn)。

現(xiàn)在的我,就不糾結(jié)單片機平臺,光立方我是用51單片機做的。如果需要,我隨時可以移植到AVR、STM32、arduino平臺,因為我掌握了它的原理。

與其糾結(jié)學習什么類型的單片機,不如用心學好一種單片機。一旦學好,當你需要轉(zhuǎn)入到其他單片機平臺時,你會發(fā)現(xiàn)學習成本大大降低。

0x05 培養(yǎng)獨立思考精神

多年來和網(wǎng)友的交流發(fā)現(xiàn),不少學生不會質(zhì)疑,迷信權(quán)威。這也難怪,我們自幼被灌“老師就是權(quán)威”,“書本就是權(quán)威”。有些在校的科班學生經(jīng)常請教我編程問題。在我給出答案后,還在懷疑,甚至來一句:但我的老師不這么講的、我的老師說應該怎么怎么樣。這類人,是極度的不自信,或者是有極高的奴性。老師就不能犯錯嗎?換個角度說,你既然找我問問題,本身就是質(zhì)疑老師了,我給了一個答案,為什么你懷疑我,就不懷疑你的老師呢?

在學習的過程中,你的老師、其他人的程序或者文章很有可能是有錯誤的,不嚴謹?shù)?。如果你迷信?quán)威,覺得老師說的永遠是對的,很難學好單片機這種專業(yè)。

其他行業(yè)我不知道,但我敢說,做技術這一行,就是要敢于質(zhì)疑。你什么可能有很多高手同事、朋友,他們總能快速的完成上面交辦的任務。那他們當中有多少人會自己做出有意思的項目呢?

如何培養(yǎng)獨立思考精神,

這才是最關鍵的問題。我的建議是多讀書。這里說的讀書不是消遣類的,而是名著一類。喜歡歷史的可以讀《史記》、《三國志》,喜歡國外文學的,我推薦大仲馬、莫泊桑、都德、海明威、馬克·吐溫的書。喜歡紀實性的,我推薦海爾·達爾的書,或者其他人物傳記。

讀書讓你學會表達

我有過給學生授課的經(jīng)驗。我觀察發(fā)現(xiàn),編程學的好的人,不管他平時多么沉默寡言,只要涉及到編程項目,你問他的思路,實現(xiàn)方法,他們總能準確的描述出。而往往學的不好的人,都不知道自己要做什么,或者知道做什么,遇到了問題想問我,但總是無法準確描述他們的問題。導致我經(jīng)常需要花時間去猜測他的意圖。

不僅是在現(xiàn)實中,和眾多網(wǎng)友的交流中也發(fā)現(xiàn)很多初學者都存在這個問題。說了半天,不知道他想做什么,想實現(xiàn)什么功能。最終和這種人的交流都不了了之。而有些網(wǎng)友,總能簡明扼要說明自己的問題,讓我知道如何下手去研究問題。通常情況下,都可以很快的解決問題。而這類人,也往往學的很好。

我也看過不少網(wǎng)友的代碼,大多數(shù)看這些人的代碼,是因為他們實在無法梳理自己的語言。但每次看這種人的代碼都是一種煎熬,且不說雜亂無章的拼音命名、毫無規(guī)律的縮進。就說整個程序,毫無邏輯可言。我接觸的大多數(shù)網(wǎng)友來說,那些無法用漢語準確描述問題的人,他們的代碼通常也是讓人頭疼的。

或許讀者不以為然,覺得讀書有那么重要嗎?這里說一段我們大家都熟悉的三國故事。

劉備叛逃曹操來到荊州劉表的地盤,劉表這個人,是胸無大志的,劉備呢,又很得人心,劉表不得不提防?!度龂尽分挥昧巳齻€字,就非常形象的描寫出劉表的心態(tài)和做法:

荊州豪杰歸先主(指劉備)者日益多,表(指劉表)疑其心,陰御之。

“陰御之”三個字,是不是很傳神?

除了學習中的提問,在工作中,也會經(jīng)常需要寫一些技術文檔,比如申請專利、產(chǎn)品說明書、項目問題匯總等等。如果你的代碼、技術文檔也可以有如此簡單明了,我相信你很快可以在職位競爭中脫穎而出。

最后,我還要推薦一本書給打算從事開發(fā)工作的讀者?!对O計心理學》,作者唐納德·A·諾曼。相信我,這本書會讓你相見恨晚。我讀了這本書后,在我的新設計中,遵從書中的一些觀點后,我發(fā)現(xiàn),這樣做確實有好處;也讓我有了更多的思考問題的方式方法。讀了這本書,你也可能培養(yǎng)出有獨到的眼光,發(fā)現(xiàn)他人設計或你自己設計中存在的不足,并知道如何改進。

0x06 謙虛

這里說的謙虛,不是指小時候家長告訴我們:如果有人表揚你,你一定要謙虛,不能顯露出得意,而是要說,這沒什么,都是老師教的好,爸媽教的好,我做的還不夠好。這些話我們從小就學會了,我們也稱之為謙虛,雖然我更認為這是一種虛偽。

本文說的謙虛,是指可以認識到自己的不足,學習的越多,越能發(fā)現(xiàn)自己的弱點,進而激發(fā)學習的欲望。面對比自己水平高的人,能夠質(zhì)疑,但也保持尊敬的態(tài)度,虛心請教。

我發(fā)現(xiàn),很多才入門的人,極度的不謙虛。

很多網(wǎng)友在做我的設計時候,焊接好沒有調(diào)試成功,便會問我:我通電后不工作,是不是你的電路設計有問題呢?或者程序有問題?在得到我肯定回答,說電路、代碼都沒問題后。過段時間再來找我,說會不會我的電路或代碼有問題。我問他們,你們電路檢查過嗎?他們信誓旦旦的回答說檢查了好幾次,十分確定自己焊接的電路沒問題。

在我看來,這類人就是不謙虛。只檢查過幾次就認為自己的電路一定沒問題,直接懷疑原作者。殊不知,如果我真的上傳了有問題的電路或代碼,為什么其他人可以做出來呢?為什么還要開放QQ群和QQ號碼方便交流呢?

還有些比較基礎的問題,我會讓我們直接去自己搜索。有些人道是干脆,說“我什么都自己去搜,我還找你干嘛?”這是一種狂的沒邊的態(tài)度。殊不知,雖然我不是什么大神,但就那些基礎問題,我基本上都有在網(wǎng)上檢索過。網(wǎng)上檢索不到答案的,或者說答案不準確的,我都會直接回答。

還有一種非常愚蠢的人,問我代碼相關的問題。本來我都是樂于回答的,可我的時間寶貴,除了有意義的提問,我都是建議提問者自行搜索(通常我確定搜索可以找到答案)。但有人也毫不客氣的對我說“既然這個東西是你設計的,你就應該回答我的問題”。這給我的感覺好像我欠了他什么一樣。他們覺得,開源作者有義務給你解答他想知道的任何問題。他們不知道,這個世界上,肯無私開源的人,本來就是少數(shù),而一味索取的貪婪之人卻比前者多很多。遇到這種人,我都懶得理,覺得有失身份。

在技術群或技術論壇研究問題時,用盡量簡明的語言描述問題,說明自己的的目的,以及嘗試的方法,報錯信息等。事先在網(wǎng)上檢索一些答案,驗證過不行,或驗證后想知道有更好的辦法,再來提問。一旦有人回答提問,應當馬上去驗證。不要讓回答問題的人等你有時間了才去驗證。這是我最喜歡的一種謙虛的提問方式及學習態(tài)度,我自己也是這么做的。有時候有大神回答我的問題,我可以不吃飯,不睡覺,因為他們的時間是寶貴的,難得為我解答問題。

51單片機學習經(jīng)驗分享的評論 (共 條)

分享到微博請遵守國家法律
蚌埠市| 田东县| 遂溪县| 柞水县| 赤水市| 卓尼县| 大连市| 延长县| 怀安县| 柳林县| 遂昌县| 杭锦后旗| 开远市| 蓬莱市| 洛隆县| 台中县| 黄山市| 盐亭县| 安多县| 宁都县| 松江区| 澄江县| 青田县| 莱芜市| 宜州市| 定襄县| 略阳县| 巴林右旗| 女性| 遂宁市| 密山市| 浑源县| 南乐县| 元朗区| 德州市| 岚皋县| 汤阴县| 临海市| 蕉岭县| 扎兰屯市| 肥乡县|