51 单片机学习_1.3 LED流水灯

文章目录

解释

Delay100ms(unsigned char turn)为延时函数,延时时长: turn * 0.1s
mypow(unsigned int a,unsigned int b):计算a的b次方

控制LED挨个亮起来,就需要不断地循环执行下面的代码
T = 1111 1111

P2 = 1111 1110 //T - 1
P2 =1111 1101 //T - 2
P2 = 1111 1011 //T - 4
P2 = 1111 0111 //T - 8
P2 = 1110 1111 //T - 16
P2 = 1101 1111 //T - 32
P2 = 1011 1111 //T - 64
P2 = 0111 1111 //T - 128

实际上就是T减去 2 ^ i

代码

#include <REGX52.H>
#include <INTRINS.H>

void Delay100ms(unsigned char turn)		//@11.0592MHz
{
	while(turn--){
		unsigned char i, j, k;

		_nop_();
		_nop_();
		i = 5;
		j = 52;
		k = 195;
		do
		{
			do
			{
				while (--k);
			} while (--j);
		} while (--i);
	}
}

int mypow(unsigned int a,unsigned int b){
	unsigned  int i=0;
	for(i;i<b;i++){
		a=a*a;
	}
	return a;
}

void main(){
	unsigned int T=0xff;
	unsigned int i=0;
	
	while(1){
		for(i;i<8;i++){
			P2=T-mypow(i,2);
			Delay100ms(2);					//500ms
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值