裸机程序,简单的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条回答
心中一片海
1楼-- · 2019-07-16 08:52
 精彩回答 2  元偷偷看……
格古洛
2楼-- · 2019-07-16 14:18
你试试先打开开LED1,然后延时一段时间熄灭,看看有木有反应~
心中一片海
3楼-- · 2019-07-16 20:01
格古洛 发表于 2015-9-28 22:53
你试试先打开开LED1,然后延时一段时间熄灭,看看有木有反应~

我把代码改成下面这样,效果是,灯一直亮,不灭
  1.         //while(1)
  2.         //{
  3.                 Delay();       
  4.                 LED1_ON;//单独运行该行代码,可以点亮LED1
  5.                 Delay();       
  6.                 LED1_OFF;//单独运行该行代码,可以熄灭LED1                               
  7.         //}
复制代码
xiongrz944
4楼-- · 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延时函数的,延时时间长短也进行了调整测试,没发现有什么影响变化。。。

你这个很明显是延时时间不够长,身边要是有示波器可以测试下对应的引脚输出,应该有方波输出
心中一片海
5楼-- · 2019-07-17 04:18
xiongrz944 发表于 2015-9-29 07:29
你这个很明显是延时时间不够长,身边要是有示波器可以测试下对应的引脚输出,应该有方波输出

我把延时函数改成下面的样子,还是不行,LED1灯不闪烁

  1. void Delay(void)
  2. {
  3.         volatile unsigned long MaxNum1 = 90000000;
  4.         volatile unsigned long MaxNum2 = 90000000;
  5.         volatile unsigned long MaxNum3 = 90000000;
  6.         volatile unsigned long MaxNum4 = 90000000;
  7.         volatile unsigned long MaxNum5 = 90000000;
  8.         volatile unsigned long MaxNum6 = 90000000;
  9.         volatile unsigned long  i = 0;
  10.         volatile unsigned long  j = 0;
  11.         volatile unsigned long  k = 0;
  12.         volatile unsigned long  l = 0;
  13.         volatile unsigned long  m = 0;
  14.         volatile unsigned long  n = 0;
  15.        
  16.         for(i=0;i<MaxNum1;i++)
  17.         {
  18.                 for(j=0;j<MaxNum2;j++)
  19.                 {
  20.                         for(k=0;k<MaxNum3;k++)
  21.                         {
  22.                                 for(l=0;l<MaxNum4;l++)
  23.                                 {
  24.                                         for(m=0;m<MaxNum5;m++)
  25.                                         {
  26.                                                 for(n=0;n<MaxNum6;n++)
  27.                                                 {
  28.                                                         ;
  29.                                                 }
  30.                                         }
  31.                                 }
  32.                         }
  33.                 }
  34.         }               
  35.        
  36.         return;
  37. }
复制代码
鸿宇
6楼-- · 2019-07-17 08:56
 精彩回答 2  元偷偷看……

一周热门 更多>