- UID
- 1023166
- 性别
- 男
- 来自
- 燕山大学
|
关键词: 51单片机 , 流水灯
这个是原理图,从图中最右边有一个排阻,也就是这里八个电阻封装在一起,这里排阻的特点是八个
电阻有一个公共端,然后一个电源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. } |
|
|