51键盘控制流水灯(带protuse仿真)

#include<reg52.h>
#include<intrins.h>
#define data P2
#define uint unsigned int
void delay10ms(void);
void delay500ms(void);
void found(void);
void initEx0(void);

sbit start_signal = P1^2;
sbit stop_singal  = P1^3;
sbit up_to_down   = P1^4;
sbit down_to_up   = P1^5;
sbit inter_signal = P3^2;

uint fp = 1;
int main()
{
	initEx0();
	while(1)
	{
		if(!(start_signal && stop_singal && up_to_down && down_to_up))
		{
			delay10ms();
			if(!(start_signal && stop_singal && up_to_down && down_to_up))
			{
				inter_signal = 0;
			}
		}
		switch(fp)			//	0:开始; 1:结束; 2:从上向下流;3:从下到上流
		{
		case 0:data = 0x01;delay500ms();while(1){data = _crol_(data,1);delay500ms();if(!        
              (start_signal && stop_singal && up_to_down && down_to_up))break;}break;
		case 1:data = 0x00;break;
		case 2:while(1){data = data = _crol_(data,1);delay500ms();if(!(start_signal && 
               stop_singal && up_to_down && down_to_up))break;}break;
		case 3:while(1){data = data = _cror_(data,1);delay500ms();if(!(start_signal && 
               stop_singal && up_to_down && down_to_up))break;}break;
		default:data = 0x00;break;
		}
	}
	return 0;
}


void delay10ms(void)  
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}

void delay500ms(void)   
{
    unsigned char a,b,c;
    for(c=23;c>0;c--)
        for(b=152;b>0;b--)
            for(a=70;a>0;a--);
}

void found(void)
{
		if(start_signal == 0)
			{
				delay10ms();
				if(start_signal == 0)
				{
					while(!start_signal);
					fp = 0;
				}
			}
			
			if(stop_singal == 0)
			{
				delay10ms();
				if(stop_singal == 0)
				{
					while(!stop_singal);
					fp = 1;
				}
			}
			
			if(up_to_down == 0)
			{
				delay10ms();
				if(up_to_down == 0)
				{
					while(!up_to_down);
					fp = 2;
				}
			}
			
			if(down_to_up == 0)
			{
				delay10ms();
				if(down_to_up == 0)
				{
					while(!down_to_up);
					fp = 3;
				}
			}
			while(!(start_signal && stop_singal && up_to_down && down_to_up));
}


void initEx0()
{
	EA = 1;
	EX0 = 1;
	IT0 = 1;
}

void Ex0_intr() interrupt 0
{
		found();
		inter_signal = 1;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GLY_2002

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值