Freshman上路 2022-01-03 21:06 采纳率: 100%
浏览 302
已结题

单片机C51 两个按键K1、K2控制8个LED灯,初始值0xFE。摁下松开一次K1,LED灯左移一位点亮下一盏灯,前一位熄灭;摁下松开一次K2,LED灯右移一位点亮下一盏灯,前一位熄灭;


#include"reg52.h"
#include"intrins.h" //_crol_和_cror_移位函数的库函数,使用_crol_和_cror_移位函数必须要先声明库函数
#define uchar unsigned char
void Delay_1ms(unsigned int Time)
    
{
unsigned int x, y;
for(x = Time; x > 0; x--)
for(y = 120; y > 0; y--);     //延时函数,老生常谈
}

void main(void)
{
  uchar led1,led2;
    led1=0xFE;
  led2=0xFE;
    
    while(1)
    {
        if(P1==0xFE) //定义按键K1,按键接P1^0口 1111 1110 接地变为低电平

          {
                Delay_1ms(50); //延时防抖动
                
                while(P1==0xFE);
                {
                P2=led1; //P2口初始值
              led1=_crol_(led1,1); //使用循环左移函数,一定要保持循环初始值有0。使用该函数使程序简单很多
                Delay_1ms(50);
                }
            }
                    
                    
      if(P1==0xFD) //定义按键K2,按键接P1^1口 1111 1101 接地变为低电平
            {
                  Delay_1ms(50); //延时防抖动
                while(P1==0xFD);
                 {
                P2=led2; //P2口初始值
                led2=_cror_(led2,1); //使用循环右移函数,一定要保持循环初始值有0。使用该函数使程序简单很多
                Delay_1ms(50);
                 }    
            }
    }
}

我的问题是,无法衔接左右移位,导致换向时混乱,请教一下改进方法,谢谢

  • 写回答

3条回答 默认 最新

  • 智者知已应修善业 2022-01-05 10:30
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月14日
  • 已采纳回答 1月6日
  • 创建了问题 1月3日

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!