?流水燈是學(xué)習(xí)51單片機(jī)的一個(gè)基本項(xiàng)目,是我們對(duì)單片機(jī)IO口輸出認(rèn)識(shí)的基本項(xiàng)目。當(dāng)然學(xué)會(huì)了花樣流水燈也很好玩。
下面就分享一種51單片機(jī)流水燈制作的方法。
一、流水燈原理圖
二、相關(guān)知識(shí)
1、while語(yǔ)句
書(shū)寫(xiě)格式:while(表達(dá)式) { 語(yǔ)句; //循環(huán)體 。。。 }
備注:當(dāng)while語(yǔ)句中的()里的值為非零值是,while所帶的語(yǔ)句就會(huì)執(zhí)行,為0時(shí)程序不執(zhí)行(只有為0值時(shí)不執(zhí)行),括號(hào)里可以是常量,可以是變量,也可以是一個(gè)公式。
我們常用寫(xiě)法:
(1)while(1){ 語(yǔ)句; } //這樣寫(xiě)代表了這是一個(gè)死循環(huán),{ }中的程序會(huì)一直循環(huán)執(zhí)行
(2)while(a--){ 語(yǔ)句; } //這樣寫(xiě)就是當(dāng)a每執(zhí)行一次循環(huán)會(huì)自減一個(gè)數(shù),當(dāng)a的值減到0了,就不執(zhí)行了。
2、for循環(huán)語(yǔ)句
除了while語(yǔ)句語(yǔ)句之外,c語(yǔ)言還有一個(gè)for循環(huán)語(yǔ)句。
書(shū)寫(xiě)格式:for(初始化表達(dá)式;條件表達(dá)式;增量表達(dá)式) { 語(yǔ)句; 。。。 }
常用寫(xiě)法:
for(i=0;i<8;i++) ?{ ? ? 語(yǔ)句:。。。 ?}
//這樣寫(xiě)代表了,for語(yǔ)句的{}中的程序循環(huán)執(zhí)行,循環(huán)的次數(shù)由()的內(nèi)容決定,()中的意思是i變量從0開(kāi)始,到8結(jié)束(不含8),i每次自加1,加到8 了跳出循環(huán)。
3、左移右移指令
運(yùn)算符 | 意義 | 示例(設(shè)j=0x10) | |
<< | 左移(各位同時(shí)左移若干位,高位舍棄,低位補(bǔ)零) | k=j<<1;//k=0x20 |
![]() |
>> | 右移(各位同時(shí)右移若干位,低位舍棄,高位補(bǔ)零) | k=j>>1;//k=0x08 |
![]() |
4、位取反指令
運(yùn)算符 | 意義 | 示例(設(shè)a=0x25) | |
~ | 按位取反 | c=~a; //c=0xda |
![]() |
5、延時(shí)函數(shù)
/*--------微秒延時(shí)--------*/
void delay_us(uint z)
{
uint x;
for(x=z;x>0;x--);
}
第一個(gè)延時(shí)函數(shù)是微秒級(jí)延時(shí),程序原理是for語(yǔ)句每循環(huán)一次,單片機(jī)執(zhí)行一次空語(yǔ)句,51單片機(jī)(接12M晶振)執(zhí)行每次空語(yǔ)句實(shí)際不止1us,一般會(huì)是幾微秒。
/*--------毫秒延時(shí)--------*/
void delay_ms(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
第二個(gè)延時(shí)函數(shù)是毫秒級(jí)延時(shí),其中的兩個(gè)for語(yǔ)句成為嵌套訓(xùn)話語(yǔ)句,下面的for嵌套在上面的for里面執(zhí)行。下面的for代表了循環(huán)執(zhí)行110次空語(yǔ)句,得到一個(gè)1ms延時(shí),此時(shí)上面的for循環(huán)多少次就延時(shí)多少毫秒,而延時(shí)多少毫秒由,變量z決定。
三、例程
/*--------------------------- 流水燈接口:P1 ------------------------------*/ #include #define uint unsigned int #define uchar unsigned char /*--------微妙延時(shí)--------*/ void delay_us(uint z) { uint x; for(x=z;x>0;x--); } /*--------毫秒延時(shí)--------*/ void delay_ms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*----------主函數(shù)-----------*/ void main() { P0=0x00;P1=0xff;P2=0x00;P3=0x00;//端口初始化,熄滅所有LED燈 uchar i,j; while(1) { j=0x01; for(i=0;i8;i++) //for循環(huán)8次 { P1=~j; //P1等于j位取反 j=j<1; //j左移1位 delay_ms(1000); //等待1秒 } } }
審核編輯 黃宇
?
-
51單片機(jī)
+關(guān)注
關(guān)注
277文章
5711瀏覽量
127389 -
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7632瀏覽量
141759 -
流水燈
+關(guān)注
關(guān)注
21文章
433瀏覽量
60517
發(fā)布評(píng)論請(qǐng)先 登錄
AT89C51 單片機(jī)中文資料
新概念51單片機(jī)C語(yǔ)言教程入門(mén)、提高、開(kāi)發(fā)、拓展全攻略
51單片機(jī)溫度報(bào)警器
低成本單片機(jī)方案——觸摸流水燈開(kāi)關(guān)控制

51單片機(jī)中為什么很少出現(xiàn)printf的身影

基于51單片機(jī)的手動(dòng)數(shù)字時(shí)鐘

基于51單片機(jī)的遙控開(kāi)關(guān)仿真(雙機(jī)通信)

基于51單片機(jī)的跑馬燈/流水燈系統(tǒng)

評(píng)論