用微控制器實現流水燈(高階版)

2021-10-01 07:35:00 字數 3098 閱讀 2634

看到這個標題,很多人會想:「流水燈?誰不會流水燈啊。微控制器入門的第一節課不就是實現跑馬燈嘛?」 別急,慢慢看嘛,就算是簡單的跑馬燈,也可以玩出花樣的喲。

好吧,不賣關子了,先說說我今天講的內容吧,首先:如何用p1口(只有八個引腳喲)實現八個流水燈,然後:如何用p1口實現十六個流水燈。怎麼樣,有沒有一點小刺激。再然後,用32個引腳,p1,p2,p3,p4實現1024個流水燈呢?可能有人會說了,「不可能!!!」別急,再到最後,就是控制很多很多個!那我們就開始吧。

1、熟悉p1口作輸出口的原理與方法

2、掌握迴圈延時,並能計算延時時間

3、能熟練的使用keil程式設計和proteus**

4、實現多個流水燈的控制

1、用keil編寫程式,編譯執行

2、用proteus進行**檢驗

3、用麵包板進行搭線展示,用2個流水燈實現流水效果

將微控制器的p1口的0和1接上led燈,採用共陰極的接法,當微控制器的p1^0和p1^1引腳為低電平時,由於二極體的單項導通性,led被點亮,即可實現迴圈流水效果。必要的知識還是需要滴,上圖!

實物圖:

proteus**結果:

//httm觸控開關

void

delay()

void

main()

else

//沒有按鍵被按下

}}看到這裡,有人就要說了,我都看麼那麼久了,你這不就是乙個流水燈嗎?還故弄玄虛搞那麼久,我手中的西瓜刀已經準備好了,你繼續表演吧。

哈哈哈,行,馬上就開始表演。

既然我們都寫過流水燈,那我們一定對延時函式一定都不陌生,就隨便給個延時等待嘛,但是有沒有人想過,這個延時函式到底延時了多久!!!!!!「三分鐘,我要這個延時函式的全部資訊!!」我:可以用定時器測試的喲。「不,我沒學過定時器,但是我現在就要!!!快給我乙個簡單的方法!」我:呃。。。行,辦法就在下面。

用c語言設計,如何計算延時時間

對於延時時間可以通過示波器進行準確的檢視。在這裡我準備了兩段延時函式,分別是1ms,test(自定義)來進行測試,前面的1ms是經過精確計算無誤的時間,後面的test則是自己需要計算的延時函式。

1ms測試結果(準確時間)

測試結果:1ms時間準確。

test延時函式測試

test延時函式測試結:delay = (909-605)ms = 304ms。

源**如下:

#include

sbit out = p1^0;

void

delay1ms

(void

)//測試1ms 誤差 0us

void

delay10ms

(void

)//測試10ms 誤差 0us

void

delay_test

(void

)//測試結果304ms

void

main()

}

當led的數量遠多於介面數量時(如50,100,1000個),該怎麼實現流水燈?

解答如下:實現方法較多,這裡我採用的是3-8解碼器,通過3-8解碼器的級聯可以實現led數目的增加,實現50,100個沒有問題,如果要實現1000個則需要4-16解碼器,並通過級聯的方式實現。

實現結果如下:

源**如下:

#include

//用6個io口點亮16個流水燈

//實現效果:可以用8個io口點亮16個流水燈,

//分別為3 3顯示 2片選,最多可控制16*4=64個

/* 如果採用4-16解碼器,包括片選端,那麼乙個佔8個位置,可以亮16*16=256

一共有32/8=4那麼4*256=1024個燈,滿足一千個燈

*/sbit crol_1 = p1^0;

sbit crol_2 = p1^1;

sbit crol_3 = p1^2;

//設定控制**

sbit crol_4 = p1^3;

sbit crol_5 = p1^4;

sbit crol_6 = p1^5;

//第二個解碼器

sbit select_1 = p1^6;

sbit select_2 = p1^7;

//片選

static

int count =0;

void

delay_ms()

//設定延時函式

void

crol_flow_1()

//前八個

}void

crol_flow_2()

//後八個

}void

main()

else

if(count <16)

}}

會水的芝麻

2019.12.6

湖北師範大學

微控制器 流水燈

基礎知識 1.c語言預處理命令 define a p0 注意後邊不用加分號 在 中使用p0口時,可以直接用a代替,防止修改埠時大面積修改 2.迴圈左移和右移函式 crol a,b 迴圈左移函式,a是左移的值,b是左移的位數。包含在intrins.h庫函式裡面。cror a,b 迴圈右移函式,原理同上...

微控制器流水燈

上篇給大家分享了單個led的點亮與閃爍,這次給大家分享一下怎樣用微控制器控制led實現流水燈效果。所需元器件如下 stc89c52rc晶元 1 10k電阻 1 330 電阻 8 10uf 電解電容 1 22pf 瓷片電容 2 12mhz晶振 1 按鍵 1 led燈 8 電路圖如下 如下 led流水燈...

微控制器流水燈

微控制器c51流水燈實驗 1 基本的流水燈 設定延時函式使led燈依次有間隔的亮起 軟體延時採用程式delay j 可調整延時時間。2 簡單鍵控的流水燈。實現思路 由於是按下鍵不鬆手,鍵值一直保留,所以判斷if k10 即是按下k1,採用if k10 或if k1 1 後接while 1 迴圈的模式...