這個(gè)是原理圖,從圖中最右邊有一個(gè)排阻,也就是這里八個(gè)電阻封裝在一起,這里排阻的特點(diǎn)是八個(gè) 電阻有一個(gè)公共端,然后一個(gè)電源VCC通過跳線與排阻相連。到達(dá)二極管的電流從正極流向負(fù)極,如 果二極管負(fù)極是低電平,則電流流過二極管,發(fā)光二極管亮起來。負(fù)極接在單片機(jī)的P2端口上。也就 是說P2的引腳位低電平時(shí)可驅(qū)動發(fā)光二極管發(fā)光。驅(qū)動各個(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ú)立按鍵時(shí),流水燈向右移動: #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. } 李萬鵬 原文地址:http://blog.csdn.net/woshixingaaa/archive/2010/09/17/5891763.aspx |