鱼C论坛

 找回密码
 立即注册
查看: 279|回复: 1

led灯进行移位时,为什么一开始有几个灯不亮

[复制链接]
发表于 2023-12-10 20:51:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <REGX52.H>
  2. // ????delay?????
  3. void Delay(unsigned int xms)                //@12.000MHz
  4. {
  5.         unsigned char i, j;
  6.         while(xms)
  7.         {
  8.                 i = 2;
  9.                 j = 239;
  10.                 do
  11.                 {
  12.                         while (--j);
  13.                 } while (--i);
  14.                 xms--;
  15.         }

  16. }
  17. unsigned char LEDNum;
  18. // &#189;&#248;&#208;&#208;°&#180;&#206;&#187;×ó&#210;&#198;&#181;&#196;&#178;&#217;×÷

  19. void main()
  20. {
  21.          P1_0=0;
  22.          Delay(40);
  23.          P1_0=1;
  24.          Delay(40);
  25.          P1_1=0;
  26.          while(1)
  27.          {
  28.                  if(P3_4==0)
  29.                  {
  30.                          Delay(20);  //°&#180;&#188;ü&#207;&#251;&#182;&#182;
  31.                          while(P3_4==0);
  32.                          Delay(20); //&#203;&#201;&#191;&#170;&#207;&#251;&#182;&#182;
  33.                          LEDNum++;
  34.                          if(LEDNum>=8)
  35.                          {
  36.                                  LEDNum=0;
  37.                          }
  38.                          P1=~(0x01<<LEDNum);
  39.                  }
  40.                  
  41.          }
  42. }




  43. // 0000 0001
  44. // 0000 0010
  45. // 0000 0100
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-12-10 20:52:34 | 显示全部楼层
问题出在LEDNum变量的初始值没有赋值。在程序的开始部分,LEDNum应该被初始化为0,这样才能保证LED灯的移位正常进行。

修改后的代码如下:
  1. #include <reg52.h>
  2. void Delay(unsigned int xms)                //@12.000MHz
  3. {
  4.     unsigned char i, j;
  5.     while(xms)
  6.     {
  7.         i = 2;
  8.         j = 239;
  9.         do
  10.         {
  11.             while (--j);
  12.         } while (--i);
  13.         xms--;
  14.     }
  15. }
  16. unsigned char LEDNum = 0; // 初始化LEDNum为0
  17. void main()
  18. {
  19.     P1_0=0;
  20.     Delay(40);
  21.     P1_0=1;
  22.     Delay(40);
  23.     P1_1=0;
  24.     while(1)
  25.     {
  26.         if(P3_4==0)
  27.         {
  28.             Delay(20);  //按键消抖
  29.             while(P3_4==0);
  30.             Delay(20); //延时
  31.             LEDNum++;
  32.             if(LEDNum>=8)
  33.             {
  34.                 LEDNum=0;
  35.             }
  36.             P1=~(0x01 << LEDNum); // 移位控制LED灯亮起的位置
  37.         }
  38.     }
  39. }
复制代码

在这个例子中,我们通过按下P3_4口的按钮来移位控制LED灯的亮起位置。按下按钮后,LEDNum变量会自增1,并通过位运算将对应的LED灯亮起。当LEDNum超过7时,会被重置为0,这样就能循环移位显示LED灯。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 17:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表