建設(shè)網(wǎng)站模板免費(fèi)百度掃一掃識別圖片在線
流水燈是一種簡單的單片機(jī)控制電路,由許多LED組成,電路工作時LED會按順序點亮,類似于流水的效果。
下面是運(yùn)行在keil上的代碼,分別使用了數(shù)組,移位符和庫函數(shù)來表示。
//數(shù)組法
#include <reg52.h> //頭文件
#define uchar unsigned char
uchar tab[16]={ 0xfe , 0xfd , 0xfb , 0xf7 , 0xef , 0xdf , 0xbf , 0x7f , 0x7f , 0xbf , 0xdf , 0xef , 0xf7 , 0xfb , 0xfd , 0xfe };
//因為采用了共陽極接法,所以要點亮哪個燈就給哪一位賦0
//8個燈,對應(yīng)兩個十六進(jìn)制數(shù)的八個數(shù)位
//從右到左,再從左到右,奇偶位,內(nèi)外位修改數(shù)字順序即可
void delay( )
{ uchar i,j;for(i=0; i<255; i++)//為了讓人眼看清燈的閃爍而延時for(j=0; j<255; j++);
}void main( ) //主函數(shù)
{ uchar i;P1 = 0xff; //熄滅所有LED,避免上電亮燈while (1) //永真{ for(i=0;i<16; i++){ P1=tab[i]; //改變P1口的電位delay( ); //延時函數(shù)}}
}//移位符
#include <reg52.h> //包含reg52.h頭文件
#define uchar unsigned char
void Delay()
{uchar i, j;for (i=0;i<255;i++)for (j=0;j<255;j++);
}
void main()
{ uchar i, temp;P1 = 0xff; //在移位符中會舍棄數(shù)位,所以必須賦初值while(1){temp = 0x01; //為了賦值方便,取反碼給要點亮的燈賦1for (i=0;i<8;i++) //奇偶位,i改4,<<2{P1 = ~ temp; //temp值取反送P1口temp = temp << 1 ; //左移一位Delay()}temp = 0x80; for (i=0;i<8;i++) //奇偶位,i改4,>>2{P1 = ~ temp; //temp值取反送P1口temp = temp >> 1 ; //右移一位Delay();}}}//庫函數(shù)
#include <reg52.h>
#include <intrins.h> //調(diào)用函數(shù)庫
#define uchar unsigned charvoid delay()
{uchar i,j;for (i=0;i<255;i++)for (j=0;j<255;j++);
}
void main()
{ uchar i,temp;P1 = 0xff; while (1){ temp=0x7f; for(i=0; i<8; i++) //奇偶項i改成4,temp后改成2{ P1=temp; delay( ); temp=_cror_( temp,1) ;//r代表right,右移 }temp=0xfe;for(i=0; i<8; i++) //奇偶項i改成4,temp后改成2{ P1=temp; delay( ); temp=_crol_( temp,1) ; //l代表left,左移 }}
}
編譯時要注意修改晶振頻率并創(chuàng)建hex文件。
?
點亮效果呈現(xiàn)在proteus上,大家也可以根據(jù)仿真電路圖去挑選自己需要的元器件組建不同功能的電路。
流水燈演示
謝謝大家。