这个是原理图,从图中最右边有一个排阻,也就是这里八个电阻封装在一起,这里排阻的特点是八个 电阻有一个公共端,然后一个电源VCC通过跳线与排阻相连。到达二极管的电流从正极流向负极,如 果二极管负极是低电平,则电流流过二极管,发光二极管亮起来。负极接在单片机的P2端口上。也就 是说P2的引脚位低电平时可驱动发光二极管发光。驱动各个灯闪烁的方法是把各位循环左移,使用函数 _crol_。 #include <reg52.h> #include <intrins.h> 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 此时L9亮 for(i = 0; i < 8; i++){ P2 = dd; delay(); dd = _crol_(dd,1); //循环左移一位 dd = 1111 1101 } } void main(){ while(1){ liushui(); } } 流水灯向左流动,当按住独立按键时,流水灯向右移动: #include <reg52.h> #include <intrins.h> 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调制使流水灯渐灭,改变占空比。 1. #include <reg52.h> 2. #include <intrins.h> 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 此时L9亮 16. for(i = 0; i < 8; i++){ 17. P2 = dd; 18. delay(1000); 19. dd = _crol_(dd,1); //循环左移一位 dd = 1111 1101 20. P2 = 0xff; 21. delay(300); 22. } 23. } 24. void main(){ 25. while(1){ 26. liushui(); 27. } 28. } |
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |