如何設(shè)計一個單片機可控的循環(huán)流水燈?
網(wǎng)友解答: 首先在硬件方面,我們使用了最經(jīng)典的選型用AT89S51單片機作為主控芯片,LED電路選用共陽極接法:8路紅色LED燈正極接5V電源、各路串聯(lián)一個限流電阻,保護發(fā)光二極管不被燒
首先在硬件方面,我們使用了最經(jīng)典的選型用AT89S51單片機作為主控芯片,
LED電路選用共陽極接法:8路紅色LED燈正極接5V電源、各路串聯(lián)一個限流電阻,保護發(fā)光二極管不被燒壞,同時控制LED工作電流控制在10mA以內(nèi);根據(jù)I=U/R,則選用1K大小電阻。陰極分別接到P1.0~P1.7口,組成LED發(fā)光二極管驅(qū)動電路
按鍵選用獨立按鍵方式。選用10K電阻與按鍵串聯(lián),一端接5V,一端接單片機IO口P2.0,如下圖所示:
我們來看一下軟件部分:
首先包含頭文件,調(diào)用51單片機寄存器定義。第二行的sbit是用來定義一個引腳值(即P2.0用KEY來表示);
這是一個延時的調(diào)用函數(shù),我們在這個函數(shù)里,定義兩個變量 ,然后我們用兩個for循環(huán),內(nèi)部的j函數(shù)作為基礎(chǔ)延時單位,傳參tim代表具體延時時長。
這類延時函數(shù),具體的延時時間,可以通過延時函數(shù)對IO口進行翻轉(zhuǎn),使用示波器查看翻轉(zhuǎn)時間周期,就可以確定這個延時函數(shù)的真實延時時間了。
這部分是按鍵處理函數(shù),首先檢測是否有按鍵按下,采用Delayms延時消抖,再等待按鍵松開,再對狀態(tài)變量進行切換。
上圖所示,在while(1)中,每次循環(huán)1ms,則num每加1,num數(shù)目代表ms數(shù)目,
mode==1時,led全部亮
mode==2時,led全滅
mode==3或者mode==4,led數(shù)碼管間隔亮
mode==5,mode==6 led兩種led流水亮滅
按鍵按下,切換不同的led燈流水燈效果
以上是對本題目進行的回答,難免會有遺漏或者錯誤,
歡迎大家留言,轉(zhuǎn)發(fā),點贊,關(guān)注!
謝謝 大家
網(wǎng)友解答:1、發(fā)光二級管可以選擇共陰極或者共陽極連接。
2、最好用的驅(qū)動方法:查表法。(共陰到共陽轉(zhuǎn)換只需增減一個符號:~,而且很方便改變流水單的花樣。我做過51,stm32,arduino的)。
3、如果只是簡單的“流”一下,那么可以簡單粗暴地用for+delay搞定。如果要增加一些別的花樣,例如電位器控制“流速”,那就得打開定時中斷,分配任務(wù)。