`
tomhibolu
  • 浏览: 1383395 次
文章分类
社区版块
存档分类
最新评论

51单片机-流水灯

 
阅读更多
哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处
http://blog.csdn.net/woshixingaaa/archive/2010/09/17/5891763.aspx
QQ截图未命名 
这个是原理图,从图中最右边有一个排阻,也就是这里八个电阻封装在一起,这里排阻的特点是八个
电阻有一个公共端,然后一个电源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调制使流水灯渐灭,改变占空比。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics