以单片机为核心,设计一个节日彩灯控制器

不辜负每个朝阳,不荒废每个深夜,因平凡而奋斗,因奋斗而不平凡

专接本电子信息二班你超哥

#include <reg52.h>	//51头文件
#include <intrins.h>//包含循环右移函数_cror头文件

#define uchar unsigned char	 //宏定义
#define uint  unsigned int	 //宏定义
sbit kai_shi = P1^0;//S0开始
sbit guan_bi = P1^1;//S1关闭
sbit zuo_yi_key = P1^2;//下移
sbit you_yi_key = P1^3;//上移
sbit flag = P3^2; //外部中断信号产生脚
unsigned char temp;//P1口状态暂存变量
unsigned char k;
void key();
//毫秒级延时函数
void delay(uint z)
{
	uint x,y;
	for(x = z; x > 0; x--)
		for(y = 120; y > 0 ; y--);
}
//主函数
void main()
{
		while(1)
		{
			key();
			switch(k) //判断那一列被按下
			{
				
				case 1:	temp = 0x7f; //定义LED灯初始状态,从LED8开始亮
							while(1)
							{
									P0 = temp;	 //赋值给P1,点亮LED8
									delay(500); //延时1000毫秒
									temp = _crol_(temp,1);//循环右移,LED从左至右点亮
									key();
									if(k!=1) break;
									
							}
							 ;	break;//第一列被按下
				case 2:								temp = 0x7f; //定义LED灯初始状态,从LED8开始亮
							while(1)
							{
								P0 = temp;	 //赋值给P1,点亮LED8
								delay(500); //延时1000毫秒
								temp = _crol_(temp,1);//循环右移,LED从左至右点亮
								key();
								if(k!=2) break;
							}
							 ;	break;//第二列被按下
				case 3:			temp = 0xfe; //定义LED灯初始状态,从LED8开始亮
							while(1)
							{
									P0 = temp;	 //赋值给P1,点亮LED8
									delay(500); //延时1000毫秒
									temp = _cror_(temp,1);//循环右移,LED从左至右点亮
								key();
								if(k!=3) break;
							}
							 ;	break;//第三列被按下
								
				case 4:	 P0=0xff;	break;//第四列被按下 
			}
		}
}
void key()
{
	if(kai_shi == 0)//判断S2是否被按下
		{
			delay(20);//按键消抖
			if(kai_shi == 0)
			{
				
							k=1;
		
				while(!kai_shi);//松手检测
			}	
		}
		
		if(zuo_yi_key == 0)//判断S2是否被按下
		{
			delay(20);//按键消抖
			if(zuo_yi_key == 0)
			{
			
					k=2;
				while(!zuo_yi_key);//松手检测
			}	
		}

	if(you_yi_key == 0)//判断S2是否被按下
		{
			delay(20);//按键消抖
			if(you_yi_key == 0)
			{
			
					k=3;
		
				while(!you_yi_key);//松手检测
			}	
		}
			if(guan_bi == 0)//判断S2是否被按下
		{
			delay(20);//按键消抖
			if(guan_bi == 0)
			{
				
					k=4;
				while(!guan_bi);//松手检测
			}	
		}

}

  • 8
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值