51單片機(jī)C語言入門教程

姓名:李浩然

學(xué)號:16030410020

轉(zhuǎn)自:http://www.51hei.com/bbs/dpj-43893-1.html(有刪改)

【嵌牛導(dǎo)讀 】:相信很多愛好電子的朋友,對單片機(jī)這個詞應(yīng)該都不會陌生了吧。不過有些朋友可能只聽說他叫單片機(jī)沟娱,他的全稱是什么也許并不太清楚,更不用說他的英文全稱和簡稱了。單片機(jī)是一塊在集成電路芯片上集成了一臺有一定規(guī)模的微型計算機(jī)。簡稱為:單片微型計算機(jī)或單片機(jī)(Single Chip Computer)须尚。單片機(jī)的應(yīng)用到處可見振愿,應(yīng)用領(lǐng)域廣泛,主要應(yīng)用在智能儀表红选、實(shí)時控制澜公、通信、家電等方面喇肋。不過這一切都沒什么關(guān)系坟乾,因?yàn)槲遥ó?dāng)然也包括任何人)都是從不知道轉(zhuǎn)變成知道的,再轉(zhuǎn)變成精通的〉溃現(xiàn)在我只想把我學(xué)習(xí)單片機(jī)的經(jīng)歷甚侣,詳細(xì)地講敘給大家聽聽。

【嵌牛鼻子】:編程器慧脱、實(shí)驗(yàn)板渺绒、仿真器、程序?qū)嵗馀浮ED燈點(diǎn)亮

【嵌牛提問】:學(xué)習(xí)52單片機(jī)應(yīng)從何處開始學(xué)起宗兼?LED燈如何用程序點(diǎn)亮?有何更加優(yōu)化的程序算法氮采?

【嵌牛正文】:

你每天捧著本書殷绍,把那本書翻爛,也永遠(yuǎn)學(xué)不會單片機(jī)的鹊漠!剛接觸單片機(jī)的朋友主到,看了資料,一定會對以下幾個詞見的比較多躯概,但是具體的概

念還是比較模糊登钥,現(xiàn)作如下說明:

(1)編程器編程器是用來燒單片機(jī)芯片的,是把HEX或者BIN文件燒到單片機(jī)ROM里的,供單片機(jī)運(yùn)行的娶靡。

(2)實(shí)驗(yàn)板實(shí)驗(yàn)板是專為初學(xué)者根據(jù)某些要求而特做的板牧牢,一般上面就有一個單片機(jī)的最小系統(tǒng),使用者只需寫好程序姿锭,燒好芯片塔鳍,放

到上面加以驗(yàn)證的這么一個工具。有了實(shí)驗(yàn)板呻此,對與初學(xué)者來說轮纫,省去了焊個最小系統(tǒng)的麻煩。但是對于電子開發(fā)人員來說焚鲜,作用并不是很大

(3)仿真器仿真器是直接把HEX或者BIN文件暫時放在一個芯片里掌唾,再通過這個芯片的引腳連接到實(shí)驗(yàn)板或者系統(tǒng)上工作放前。這樣以來,可

以省去了來回插拔芯片帶來的不必要麻煩郑兴。

我一開始也不知道上面3個的概念和作用,嘿嘿,原本想買個實(shí)驗(yàn)板(不想焊板,因?yàn)椴豢赡転榱它c(diǎn)亮幾個流水燈,而去焊個單片機(jī)的最小系統(tǒng))的,可是結(jié)果,確和我想的正好相反,人家出售的是編程器犀斋。等貨物寄到后贝乎,才知道自己搞錯了情连!汗。览效。却舀。嘿嘿。現(xiàn)在想想實(shí)在是又氣又笑锤灿。我花了160大樣買了個編程器(很不幸的是挽拔,這個編程器更本用不了,一燒芯片但校,芯片就燒壞了)把我給氣的螃诅,這個編程器,現(xiàn)在還躺在我的抽屜里呢不過状囱,現(xiàn)在想想术裸,唯一讓我覺得欣慰的是,那個老板每次能解答我的問題亭枷,連那種超級幼稚的問題袭艺,他也能不嫌麻煩地盡量幫我解答!這點(diǎn)讓我很感動叨粘!

第三猾编,想學(xué)單片機(jī)的必需品--PC。因?yàn)閷懗绦蛏茫幾g或者是仿真都是通過PC完成的答倡。如果沒有PC,什么也做不了B康场1衿病!有了PC最好還要可以上網(wǎng)鼻弧,因?yàn)槿绻銢]有可以和你交流單片機(jī)的人设江,遇到自己解決不了的問題,一直都想不通攘轩,那么估計你學(xué)習(xí)單片機(jī)的熱情就會隨著時間的推移而慢慢耗盡叉存。如果你能上網(wǎng)通過論壇或者QQ群,問題就很快得到解決度帮。這樣的學(xué)習(xí)效率一定很高歼捏!真正的高手是從論壇中泡出來的稿存!

