天天看點

單片機51的流水燈

實驗一 單片機流水燈

【實驗目的】

1、熟練掌握AT89C51開發闆的使用方法和注意事項。

2、了解簡單單片機應用系統的設計方法。

3、掌握應用KEIL軟體編輯、編譯源程式的操作方法。

4、掌握應用PROTEUS軟體的繪圖,仿真,燒錄操作方法。

【實驗器材】

電腦,keil軟體,proteus軟體,51單片機書籍

【預習要求】

帶好實驗器材,知曉流水燈實驗實驗原理,安裝好keil,proteus軟體,并學會簡單使用這兩個軟體功能。

【實驗原理】

單片機流水的實質是單片機各引腳在規定的時間逐個上電,使LED燈能逐個亮起來但過了該引腳通電的時間後便滅燈的過程,實驗中使用了單片機的P2端口,對8個LED燈進行控制,要實作逐個亮燈即将P2的各端口逐一置零,中間使用時間間隔隔開各燈的亮滅。

【實驗注意事項】

當P2口有低電平輸出時,相應的發光二極管就會點亮。應用這一原理我們可以容易的點亮一個數位管,例如令P2口輸出O11l1111時LDI就會點亮。若再把O1111111向右循環一位,利用P2口輸出,就會點亮LD2。在發光二極管兩次點亮的間隔中加延時程式,讓每次點亮停留一段時間,像這樣人眼就可以看到“流水”的現象。

【實驗内容和步驟】

一.打開keil編寫流水燈程式

二.打開proteus繪制流水燈原理圖

三.将代碼拷入單片機,運作看流水燈效果

1.流水燈代碼

#include<reg52.h>

void main()

{

unsigned int i=0;

unsigned char dir =0;

unsigned char shift = 0x01;

while (1)

{

P2 = ~shift;

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

if (dir == 0)

{

shift = shift << 1;

if (shift == 0x80)

{

dir = 1;

}

}

else

{

shift = shift >> 1;

if (shift == 0x01)

{

dir = 0;

}

}

}

}

【實驗心得體會】

由于沒有課前預習,是以當時做起來還是花了一點時間去問同學問題。當然上課時流水燈的程式還是挺明白的,是以一開始寫代碼也很快,畫圖的時候,一點沒打開過proteus這個軟體,是以屢次問同學怎麼用。

當然還有,由于電腦本身有問題,一打開proteus根本打不開,隻得重裝,這個問題嘗試了無數個解決方法,都沒能有好的結果,也隻得在出問題時一次次重裝。在重裝好proteus之後,開始建立工程,在裡面添加元器件後,再在圖裡繪制原理圖。剛開始不知道怎麼移動元器件,試了幾次之後,才熟練掌握,知道了在器件變成紫色時是可以移動的。也學會了怎麼改器件阻值。學會了在哪裡找GND和power,當然也學會了怎麼旋轉器件方向。并且在畫布上一點就可以複制器件了,筆點的位置一路按下來就可以給兩個器件連線,并且三個器件的交叉處會出現一個大圓點告訴自己,那裡是連上了的。

繪制好了原理圖,儲存好就可以給單片機燒錄程式了,輕按兩下單片機就可以進行燒錄程式的操作,燒錄之後發現自己的燈不亮,再三檢查原理圖,二極管正極與電阻相連并接上電源,其他各處也沒有錯誤。

再看自己的程式編譯也沒有錯誤,在逐句逐詞的檢視之後發現自己在某處的for循環漏了分号,修改錯誤之後就可以正常運作了。在成功運作了流水燈向右移之後,再進行運作向左運作的流水燈,之後再組合一下兩個方向的程式寫完了左右移動的流水燈。很快就完成了流水燈實驗。

上課時,老師再三強調不要漏了for循環的分号,可我依然是粗心忘記了,雖然上課老師也略說過怎麼使用proteus,但是實操的時候都還是有些茫然。不過自己實際動手了一遍比老師空講記憶會深一些。自己也在實際操作中搞懂了自己一些自以為會了其實沒有會的東西。

繼續閱讀