51單片機教程之基礎(chǔ)編(基于C語言)
OK!說了這么多,你會問:學(xué)習(xí)單片機能有什么錢途?嗯!學(xué)東西無非就是想賺錢,現(xiàn)在說學(xué)東西是業(yè)余愛好的話只有有錢人在說,誰敢說學(xué)手藝不是為了吃飯?你?你?還是你?呵呵...目前這個世界上單片機無所不在,洗衣機,電視機,電冰箱等等...都有單片機的身影,單片機就是單片微型計算機的簡稱,最早由英特爾公司發(fā)明,沒錯!就是大名鼎鼎的英特爾!哎!又一中國人的遺憾!電子技術(shù)什么東西才是我們中國的專利??!說到計算機,咦?名字很熟悉?這個計算機可不是我們用的計算器啊,而是指電腦!什么?你說單片機是一個電腦?對!沒錯,單片機就是一個微型電腦。一個電腦的基本組成是這樣的:輸入系統(tǒng)(鍵盤)、輸出系統(tǒng)(顯示器)、計算系統(tǒng)(主機),你看你家的電腦是不是這樣?其實主機還包含了運算系統(tǒng)(CPU)、程序存儲器(硬盤)、數(shù)據(jù)存儲器(內(nèi)存),拆開你的電腦主機,是不是也是這樣?我們用的單片機其實除了輸入輸出系統(tǒng),已經(jīng)包含了其它東西,所以就微型計算機,英文叫MCU,又叫微處理器。早期的單片機是英特爾的4004單片機,是4位的,由于功能太弱了,早已經(jīng)淘汰,本人就不羅嗦了。現(xiàn)在我們用的單片機就51系列單片機,是英特爾最經(jīng)典最成功的發(fā)明,由于51單片機價格便宜,功能齊全,到現(xiàn)在10幾年歷史,依然火爆,估計未來10年,51單片機不會淘汰,所以51單片機對初學(xué)者很合適。目前一個單片機工程師工資都在5000左右,視你的能力吧,上萬的都有。單片機應(yīng)用小到手機,大到火箭,都需要用到。只不過功能強弱不同,價格也不同,從幾塊錢到100多塊錢。你說火箭的單片機要多少錢?我想最多100多塊!什么?是不是真的?我想是!既然單片機這么厲害,為什么這么便宜?主要是現(xiàn)在技術(shù)成熟,產(chǎn)量大,目前世界上很多公司都在生產(chǎn)51核心的單片機,國內(nèi)的話就有STC公司。
本文引用地址:http://www.ex-cimer.com/article/201612/324318.htm好了,那么學(xué)單片機該如何入手呢?俗話說,小錢不出,大錢不入,當(dāng)然是要先花點錢買設(shè)備了,放心,不貴,200多塊左右,不要告訴我你連200多塊的錢都沒有?現(xiàn)在淘寶上有很多開發(fā)板,而且還送教程,價格都在200塊左右。開發(fā)板就是用來學(xué)習(xí)單片機的,雖然現(xiàn)在有很多仿真軟件,但是跟實際應(yīng)用還是有區(qū)別的。本人就有這樣的經(jīng)歷,自己寫了個程序,在仿真軟件始終無法正常運行,但是到了實際電路運行很正常,所以開發(fā)板不能省。學(xué)習(xí)單片機最主要是多學(xué)習(xí)多實踐,多在論壇上逛,遇到問題要自己研究,實在不行可以網(wǎng)上發(fā)帖問問。買了開發(fā)板,首先你得先學(xué)習(xí)C語言,C語言最重要就是關(guān)鍵字,語法。目前最常用的51編譯器就是KEIL了,這個大家可以去網(wǎng)下載,現(xiàn)在都是破解版的了。單片機大家可以買ATMEL的單片機,這個是最常用的了,就買AT89S52這個吧,注意S的支持ISP編程,而C的不支持。什么是ISP呢?ISP就是在線編程的意思,就是無需拔下芯片就能寫程序,這個對我們學(xué)習(xí)是很方便的。
現(xiàn)在網(wǎng)上很多教程有一些都是誤人子弟,有不少錯誤,本人總結(jié)了很多經(jīng)驗,因為在此之前本人對單片機也是小白一個,所以很會理解初學(xué)者的心里。下載了KEIL,買了單片機開發(fā)板和單片機,下面我們就來開始單片機學(xué)習(xí)之旅吧,先來看出自單片機教程網(wǎng)www.51hei.com第4課的一個閃爍燈的小程序(他文章中主要從匯編的角度詳解了閃爍燈的工作原理,我對此進行了C語言方面的詳解算是對第4課的補全.):
#include
#define uchar unsigned char //宏定義
sbit LED=P1^0; //定義引腳
void delay() //延時函數(shù)
{
uchar a,b;
for(a=200;a>0;a--)
for(b=200;b>0;b--);
}
void main() //主函數(shù)
{
while(1)
{
LED=0; //點亮LED
delay(); //延時
LED=1; //熄滅LED
delay(); //延時
}
}
在這里我先說明一個問題,關(guān)于KEIL的使用網(wǎng)上有很多教程,由于時間關(guān)系這里我就不說了。上面是一個LED閃爍的小程序,初學(xué)者往往連這個也看不懂,好像在看天書,別急!本人剛開始也是!我一個個說明。第一個,就是頭文件,什么是頭文件呢?就是編譯器里面的一個庫,里面定義了單片機的一些寄存器,寫了這個頭文件,編譯器就知道你使用的是52單片機,以下的操作它就認(rèn)識了,否則編譯會報錯!第二個,宏定義,就是自己定義的新名字,上面的操作就是告訴編譯器,以后遇到uchar就是unsigned char了,便于書寫,節(jié)省時間。第三個,就是定義單片機的引腳,如果我的LED接在P1.0這個引腳上,就這樣定義了,以此類推。好了,開始說函數(shù),有人說編程要大學(xué)生才可以,NO!NO!NO!就拿我來說,我才初中畢業(yè)呢!不過話說回來,你的英語必須有30分以上,代數(shù)在60分以上才可以,否則吃力!呵呵....因為C語言運用到了計算,單詞等初中知識。這個是一個延時函數(shù),因為單片機運行速度很快,如果不延時,LED閃爍就十分快,我們是分辨不出來的。那么這個是怎么延時的呢?首先我們定義了兩個變量a、b,然后a先賦值200,for這個是32個關(guān)鍵字其中一個,是一個循環(huán)語句,首先執(zhí)行a=200,接著判斷a是否大于0,如果不是,則執(zhí)行a--,就是a-1,直到a=0,這個語句執(zhí)行了200次,同樣下面的語句也是,這兩個語句這樣寫起到了嵌套作用,就是上面執(zhí)行完了執(zhí)行下面,這樣就執(zhí)行了200*200=40000次。為什么要這樣呢?就是為了延時!其實這個程序就是讓CPU在那里執(zhí)行空操作浪費時間來達到延時目的。下面的函數(shù)叫主函數(shù),C語言每一個程序都有且只有一個主函數(shù)main,程序都是從主函數(shù)開始執(zhí)行,上面的延時函數(shù)叫子函數(shù),也叫子程序,主函數(shù)可以調(diào)用子函數(shù),反過來子函數(shù)是不可以調(diào)用主函數(shù)的。前面大家都注意到有一個void ,void在英文的意思是空,意思這個函數(shù)不帶返回值,至于什么是返回值,以后再說。在函數(shù)的后面還有一個小括號,這個里面也是有一個void的,只是省略了,那這個是什么作用呢?這個就是函數(shù)的參數(shù),什么參數(shù)?也是以后再說!程序從主函數(shù)開始,進入了while(1)這個函數(shù)體,每個函數(shù)體都要有一個大括號來包括,while的意思是如果括號里面的條件為真即為1,就執(zhí)行里面的程序,否則退出,所以也是一個循環(huán)函數(shù),把里面寫1就是這個while永遠為真,永遠執(zhí)行這個函數(shù),這樣做的目的就 是讓程序不斷執(zhí)行下去,這樣LED就不斷閃爍了。到了LED=0時,意思是把單片機P1.0這個引腳置為低電平,LED正極是接電源的,負(fù)極接P1.0,這樣LED就亮了。接著,延時,到這里單片機執(zhí)行延時函數(shù),緊接著LED=1,意思P1.0置為高電平,這個時候LED就滅了,然后又是延時,再點亮,周而復(fù)始,LED就閃爍了。閃爍的頻率由延時函數(shù)決定,當(dāng)然你可以再寫個for,這個LED閃爍就更慢了。
看了這個小程序,你有什么感覺?實際上設(shè)備上的程序比這個可是復(fù)雜多了,要學(xué)的東西太多了。好了,先到這里,我會慢慢教大家繼續(xù)深入單片機編程,大家有什么要交流可以加本人QQ.只要我有時間,絕對做出回答。
評論