有了上述3個條件后,你就可以開始學(xué)你的單片機(jī)了瞳秽。但是瓣履,真的做起來并沒有我所說的那么簡單。你一定會遇到很多很多的問題练俐。比如為了讓單片機(jī)實(shí)現(xiàn)某個功能袖迎,你可能不知道怎么去寫某個程序∠倭溃或是你看懂了資料上某個相似的程序燕锥,你自己卻寫不出來。遇到類似的情況悯蝉,

記坠樾巍:千萬不要急噪,就行鼻由!

(二)

說了這么多了暇榴,相信你也看了很多資料了,手頭應(yīng)該也有必備的工具了吧=妒馈(不要忘了上面講過幾個條件的哦)蔼紧。那個單片機(jī)究竟有什么功能和作用呢?先不要著急讨彼!接下來讓我們點(diǎn)亮一個LED(搞電子的應(yīng)該知道LED是什么吧^_^)我們在單片機(jī)最小系統(tǒng)上接個LED,看我們能否點(diǎn)亮它!對了,上面也有好幾次提到過單片機(jī)最小系統(tǒng)了歉井,所謂單片機(jī)最小系統(tǒng)就是在單片機(jī)上接上最少的外圍電路元件讓單片機(jī)工作。一般只須連接晶體哈误、VCC哩至、GND、RST即可蜜自,一般情況下菩貌,AT89C51的31腳須接高電平。

#include? ?? ?//頭文件定義重荠〖祝或用#include其具體的區(qū)別在于:后者定義了更多的地址空間。

//在Keil安裝文件夾中戈鲁,找到相應(yīng)的文件仇参,比較一下便知!

sbit P1_0 = P1 ^ 0;? ? //定義管腳

void main (void)

{

while(1)

{

P1_0 = 0;//低電平有效婆殿,如果把LED反過來接那么就是高電平有效

}

}

就那么簡單诈乒,我們就把接在單片機(jī)P1_0上的LED點(diǎn)亮了,當(dāng)然LED是低電平婆芦,才能點(diǎn)亮怕磨。因?yàn)槲覀儼袻ED的正通過電阻接至VCC喂饥。P1_0 = 0;類似與C語言中的賦值語句,即把0賦給單片機(jī)的P1_0引腳,讓它輸出相應(yīng)的電平肠鲫。那么這樣就能達(dá)到了我們預(yù)先的要求了员帮。while(1)語句只是讓單片機(jī)工作在死循環(huán)狀態(tài),即一直輸出低電平导饲。如果我們要試著點(diǎn)亮其他的LED捞高,也類似上述語句。這里就不再講了帜消。

點(diǎn)亮了幾個LED后棠枉,是不是讓我們聯(lián)想到了繁華的街區(qū)上流動的彩燈。我們是不是也可以讓幾個LED依次按順序亮呢泡挺?答案是肯定的!其實(shí)顯示的原理很簡單命浴,就是讓一個LED滅后娄猫,另一個立即亮,依次輪流下去生闲。假設(shè)我們有8個LED分別接在P1口的8個引腳上媳溺。硬件連接,在P1_1--P1_7上再接7個LED即可碍讯。例程如下:

#include

sbit P1_0 = P1 ^ 0;

sbit P1_1 = P1 ^ 1;

sbit P1_2 = P1 ^ 2;

sbit P1_3 = P1 ^ 3;

sbit P1_4 = P1 ^ 4;

sbit P1_5 = P1 ^ 5;

sbit P1_6 = P1 ^ 6;

sbit P1_7 = P1 ^ 7;

void Delay(unsigned char a)

{

unsigned char i;

while( --a != 0)

{

for(i = 0; i < 125; i++); //一個;表示空語句,CPU空轉(zhuǎn)悬蔽。

}? ?? ?? ? //i從0加到125,CPU大概就耗時1毫秒

}

void main(void)

{

while(1)

{

P1_0 = 0;

Delay(250);

P1_0 = 1;

P1_1 = 0;

Delay(250);

P1_1 = 1;

P1_2 = 0;

Delay(250);

P1_2 = 1;

P1_3 = 0;

Delay(250);

P1_3 = 1;

P1_4 = 0;

Delay(250);

P1_4 = 1;

P1_5 = 0;

Delay(250);

P1_5 = 1;

P1_6 = 0;

Delay(250);

P1_6 = 1;

P1_7 = 0;

Delay(250);

P1_7 = 1;

}

}

sbit定義位變量捉兴,unsigned char a定義無符字符型變量a蝎困,以節(jié)省單片機(jī)內(nèi)部資源,其有效值為0~255倍啥。main函數(shù)調(diào)用Delay()函數(shù)禾乘。

Delay函數(shù)使單片機(jī)空轉(zhuǎn),LED持續(xù)點(diǎn)亮后虽缕,再滅始藕,下一個LED亮。while(1)產(chǎn)生循環(huán)氮趋。

(三)

上面我們講了如何使LED產(chǎn)生流動伍派,但是你是否發(fā)現(xiàn)一個問題:寫的太冗長了!能不能再簡單點(diǎn)呢剩胁?可以诉植!可以使用C51的內(nèi)部函數(shù)INTRINS.H實(shí)現(xiàn)。函數(shù)unsigned char _crol_(unsigned chara, unsigned char n)可以使變量a循環(huán)左移n位摧冀,如果我們先給P1口賦0000 0001那么當(dāng)n為1時倍踪,便會產(chǎn)生和上面一樣的效果建车!

