哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处
http://blog.csdn.net/woshixingaaa/archive/2010/09/17/5891763.aspx
这个是原理图,从图中最右边有一个排阻,也就是这里八个电阻封装在一起,这里排阻的特点是八个
电阻有一个公共端,然后一个电源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调制使流水灯渐灭,改变占空比。
#include <reg52.h> #include <intrins.h> #define uint unsigned int uint a; void delay(uint t){ int i,j; for(i = 0; i < t; 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(1000); dd = _crol_(dd,1); //循环左移一位 dd = 1111 1101 P2 = 0xff; delay(300); } } void main(){ while(1){ liushui(); } }