LED學習及一個花樣流水燈的實現

來源:互聯網
上載者:User

      在STC89C52RC中,負責顯示的有8個LED燈,8位元碼管,並且支援1602和12864兩種液晶顯示屏;本篇總結的是8位紅光LED燈模組。

     

     主要處理的是點亮和熄滅燈的操作。0是點亮,1是熄滅。其中點亮一位LED燈,有兩種方法:一個是定義一個可以位定址的變數;一個是利用匯流排方式直接為P0口賦值。

方法1例子:

/********************************************************<br />位定義方式點亮一個LED燈********************************************************/</p><p>#include<reg52.h><br />sbit p0_0=P0^0; //位定義P0口的第一位為p0_0</p><p>/*主函數*/<br />void main() //主函數<br />{<br />p0_0=0; //p0_0置低,點亮第一個LED燈<br />while(1);<br />}

方法2例子:

/******************************************<br />用匯流排方式點亮一個LED燈<br />******************************************/</p><p>#include<reg52.h></p><p>void main() //主函數<br />{<br />P0=0xfe; //直接給P0口的8個位賦值:0xfe=11111110B,低電平點亮末位LED<br />while(1); //死迴圈,讓程式停在此處<br />}

 

利用時延,在不同的時間段點亮不同位置的燈,可以實現花樣流水燈。

一下給出一個例子:

/*****************************************************************<br />花樣流水燈:<br />8個LED間隔300ms由右至左,再由左至右,再重複一次,然後全部熄滅再以<br />300ms間隔全部閃爍3次。之後,間隔300ms第一次一個LED亮併流動一次,<br />第二次兩個LED亮併流動一次,……依次到8個LED亮後全部熄滅。最後,間<br />隔300ms先奇數亮再偶數亮,迴圈三次;兩個LED分別從兩邊往中間流動三次;<br />再從中間往兩邊流動三次;8個LED再全部閃爍3次;關閉發光管,程式停止。<br />*****************************************************************/<br />#include<reg52.h><br />#include<intrins.h></p><p>void delay(int z);//聲明延時函數<br />void flow1();<br />void flow2();<br />void flow3();<br />/*主函數*/<br />void main()<br />{<br />flow1();//調用flow1,完成第一部分的任務<br />delay(300);//延時300ms<br />flow2();<br />delay(300);<br />flow3();<br />P0=0xff;<br />while(1);<br />}</p><p>/*定義延時函數*/<br />void delay(int z)<br />{<br />int x,y;<br />for(x=z;x>0;x--)<br />for(y=110;y>0;y--);<br />}</p><p>/*定義實現第一部分功能的函數:<br />8個LED間隔300ms由右至左,再由左至右,再重複一次,然後全部熄滅再以<br />300ms間隔全部閃爍3次。*/<br />void flow1()<br />{<br />int x,y,z;<br />int a;<br />P0=0x7f;//點亮l8<br />delay(300);//延時300ms<br />for(a=0;a<2;a++)<br />{<br />for(x=0;x<7;x++)//左移<br />{<br />P0=_cror_(P0,1);//調用迴圈左移函數,並賦值給P0<br />delay(300);<br />}<br />P0=0xfe;//點亮l1<br />delay(300);<br />for(y=0;y<7;y++) //右移<br />{<br />P0=_crol_(P0,1);<br />delay(300);<br />}<br />}<br />for(z=0;z<3;z++) //全部亮和全部暗閃爍三次<br />{<br />P0=0xff;<br />delay(300);<br />P0=0x00;<br />delay(300);<br />}<br />}</p><p>/*定義完成第二部分功能的函數flow2:第一次一個LED亮併流動一次,<br />第二次兩個LED亮併流動一次,……依次到8個LED亮後全部熄滅*/<br />void flow2()<br />{<br />int x;<br />P0=0xfe;//點亮一個燈,左移<br />delay(300);<br />for(x=0;x<7;x++)<br />{<br />P0=_crol_(P0,1);<br />delay(300);<br />}<br />P0=0xfc;//點亮兩個燈,左移<br />delay(300);<br />for(x=0;x<6;x++)<br />{<br />P0=_crol_(P0,1);<br />delay(300);<br />}<br />P0=0xf8;//點亮三個燈,左移<br />delay(300);<br />for(x=0;x<5;x++)<br />{<br />P0=_crol_(P0,1);<br />delay(300);<br />}<br />P0=0xf0;//點亮四個燈,左移<br />delay(300);<br />for(x=0;x<4;x++)<br />{<br />P0=_crol_(P0,1);<br />delay(300);<br />}<br />P0=0xe0; //點亮五個燈,左移<br />delay(300);<br />for(x=0;x<3;x++)<br />{<br />P0=_crol_(P0,1);<br />delay(300);<br />}<br />P0=0xc0;//點亮六個燈,左移<br />delay(300);<br />for(x=0;x<2;x++)<br />{<br />P0=_crol_(P0,1);<br />delay(300);<br />}<br />P0=0x80;//點亮七個燈,左移一次<br />delay(300);<br />for(x=0;x<1;x++)<br />{<br /> P0=_crol_(P0,1);<br />delay(300);<br />}<br />P0=0x00;//點亮八個燈<br />delay(300);<br />P0=0xff;//全部熄滅<br />}</p><p>/*定義完成第三部分功能的函數:間隔300ms先奇數亮再偶數亮,迴圈三次;兩個LED分<br />別從兩邊往中間流動三次;再從中間往兩邊流動三次;8個LED再全部閃爍3次;*/<br />void flow3()<br />{<br />int x;<br />for(x=0;x<3;x++) //先奇數亮,再偶數亮,迴圈三次<br />{<br />P0=0x55;<br />delay(300);<br />P0=0xAA;<br />delay(300);<br />}<br />for(x=0;x<3;x++) //從兩邊往中間流動三次<br />{<br />P0=0x7e;<br />delay(300);<br />P0=0xbd;<br />delay(300);<br />P0=0xdb;<br />delay(300);<br />P0=0xe7;<br />delay(300);<br />}<br />for(x=0;x<3;x++) //從中間往兩邊流動三次<br />{<br />P0=0xe7;<br />delay(300);<br />P0=0xdb;<br />delay(300);<br />P0=0xbd;<br />delay(300);<br />P0=0x7e;<br />delay(300);<br />}<br />for(x=0;x<3;x++) //全暗全亮閃爍三下<br />{<br />P0=0xff;<br />delay(300);<br />P0=0x00;<br />delay(300);<br />}<br />}<br />

個人認為,LED燈的學習還是比較簡單的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.