51单片机-流水灯

哈尔滨理工大学软件工程专业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(); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值