?流水燈是學習51單片機的一個基本項目,是我們對單片機IO口輸出認識的基本項目。當然學會了花樣流水燈也很好玩。
下面就分享一種51單片機流水燈制作的方法。
一、流水燈原理圖
二、相關知識
1、while語句
書寫格式:while(表達式) { 語句; //循環體 。。。 }
備注:當while語句中的()里的值為非零值是,while所帶的語句就會執行,為0時程序不執行(只有為0值時不執行),括號里可以是常量,可以是變量,也可以是一個公式。
我們常用寫法:
(1)while(1){ 語句; } //這樣寫代表了這是一個死循環,{ }中的程序會一直循環執行
(2)while(a--){ 語句; } //這樣寫就是當a每執行一次循環會自減一個數,當a的值減到0了,就不執行了。
2、for循環語句
除了while語句語句之外,c語言還有一個for循環語句。
書寫格式:for(初始化表達式;條件表達式;增量表達式) { 語句; 。。。 }
常用寫法:
for(i=0;i<8;i++) ?{ ? ? 語句:。。。 ?}
//這樣寫代表了,for語句的{}中的程序循環執行,循環的次數由()的內容決定,()中的意思是i變量從0開始,到8結束(不含8),i每次自加1,加到8 了跳出循環。
3、左移右移指令
運算符 | 意義 | 示例(設j=0x10) | |
<< | 左移(各位同時左移若干位,高位舍棄,低位補零) | k=j<<1;//k=0x20 |
![]() |
>> | 右移(各位同時右移若干位,低位舍棄,高位補零) | k=j>>1;//k=0x08 |
![]() |
4、位取反指令
運算符 | 意義 | 示例(設a=0x25) | |
~ | 按位取反 | c=~a; //c=0xda |
![]() |
5、延時函數
/*--------微秒延時--------*/
void delay_us(uint z)
{
uint x;
for(x=z;x>0;x--);
}
第一個延時函數是微秒級延時,程序原理是for語句每循環一次,單片機執行一次空語句,51單片機(接12M晶振)執行每次空語句實際不止1us,一般會是幾微秒。
/*--------毫秒延時--------*/
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
第二個延時函數是毫秒級延時,其中的兩個for語句成為嵌套訓話語句,下面的for嵌套在上面的for里面執行。下面的for代表了循環執行110次空語句,得到一個1ms延時,此時上面的for循環多少次就延時多少毫秒,而延時多少毫秒由,變量z決定。
三、例程
/*--------------------------- 流水燈接口:P1 ------------------------------*/ #include #define uint unsigned int #define uchar unsigned char /*--------微妙延時--------*/ void delay_us(uint z) { uint x; for(x=z;x>0;x--); } /*--------毫秒延時--------*/ void delay_ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*----------主函數-----------*/ void main() { P0=0x00;P1=0xff;P2=0x00;P3=0x00;//端口初始化,熄滅所有LED燈 uchar i,j; while(1) { j=0x01; for(i=0;i8;i++) //for循環8次 { P1=~j; //P1等于j位取反 j=j<1; //j左移1位 delay_ms(1000); //等待1秒 } } }
審核編輯 黃宇
?
-
51單片機
+關注
關注
274文章
5705瀏覽量
124395 -
C語言
+關注
關注
180文章
7615瀏覽量
137827 -
流水燈
+關注
關注
21文章
433瀏覽量
59843
發布評論請先 登錄
相關推薦
低成本單片機方案——觸摸流水燈開關控制
![低成本<b class='flag-5'>單片機</b>方案——觸摸<b class='flag-5'>流水燈</b>開關控制](https://file.elecfans.com/web2/M00/69/1A/poYBAGMikU-AHHhnAABM2NhiFxo132.png)
51單片機中為什么很少出現printf的身影
![<b class='flag-5'>51</b><b class='flag-5'>單片機</b>中為什么很少出現printf的身影](https://file1.elecfans.com/web3/M00/00/D3/wKgZPGdOcWOAYumHAAAGbaPdCx0068.png)
基于51單片機的手動數字時鐘
![基于<b class='flag-5'>51</b><b class='flag-5'>單片機</b>的手動數字時鐘](https://file1.elecfans.com//web1/M00/F3/4F/wKgZoWcVAq2AGPEHAAVBtNVqXVM246.png)
評論