51单片机-流水灯
时间:03-21
来源:互联网
点击:
![](../img/eec-mcu/mcu-1667954wddt0ob5fo.gif)
这个是原理图,从图中最右边有一个排阻,也就是这里八个电阻封装在一起,这里排阻的特点是八个
电阻有一个公共端,然后一个电源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://blog.csdn.net/woshixingaaa/archive/2010/09/17/5891763.aspx
- 嵌入式系统高效电源设计(07-25)
- 基于ADS7846的电阻式触摸屏接口设计(10-12)
- 精密电阻分类及特性(01-18)
- 基于ARM的太阳能发电控制系统的设计与实现(04-24)
- 基于MSP430的无极性恒流电刺激器的设计(02-12)
- 基于C8051F系列单片机的血糖仪解决方案(04-25)