51单片机心形灯实现按键控制流水编程

51单片机心形灯——实现按键控制流水编程

其他心形灯类型编码请看我的其他博文~
实现按键K1实现从左向右流水,按键K2实现从右往左流水,按键K3实现暂停流水,按键K4实现继续流水
注意:本代码存在小小BUG即按键K1以后可以按键K3和K4控制流水,不能按K2中断K1流水操作来实现K2从右向左流水。按键K2对于K1也同理!
心形灯效果图 如果是静态效果请刷新页面哦
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
心形灯原理图
在这里插入图片描述

#include "reg52.h"
sbit k1 = P3^2;
sbit k2 = P3^3;
sbit k3 = P3^4;
sbit k4 = P3^5;

unsigned char code table[]={0xfe, 0xfd, 0xfb, 0xf7, 0xef, 0xdf, 0xbf, 0x7f};
unsigned char code table1[]={0x7f, 0xbf, 0xdf, 0xef, 0xf7, 0xfb, 0xfd, 0xfe};

void Delay(unsigned int xms){
	unsigned int i, j;
	for(i=xms;i>0;i--){
		for(j=110;j>0;j--);
	}
}
unsigned int flag=0;
void checkflag(){
	if(k3==0){
		flag=1;
	}
	while(flag==1){
		if(k4==0){
			flag=0;
		}	
	}
}

void main(){
	unsigned char i;
	
	while(1){
		if(k1==0){
			P3=0;
			Delay(1000);
			
			checkflag();
			
			P3=0xff;
			
			checkflag();
			
			for(i=0;i<8;i++){
				P0 = table[i];
				Delay(1000);
				checkflag();
			}
			P0=0xff;
			checkflag();
			
			for(i=0;i<8;i++){
				P2 = table1[i];
				Delay(1000);
				checkflag();
			}
			P2=0xff;
			checkflag();
		}
		if(k2==0){
			for(i=0;i<8;i++){
				P2 = table[i];
				Delay(1000);
				checkflag();
			}
			P2=0xff;
			checkflag();
			for(i=0;i<8;i++){
				P0 = table1[i];
				Delay(1000);
				checkflag();
			}
			P0=0xff;
			checkflag();
			P3=0;
			Delay(1000);
			checkflag();
			P3=0xff;
			checkflag();
		}
		if(k4==0){
			P3=0;
			Delay(1000);
			
			checkflag();
			
			P3=0xff;
			
			checkflag();
			
			for(i=0;i<8;i++){
				P0 = table[i];
				Delay(1000);
				checkflag();
			}
			P0=0xff;
			checkflag();
			
			for(i=0;i<8;i++){
				P2 = table1[i];
				Delay(1000);
				checkflag();
			}
			P2=0xff;
			checkflag();
		}
	}
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值