自学习(独立按键控制LED移位)

 b站版

#include <REGX52.H>
  unsigned char LEDNum;
void Delay(unsigned int xms)		//@12.000MHz
{
	unsigned char i, j;
   while(xms--)
	 {
	 	  i = 12;
	    j = 169;
	    do
	    {
		    while (--j);
	    } while (--i);
	 }

}
void main()
{    

		  P2=~0x01;
    while(1)
		{
		  if(P3_1==0)   //p3.1按键向左移动
			{ 
				Delay(20);
				while(P3_1==0);
				Delay(20);
				
				LEDNum++;
				if(LEDNum>=8)
				{
				  LEDNum=0;
				}
				P2=~(0x01<<LEDNum);
				
			}
		
			if(P3_0==0)
			{ 
				Delay(20);
				while(P3_0==0);
				Delay(20);
				
			
				if(LEDNum==0)
				
				  LEDNum=7;
				else
					LEDNum--;
				P2=~(0x01<<LEDNum);
				
				
			}
			
			
		}
}

gpt版

#include <REGX52.H>

void delay(unsigned int time) {
    unsigned int i, j;
    for (i = 0; i < time; i++)
        for (j = 0; j < 1275; j++);
}

void main() {
    unsigned char pattern = 0x01; // 初始LED模式
    P2 = pattern; // 初始P2口状态
    
    while (1) {
        if (P3_1 == 0) { // 如果P3.1按键按下
            delay(50); // 延时消除抖动
            while (P3_1 == 0); // 等待按键释放
            
            pattern <<= 1; // 向前移位
            if (pattern == 0x00) {
                pattern = 0x01; // 如果模式超过了0x80,重新开始
            }
        }

        if (P3_0 == 0) { // 如果P3.0按键按下
            delay(50); // 延时消除抖动
            while (P3_0 == 0); // 等待按键释放
            
            pattern >>= 1; // 向后移位
            if (pattern == 0x00) {
                pattern = 0x80; // 如果模式小于0x01,重新开始
            }
        }
        
        P2 = ~pattern; // 更新P2口状态
    }
}

curor版

#include <REGX52.H>

#define LED P2 // 假设LED灯条连接到P2端口
#define KEY P3_2 // 假设按键连接到P3.2端口

void Delay(unsigned int xms) {
    unsigned int i, j;
    for(i = xms; i > 0; i--)
        for(j = 112; j > 0; j--);
}

void main() {
    unsigned char led = 0x01; // 初始LED状态,只有最左边的灯亮
    LED = ~led; // LED灯条上的灯亮起来

    while(1) {
        if(KEY == 0) { // 如果按键被按下
            Delay(10); // 去抖动
            if(KEY == 0) { // 再次检查按键是否被按下
                led <<= 1; // 将LED状态左移一位
                if(led == 0) led = 0x01; // 如果所有的灯都熄灭了,重新开始
                LED = ~led; // 更新LED灯条的状态
            }
            while(KEY == 0); // 等待按键释放
        }
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值