還記得我們?cè)?jīng)焊過(guò)的那塊51學(xué)習(xí)板嗎?還記得我們當(dāng)時(shí)試驗(yàn)成功后的興奮與歡喜嗎?沒(méi)錯(cuò),這塊這塊板子的硬件連接部分已經(jīng)完成了,但是要想實(shí)現(xiàn)我們想要的功能,還要我們自己編程以實(shí)現(xiàn)目的!
今天,小編給大家?guī)?lái)的是一個(gè)最基礎(chǔ)的教程—— 任意點(diǎn)亮實(shí)驗(yàn)板上的led。這個(gè)東西雖然看似簡(jiǎn)單,但只要你足夠有創(chuàng)意,比如你把他們當(dāng)作成許多演員,而你就是導(dǎo)演,通過(guò)不同時(shí)間控制不同的led亮滅,還是可以實(shí)現(xiàn)比較炫的效果。比如基礎(chǔ)一點(diǎn)的有流水燈,閃爍燈等,如果你有興趣還可以自己焊一塊板子,設(shè)計(jì)更多的led并擺個(gè)造型,比如像這種
進(jìn)入正題,首先來(lái)簡(jiǎn)單的介紹下什么是單片機(jī)以及我們所焊接的板子上單片機(jī)的型號(hào)。 單片機(jī)是一種可通過(guò)編程來(lái)控制的微處理器,它需要靠外圍的器件的協(xié)調(diào)來(lái)發(fā)揮其自身的強(qiáng)大功能,所以說(shuō)我們要想駕馭好它,還要懂得一些外圍器件的使用方法及電路的設(shè)計(jì)。本次教程所用到的外圍器比較簡(jiǎn)單,就是一排燈泡,相信大家應(yīng)該都玩過(guò),只要正負(fù)級(jí)接對(duì),加上合適的電壓就可以發(fā)光了。我們手上的板子所采用的是單片機(jī)型號(hào)是89C52,屬于51系列,可通過(guò)我們熟悉的c語(yǔ)言來(lái)編程。下面附上它的引腳電路圖
可以看到它一共有40個(gè)引腳,其中有P0口,P1口,P2口,P3口,每個(gè)P口對(duì)應(yīng)有8個(gè)I/O口,列如P1.0~P1.7。還有第40腳和20腳分別為正負(fù)極,他引腳暫不做介紹。下面附此實(shí)驗(yàn)板和led的連接圖。 不難看出8顆led所連接的是單片機(jī)的P1口的8個(gè)I/O口,由于是led的正極始終連接著正極,而負(fù)極接的是單片機(jī)的I/O 口,因此我們只需要讓I/O輸出低電平即可點(diǎn)亮對(duì)應(yīng)的led(ps:由于單片機(jī)上電后默認(rèn)輸出高電平,所以led在單片機(jī)未配置輸出低電平時(shí)是滅的),其實(shí)單片機(jī)說(shuō)白了就是控制哪些引腳的電平什么時(shí)候輸出高,什么時(shí)候輸出低,由這些高低電平的變化來(lái)控制外圍電路。 明白了這些以后,我想大家對(duì)于控制led的原理來(lái)說(shuō)應(yīng)該不是什么難事,剩下的就是學(xué)會(huì)一些’’語(yǔ)法’’,比如 sbit led1=P1^0;(寫(xiě)的時(shí)候注意大小寫(xiě)及相關(guān)表示符號(hào))意思是將單片機(jī)P1口的最低位定義為led1。若要控制P1口的某一位,必定要聲明這一位,否則單片機(jī)不知道我們要操作的對(duì)象是什么。聲明了以后,就直接可以通過(guò)控制led1來(lái)對(duì)P1^0操作,比如led1=0;就是讓P1^0輸出低電平(ps:等于0就是低電平,等于1就是高電平)。當(dāng)然你還可以直接對(duì)P1口的8個(gè)I/O口同時(shí)操作,此時(shí)就不用位聲明了,比如P1=0xfe;其中0x 表示后面的數(shù)據(jù)是以16進(jìn)制形式表示的,fe轉(zhuǎn)換為2進(jìn)制就是1111 1110,即也是相當(dāng)于給P1^0口配置低電平。 下面我們來(lái)嘗試點(diǎn)亮右邊第一顆led,這也可以說(shuō)是實(shí)驗(yàn)當(dāng)中最簡(jiǎn)單的程序了。直接上圖

或者這么寫(xiě)
效果都是一樣的。 燒入程序后效果圖(keil具體使用方法和燒入過(guò)程請(qǐng)自行百度或參考上一次的教程) 下面我們利用延時(shí)來(lái)實(shí)現(xiàn)一個(gè)閃爍燈的效果。首先來(lái)簡(jiǎn)單介紹一下延時(shí)函數(shù),謂延時(shí)函數(shù),就是利用單片機(jī)執(zhí)行語(yǔ)句所需要耗費(fèi)時(shí)一現(xiàn)象來(lái)實(shí)現(xiàn)的。 例如
void delay(int x) { inti,j; for(i=x;i>0;i--) for(j=110;j>0;j--); } 根據(jù)實(shí)驗(yàn),當(dāng)x=1000時(shí),大概會(huì)延時(shí)1s。 我這次寫(xiě)的是單數(shù)燈與奇數(shù)燈以大約一秒為間隔交替閃爍。 (把程序放在while死循環(huán)中是為了讓它一直閃下去,否則只會(huì)執(zhí)行一次,也就是閃一次)
效果圖

至此,閃爍燈就完成了。 流水燈的道理也是一樣的,依次讓led亮過(guò)去,記得每一個(gè)動(dòng)作后加入延時(shí)。 有興趣的可以多寫(xiě)寫(xiě)其他變換方式。
到這里,這個(gè)教程就差不多結(jié)束了,希望能對(duì)初學(xué)者和愛(ài)好者有幫助.
若本文有任何問(wèn)題和錯(cuò)誤請(qǐng)大家批評(píng)指正,信工科技部將每期給您帶來(lái)更多精彩內(nèi)容,敬請(qǐng)關(guān)注!
|