键控流水灯(80C51)

简介:

编程可键控的流水灯程序。实现功能:K1是总开关,当K1首次按下时,流水灯由下往上流动;当K2按下时停止流动,且全部灯灭;当K3按下时使灯由上往下流动;当K4按下时使灯由下往上流动。

电路图:

键控流水灯电路

 

思路:

 定义两个标志位run、dir,根据键值修改标志位,再根据标志位的值控制led灯的亮灭。

rundir
K110
K200
K311
K410

代码如下: 

#include <reg51.h> //头文件声明

unsigned char led[] = {0xfe,0xfd,0xfb,0xf7}; //该数组存放led灯的工作状态

void delay() // 延时函数
{
	int i;
	for(i=30000;i>0;i--);
}

void main()
{
	
	bit run=0,dir=0; // 标志位定义及初始化
	char i;
				
	while(1)
	{
		switch(P0&0x0f)			//检测按键状态
		{
			case 0x0e:run=1;break;	//K1动作,设置run=1
			case 0x0d:run=0,dir=0;break;	//K2动作,设置run=0,dir=0
			case 0x0b:dir=1;break;	//K3动作,设置dir=1
			case 0x07:dir=0;break;	//K4动作,设置dir=0
		}
		if(run==1)
		{
			if(dir==1)
			{
				for(i=0;i<=3;i++) //若run=dir=1,自上而下流动
				{
					P2=led[i];
					delay();
				}
			}
			else 
			{
				for(i=3;i>=0;i--) //若run=1、dir=0自下而上流动
				{
					P2=led[i];
					delay();
				}
			}
			
		}
	
		else
			P2=0xff; //若run=0,灯全灭
		
	}
}




注意 :有时候按K3键时会没反应,这是因为有阻塞,需要多按几下。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值