裸机程序,简单的LED驱动问题,为什么LED灯不闪烁?

2019-07-16 08:37发布

做一个裸机程序,点亮LED灯,想要达到使得LED灯闪烁的效果,
但是用下面的程序生成的bin文件,下载到开发板,为什么LED1一直亮,而不闪烁?

C代码如下:
  1. #define GPFCON (*(volatile unsigned long *)0x56000050)
  2. #define GPFUP  (*(volatile unsigned long *)0x56000058)
  3. #define GPFDAT (*(volatile unsigned long *)0x56000054)

  4. #define GPF0_Out (1<<(0*2))
  5. #define GPF1_Out (1<<(1*2))
  6. #define GPF2_Out (1<<(2*2))
  7. #define GPF3_Out (1<<(3*2))

  8. #define LED1_ON  (GPFDAT &= (~(1<<0)));
  9. #define LED1_OFF (GPFDAT |= (1<<0));
  10. #define LED2_ON  (GPFDAT &= (~(1<<1)));
  11. #define LED2_OFF (GPFDAT |= (1<<1));
  12. #define LED3_ON  (GPFDAT &= (~(1<<2)));
  13. #define LED3_OFF (GPFDAT |= (1<<2));
  14. #define LED4_ON  (GPFDAT &= (~(1<<3)));
  15. #define LED4_OFF (GPFDAT |= (1<<3));


  16. void Delay(void);

  17. int main()
  18. {
  19.         GPFCON = GPF0_Out|GPF1_Out|GPF2_Out|GPF3_Out; //将LED1,2,3,4对应的GPF0,1,2,3的三个引脚设为输出
  20.        
  21.         //先熄灭所有的LED灯
  22.         LED1_OFF;
  23.         LED2_OFF;
  24.         LED3_OFF;
  25.         LED4_OFF;
  26.        
  27.         while(1)
  28.         {
  29.                 Delay();
  30.                 LED1_ON;//单独运行该行代码,可以点亮LED1
  31.                 Delay();
  32.                 LED1_OFF;//单独运行该行代码,可以熄灭LED1                               
  33.         }
  34.        
  35.         return 0;
  36. }

  37. void Delay(void)
  38. {
  39.         volatile unsigned long MaxNum1 = 9000;
  40.         volatile unsigned long MaxNum2 = 9000;
  41.         volatile unsigned long MaxNum3 = 9000;
  42.         volatile unsigned long  i = 0;
  43.         volatile unsigned long  j = 0;
  44.         volatile unsigned long  k = 0;
  45.        
  46.         for(i=0;i<MaxNum1;i++)
  47.         {
  48.                 for(j=0;j<MaxNum2;j++)
  49.                 {
  50.                         for(k=0;k<MaxNum3;k++)
  51.                         {
  52.                                 ;
  53.                         }
  54.                 }
  55.         }               
  56.        
  57.         return;
  58. }
复制代码




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
xiongrz944
2019-07-16 22:30
心中一片海 发表于 2015-09-28 22:30
在while循环中,若只将LED1_ON运行,注释掉LED1_OFF,那么LED1灯一直是亮着的;
&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; 若只将LED1_OFF运行,注释掉LED1_ON,那么LED1灯将熄灭;
不知道为什么LED1_ON和LED1_OFF都运行时,为什么LED1不闪烁呢?

另外Delay延时函数的,延时时间长短也进行了调整测试,没发现有什么影响变化。。。

你这个很明显是延时时间不够长,身边要是有示波器可以测试下对应的引脚输出,应该有方波输出

一周热门 更多>