51单片机心形灯实现旋转呼吸灯流水编程

51单片机心形灯——实现旋转呼吸灯流水编程

其他心形灯类型编码请看我的其他博文~
心形灯效果图 如果是静态效果请刷新页面哦
在这里插入图片描述
心形灯原理图
在这里插入图片描述

#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit led0 =P3^6;
sbit led1 = P2^2;
uint num, timenum=100, leddirction=0, ledpwm=0, ledpwm_temp, pwm_max=100, pwm_min=0;
unsigned char code table[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
unsigned char code table1[]={0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};
uint flag0=0;

void init(){
	TMOD=0x01;	//定时器1模式
	TH0 = (65536-10)/256;
	TL0 = (65536-10)%256; 
	ET0=1;	//开定时器0中断
	EA=1;		//开总中断
	TR0=1;	//启动定时器0
}

void Delay(unsigned int i){
	unsigned char j;
	for(;i>0;i--){
		for(j=110;j>0;j--);
	}
}

void main(){
	//init();
	uint i=0;
	while(1){
		while(flag0==0){	//先让心形灯做底部D17号灯呼吸闪烁,在这里利用flag来控制当前接口内灯的循环闪烁
			if((timenum++)>=100){
				timenum=0;
				if(leddirction==0){
					ledpwm++;
					if(ledpwm>=pwm_max){
						ledpwm=pwm_max;
						leddirction=1;
					}
				}
				if(leddirction==1){
					ledpwm--;
					if(ledpwm<=pwm_min){
						ledpwm=pwm_min;
						flag0=1;
						leddirction=0;
					}
				}
				ledpwm_temp=ledpwm;
			}
			if(ledpwm_temp>0){
				led0 = 0;
				ledpwm_temp--;
			}else{
				led0 = 1;
			}
		}
		P3=0xff;			//D17号灯闪烁结束,让其位置变为1让其熄灭
		flag0=0;
		
		for(i=0;i<8;i++){		//让心形灯右半部分呼吸闪烁
			while(flag0==0){
				if((timenum++)>=100){
					timenum=0;
					if(leddirction==0){
						ledpwm++;
						if(ledpwm>=pwm_max){
							ledpwm=pwm_max;
							leddirction=1;
						}
					}
					if(leddirction==1){
						ledpwm--;
						if(ledpwm<=pwm_min){
							ledpwm=pwm_min;
							flag0=1;
							leddirction=0;
						}
					}
					ledpwm_temp=ledpwm;
				}
				if(ledpwm_temp>0){
					P0 = table[i];
					ledpwm_temp--;
				}else{
					P0 = 0xff;
				}
			}
			P0=0xff;
			flag0=0;
		}
		
		for(i=0;i<8;i++){		//左半部分
			P2 = table1[i];
			while(flag0==0){
				if((timenum++)>=100){
					timenum=0;
					if(leddirction==0){
						ledpwm++;
						if(ledpwm>=pwm_max){
							ledpwm=pwm_max;
							leddirction=1;
						}
					}
					if(leddirction==1){
						ledpwm--;
						if(ledpwm<=pwm_min){
							ledpwm=pwm_min;
							flag0=1;
							leddirction=0;
						}
					}
					ledpwm_temp=ledpwm;
				}
				if(ledpwm_temp>0){
					P2 = table1[i];
					ledpwm_temp--;
				}else{
					P2 = 0xff;
				}
			}
			P2=0xff;
			flag0=0;
		}
	}
}

可能存在我心形灯效果图与代码放错不匹配的情况,如果你按照我的代码装载运行效果与我效果图不一样请评论告诉我!我找一下改一下,如果我后期把相应的效果视频删了,那么就emmmmm意会~意会~我觉得你很聪明肯定懂我的意思hiahia

  • 2
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值