LED彩灯控制系统

作者:万能小羊

复现效果描述:通过按键控制流水灯开关以及模式切换

硬件普中51单片机

代码:

//头文件声明区域
#include <at89c51RC2.h>
#include <intrins.h>


//变量声明区
unsigned char Liu = 0xfe;//1111 1110
unsigned char Liu_Data_18[4] = {0x7e,0xbd,0xdb,0xe7};//0111 1110到1110 0111
unsigned char Liu_Data_18_Index;//用于数组变量
unsigned char Key_Val,Key_Down,Key_old;
unsigned char Mode = 1;//流水灯模式
bit Flag = 0;//1-启动 0-关闭,上电默认关闭

//延迟函数
void Delay(unsigned int x)
{
	while(x--){
		unsigned char data i, j;

		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}

//独立按键检测函数
unsigned char Key_Read()
{
	unsigned char temp = 0;
	if(P3_1 == 0) temp = 1;
	if(P3_0 == 0) temp = 2;
	if(P3_2 == 0) temp = 3;
	if(P3_3 == 0) temp = 4;
	return temp;
}


//!main!
void main()

	while(1)
	{
		Key_Val = Key_Read();//读取键码值
		Key_Down = Key_Val & (Key_Val ^ Key_old); //检测下降沿
	  //Key_Up = ~Key_Val & (Key_Val ^ Key_old);// 检测上升沿
		Key_old = Key_Val;//扫描辅助变量
		//1,2,3,4按键读取
		switch(Key_Down)
		{
			case 1:
				Flag = 1;
			break;
			case 2:
				Flag = 0;
			break;
			case 3:
				Mode++;
				if(Mode == 5)Mode = 1;
			break;
			case 4:
				Mode--;
				if(Mode == 0)Mode = 4;
			break;
		}
		//执行按键信息
		if(Flag == 1)
		{
			switch(Mode)
			{
				case 1:
					P2 = Liu;
					Liu = _crol_(Liu,1);
					Delay(200);
				break;
				case 2:
					P2 = Liu;
					Liu = _cror_(Liu,1);
					Delay(200);
				break;
				case 3:
					P2 = Liu_Data_18[Liu_Data_18_Index];
					Delay(200);
					Liu_Data_18_Index++;
					if(Liu_Data_18_Index == 4)Liu_Data_18_Index = 0;
				break;
				case 4:
					P2 = Liu_Data_18[Liu_Data_18_Index];
					Delay(200);
					Liu_Data_18_Index--;
					if(Liu_Data_18_Index == 255)Liu_Data_18_Index = 3;
				break;
			}
		}
		else
		{
			P2 = 0xff;
		}
	}
}

 效果:

LED彩灯控制系统

  • 8
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值