#include

#include

void Delay(unsigned char a)

{

unsigned char i;

while( --a != 0)

{

for(i = 0; i < 125; i++);

}

}

void main(void)

{

unsigned char b, i;

while(1)

{

b = 0xfe;

for(i = 0; i < 8; i++)

{

P1 = _crol_(b, 1);

b = P1;

Delay(250);

}

}

}

INTRINS.H函數(shù)中的unsignedchar _cror_(unsigned char a, unsigned char n)右移也可以實(shí)現(xiàn)同樣的效果!這里就不再累述。

流水燈的花樣很多,我還寫過那種拉幕式的流動等,程序很簡單疫赎,有興趣的朋友,可以自己試著寫寫!對了,講了那么多,有些朋友一定還不知道編譯軟件怎么用?這里給大家介紹幾個吧席函?WAVE(偉福)大家一定聽說過吧!還有一個就是KEIL2,我用的就是KEIL2录煤,下面就來講講如何使用KEIL2這個編譯軟件了嚎!

1.安裝軟件响委,這個應(yīng)該不用再講了吧新思!

2.安裝完后,啟動KEIL軟件左擊Project-->NewProject-->輸入文件名-->選擇我們所以使用的芯片(這里我們一般用到Atmel的AT89C51或AT89C2051赘风,點(diǎn)確定。

3.點(diǎn)File-->New-->輸入我們編寫的程序纵刘,保存為.C文件邀窃。(一般情況下,我們保存的文件名和前面的工程名一樣假哎。)

4.展開Target 1 -->右擊Source Group 1 -->Add Files to Group'Source Group 1'-->選擇剛才保存的.C文件點(diǎn)擊ADD后瞬捕,關(guān)閉對話框。這樣.C文件就被加到了Source Group 1下舵抹。

5.右擊Target 1-->Options for 'Target1' -->Target中填寫晶體的大小肪虎,Output中,在Create HEX Files前打上鉤惧蛹,點(diǎn)確定扇救。

6.點(diǎn)Project-->Rebuild All TragetFiles,若提示creating hex file from "XXX"..."XXX" - 0 Error(s), 0 Waring(s).

表示編譯和生成HEX文件成功香嗓!接下來的就是把HEX文件燒到單片機(jī)中迅腔,或是仿真器上,看是否達(dá)到預(yù)先的目的靠娱!

嘿嘿沧烈!現(xiàn)在是否自己好有成就感了,如果讓你去做個流水彩燈像云,開發(fā)一個簡單的產(chǎn)品锌雀,只要加上驅(qū)動電路蚂夕,就可以做出漂亮的流動彩燈了!到現(xiàn)在為止腋逆,你應(yīng)該知道單片機(jī)的功能有多強(qiáng)大了吧婿牍,如果單純的用數(shù)字電路或模擬電路的知識去設(shè)計一個流動彩燈,可能要花點(diǎn)工夫和時間才行闲礼,有了單片機(jī)牍汹,那就不一樣了,你只要寫程序控制他就行柬泽!有人說過這樣一句話慎菲,也并不無道理的,學(xué)單片機(jī)锨并,程序思想很重要露该!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市第煮,隨后出現(xiàn)的幾起案子解幼,更是在濱河造成了極大的恐慌,老刑警劉巖包警,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撵摆,死亡現(xiàn)場離奇詭異,居然都是意外死亡害晦,警方通過查閱死者的電腦和手機(jī)特铝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來壹瘟,“玉大人鲫剿,你說我怎么就攤上這事〉竟欤” “怎么了灵莲?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長殴俱。 經(jīng)常有香客問我政冻,道長,這世上最難降的妖魔是什么粱挡? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任赠幕,我火速辦了婚禮,結(jié)果婚禮上询筏,老公的妹妹穿的比我還像新娘榕堰。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布逆屡。 她就那樣靜靜地躺著圾旨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪魏蔗。 梳的紋絲不亂的頭發(fā)上砍的,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機(jī)與錄音莺治,去河邊找鬼廓鞠。 笑死,一個胖子當(dāng)著我的面吹牛谣旁,可吹牛的內(nèi)容都是我干的床佳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼榄审,長吁一口氣:“原來是場噩夢啊……” “哼砌们!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起搁进,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤浪感,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后饼问,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體影兽,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年莱革,在試婚紗的時候發(fā)現(xiàn)自己被綠了赢笨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡驮吱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出萧吠,到底是詐尸還是另有隱情左冬,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布纸型,位于F島的核電站拇砰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏狰腌。R本人自食惡果不足惜除破,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望琼腔。 院中可真熱鬧瑰枫,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至盯另,卻和暖如春性含,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸳惯。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工商蕴, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芝发。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓绪商,卻偏偏與公主長得像,于是被迫代替她去往敵國和親后德。 傳聞我的和親對象是個殘疾皇子部宿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容