天嵌 ARM开发社区

 找回密码
 注册
查看: 3575|回复: 4

led灯循环的时候的问题

[复制链接]
落秋 发表于 2013-8-21 00:17:55 | 显示全部楼层 |阅读模式
本帖最后由 落秋 于 2013-8-21 22:23 编辑

  附件在此, 本来想做led灯来回闪烁的,使用注释掉代码只能跑一次,然后停在led4上面 一直亮着不动  改过的程序可以实现来回闪烁  但是不知道注释掉的代码错哪里了  


#define GPBCON      (*(volatile unsigned long *)0x56000010)
#define GPBDAT      (*(volatile unsigned long *)0x56000014)

/*
* LED1,LED2,LED4对应GPB5、GPB6、GPB7、GPB8
*/
#define        GPB5_out        (1<<(5*2))
#define        GPB6_out        (1<<(6*2))
#define        GPB7_out        (1<<(7*2))
#define        GPB8_out        (1<<(8*2))

void  wait(volatile unsigned long dly)
{
        for(; dly > 0; dly--);
}
/*int shan(int a)
{
        if(a==5)
        {
                for(a=5;a<=8;a++)
                {
                        wait(30000);
                        GPBDAT = (~(1<<a));                 // 根据a的值,点亮LED1,2,3,4
                }
                return a;        
        }
        else if(a==8)
        {
                for(a=8;a>=5;a--)
                {
                        wait(30000);
                        GPBDAT = (~(1<<a));                 // 根据a的值,点亮LED1,2,3,4
                }
                return a;        
        }
}*/        
int shan(int a)
{
        for(a=5;a<=8;a++)
                {
                        wait(30000);
                        GPBDAT = (~(1<<a));                 // 根据a的值,点亮LED1,2,3,4
                }
                for(a=8;a>=5;a--)
                {
                        wait(30000);
                        GPBDAT = (~(1<<a));                 // 根据a的值,点亮LED1,2,3,4
                }
}
int main(void)
{
        int a=5;

        // LED1,LED2,LED4对应的4根引脚设为输出
        GPBCON = GPB5_out | GPB6_out | GPB7_out | GPB8_out;

        while(1)
        {
                //wait(30000);
        /*        if(a==5)
                        a = shan(a);
                else if(a==8)
                        a=shan(a);*/
                        shan(a);
        }

        return 0;
}


本帖子中包含更多资源

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

x
wbz073 发表于 2013-8-21 10:24:56 | 显示全部楼层
你的应该是判断部分的问题
 楼主| 落秋 发表于 2013-8-21 20:37:26 | 显示全部楼层
wbz073 发表于 2013-8-21 10:24
你的应该是判断部分的问题

看不出来这个循环或者判断出现了什么问题,return了 a值哒,为什么不继续判断a的值呢
 楼主| 落秋 发表于 2013-8-21 22:04:53 | 显示全部楼层
这个程序是没有返回 a的值的 不是判断问题 具体原因不明  因为
#include<stdio.h>
void wait (long a)
{
        for (;a<0;a--);
}
int shan(int a)
{
        if(a==5)
        {
                int t;
                for(a=5;a<=8;a++)
                {
                //        wait(30000);
                         printf("%d ",a);
                         t=a;
                }
                return t;       
        }
        else if(a==8)
        {
                int t;
                for(a=8;a>=5;a--)
                {
                //        wait(30000);
                        printf("%d ",a);
                 t=a;
                }
                return t;       
        }
}
int main(void)
        {
        int a=5;
while(1)
        {
                //wait(30000);
                if(a==5)
                        a = shan(a);
                else
                        if(a==8)
                        a=shan(a);
       
                       
        }
        return 0;
}
能正确输出结果  需要在函数里面定义一个变量  搞不懂为什么   把相应的改改就可以搞成led灯来回闪烁了
 楼主| 落秋 发表于 2013-8-21 22:18:17 | 显示全部楼层
  现在完美解决了  没注意原来的程序for 语句结束后a的值已经=9了 return 9之后 不能进入主函数if语句  应该把for里面的“=”删掉 就ok了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-11-1 06:56 , Processed in 1.031250 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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