51單片機(jī)-流水燈
這個(gè)是原理圖,從圖中最右邊有一個(gè)排阻,也就是這里八個(gè)電阻封裝在一起,這里排阻的特點(diǎn)是八個(gè)
電阻有一個(gè)公共端,然后一個(gè)電源VCC通過跳線與排阻相連。到達(dá)二極管的電流從正極流向負(fù)極,如
果二極管負(fù)極是低電平,則電流流過二極管,發(fā)光二極管亮起來。負(fù)極接在單片機(jī)的P2端口上。也就
是說P2的引腳位低電平時(shí)可驅(qū)動(dòng)發(fā)光二極管發(fā)光。驅(qū)動(dòng)各個(gè)燈閃爍的方法是把各位循環(huán)左移,使用函數(shù)
_crol_。
#include
#include
unsigned int a;
void delay(){
int i,j;
for(i = 0; i < 0xff; i++)
for(j = 0; j < 0xff; j++)
;
}
void liushui(){
int i,dd;
dd = 0xfe; //dd = 1111 1110 此時(shí)L9亮
for(i = 0; i < 8; i++){
P2 = dd;
delay();
dd = _crol_(dd,1); //循環(huán)左移一位 dd = 1111 1101
}
}
void main(){
while(1){
liushui();
}
}
流水燈向左流動(dòng),當(dāng)按住獨(dú)立按鍵時(shí),流水燈向右移動(dòng):
#include
#include
unsigned int dd;
sbit key = P1^0;
void delay(){
int i,j;
for(i = 0; i < 0x2a; i++)
for(j = 0; j < 0xff; j++)
;
}
void right(){
P2 = dd;
delay();
dd = _crol_(dd,1);
}
void left(){
P2 = dd;
delay();
dd = _cror_(dd,1);
}
void main(){
dd = 0xfe;
while(1){
if(key == 1)
right();
else {
delay();
if(key == 0)
left();
}
}
}
PWM調(diào)制使流水燈漸滅,改變占空比。
1. #include
2. #include
3. #define uint unsigned int
4. uint a;
5.
6. void delay(uint t){
7. int i,j;
8. for(i = 0; i < t; i++)
9. for(j = 0; j < 0xff; j++)
10. ;
11. }
12.
13. void liushui(){
14. int i,dd;
15. dd = 0xfe; //dd = 1111 1110 此時(shí)L9亮
16. for(i = 0; i < 8; i++){
17. P2 = dd;
18. delay(1000);
19. dd = _crol_(dd,1); //循環(huán)左移一位 dd = 1111 1101
20. P2 = 0xff;
21. delay(300);
22. }
23. }
24. void main(){
25. while(1){
26. liushui();
27. }
28. }
評(píng)論