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

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

至此,閃爍燈就完成了。 流水燈的道理也是一樣的,依次讓led亮過去,記得每一個動作后加入延時。 有興趣的可以多寫寫其他變換方式。
到這里,這個教程就差不多結束了,希望能對初學者和愛好者有幫助.
若本文有任何問題和錯誤請大家批評指正,信工科技部將每期給您帶來更多精彩內容,敬請關注!
|