日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

51c语言编程入门教程,51单片机C语言入门教程

發(fā)布時間:2023/12/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 51c语言编程入门教程,51单片机C语言入门教程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

姓名:李浩然

學(xué)號:16030410020

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

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

【嵌牛鼻子】:編程器、實驗板、仿真器、程序?qū)嵗ED燈點亮

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

【嵌牛正文】:

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

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

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

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

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

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

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

我一開始也不知道上面3個的概念和作用,嘿嘿,原本想買個實驗板(不想焊板,因為不可能為了點亮幾個流水燈,而去焊個單片機的最小系統(tǒng))的,可是結(jié)果,確和我想的正好相反,人家出售的是編程器。等貨物寄到后,才知道自己搞錯了!汗。。。嘿嘿。現(xiàn)在想想實在是又氣又笑。我花了160大樣買了個編程器(很不幸的是,這個編程器更本用不了,一燒芯片,芯片就燒壞了)把我給氣的,這個編程器,現(xiàn)在還躺在我的抽屜里呢不過,現(xiàn)在想想,唯一讓我覺得欣慰的是,那個老板每次能解答我的問題,連那種超級幼稚的問題,他也能不嫌麻煩地盡量幫我解答!這點讓我很感動!

第三,想學(xué)單片機的必需品--PC。因為寫程序,編譯或者是仿真都是通過PC完成的。如果沒有PC,什么也做不了!!!有了PC最好還要可以上網(wǎng),因為如果你沒有可以和你交流單片機的人,遇到自己解決不了的問題,一直都想不通,那么估計你學(xué)習(xí)單片機的熱情就會隨著時間的推移而慢慢耗盡。如果你能上網(wǎng)通過論壇或者QQ群,問題就很快得到解決。這樣的學(xué)習(xí)效率一定很高!真正的高手是從論壇中泡出來的!

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

記住:千萬不要急噪,就行!

(二)

說了這么多了,相信你也看了很多資料了,手頭應(yīng)該也有必備的工具了吧!(不要忘了上面講過幾個條件的哦)。那個單片機究竟有什么功能和作用呢?先不要著急!接下來讓我們點亮一個LED(搞電子的應(yīng)該知道LED是什么吧^_^)我們在單片機最小系統(tǒng)上接個LED,看我們能否點亮它!對了,上面也有好幾次提到過單片機最小系統(tǒng)了,所謂單片機最小系統(tǒng)就是在單片機上接上最少的外圍電路元件讓單片機工作。一般只須連接晶體、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反過來接那么就是高電平有效

}

}

就那么簡單,我們就把接在單片機P1_0上的LED點亮了,當然LED是低電平,才能點亮。因為我們把LED的正通過電阻接至VCC。P1_0 = 0;類似與C語言中的賦值語句,即把0賦給單片機的P1_0引腳,讓它輸出相應(yīng)的電平。那么這樣就能達到了我們預(yù)先的要求了。while(1)語句只是讓單片機工作在死循環(huán)狀態(tài),即一直輸出低電平。如果我們要試著點亮其他的LED,也類似上述語句。這里就不再講了。

點亮了幾個LED后,是不是讓我們聯(lián)想到了繁華的街區(qū)上流動的彩燈。我們是不是也可以讓幾個LED依次按順序亮呢?答案是肯定的!其實顯示的原理很簡單,就是讓一個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é)省單片機內(nèi)部資源,其有效值為0~255。main函數(shù)調(diào)用Delay()函數(shù)。

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

(三)

上面我們講了如何使LED產(chǎn)生流動,但是你是否發(fā)現(xiàn)一個問題:寫的太冗長了!能不能再簡單點呢?可以!可以使用C51的內(nèi)部函數(shù)INTRINS.H實現(xiàn)。函數(shù)unsigned char _crol_(unsigned chara, unsigned char n)可以使變量a循環(huán)左移n位,如果我們先給P1口賦0000 0001那么當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)右移也可以實現(xiàn)同樣的效果!這里就不再累述。

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

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

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

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

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

5.右擊Target 1-->Options for 'Target1' -->Target中填寫晶體的大小,Output中,在Create HEX Files前打上鉤,點確定。

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

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

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

總結(jié)

以上是生活随笔為你收集整理的51c语言编程入门教程,51单片机C语言入门教程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。