OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4033|回复: 4

简单C语言程序问题,求大神解答,感激不尽

[复制链接]

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-8
在线时间
10 小时
发表于 2017-8-28 20:23:22 | 显示全部楼层 |阅读模式
3金钱
附件里面的C语言程序

我是要实现断短路测试,断路测试:F0,F4用一根线连接,拔掉线的一端,LED0亮,F1,F5用一根线连接,拔掉线的一端,LED1亮
,F2,F6用一根线连接,拔掉线的一端,BEEP响,短路测试:短路F0和F1这两根线,LED0,LED1亮。短路F0和F2这两根线,LED0亮
,BEEP响。短路F2和F1这两根线,LED1亮BEEP响。
现在的问题是:

先不管PF0,PF1,PF2,
就看F4,F5,F6,和LED0,LED1,BEEP
F6:
if(F6==1)
{
     beep=1;
}
if(F6==0)
{
     beep=1;
}
F6不就只有1和0,两种状态...1也响,0也响,你说他响不响
F4,F5也是一样,1也亮,0也亮,你说亮不亮

最后,  所以程序应该怎么改呢

最佳答案

查看完整内容[请看2#楼]

//F0,F1,F2先输出高电平给F4,F5,F6 GPIO_SetBits(GPIOF,GPIO_Pin_0); GPIO_SetBits(GPIOF,GPIO_Pin_1); GPIO_SetBits(GPIOF,GPIO_Pin_2); //逻辑判断如下给参考 if(F6==0)&&(F5==0)&&(F4==0) //三条线都断开 { beep = 1; LED0 = 0; LED1 = 0; } else if(F6==0)&&(F5!=0)&&(F4!=0) //只有F6这条断开 { beep = 1; } else if(F6!=0)&&(F5==0)&&(F4!=0)//只有F5这条断开 { LED0 = 0; } else if(F6!=0)& ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
691
金钱
691
注册时间
2017-7-27
在线时间
97 小时
发表于 2017-8-28 20:23:23 | 显示全部楼层

//F0,F1,F2先输出高电平给F4,F5,F6
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOF,GPIO_Pin_1);
GPIO_SetBits(GPIOF,GPIO_Pin_2);
//逻辑判断如下给参考
if(F6==0)&&(F5==0)&&(F4==0) //三条线都断开
{
beep = 1;
LED0 = 0;
LED1 = 0;
}

else if(F6==0)&&(F5!=0)&&(F4!=0) //只有F6这条断开
{
beep = 1;
}

else if(F6!=0)&&(F5==0)&&(F4!=0)//只有F5这条断开
{
LED0 = 0;
}

else if(F6!=0)&&(F5!=0)&&(F4==0)//只有F5这条断开
{
LED1 = 0;
}

else if(F6==0)&&(F5==0)&&(F4!=1)//只有F6,F5这2条断开
{

}
else if(F6!=0)&&(F5==0)&&(F4==0)//只有F5,F4这2条断开
{
}
else if(F6==0)&&(F5!=0)&&(F4==0)//只有F6,F4这2条断开
{
}
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-8
在线时间
10 小时
 楼主| 发表于 2017-8-28 20:27:27 | 显示全部楼层
这是我的错误代码

//led.h头文件

#ifndef __LED_H
#define __LED_H
#include "sys.h"


#define F4 PFin (4)
#define F5 PFin (5)
#define F6 PFin (6)
#define F0 PFout (0)
#define F1 PFout (1)
#define F2 PFout (2)
#define beep PFout (8)
#define LED0 PFout (9)
#define LED1 PFout (10)

void LED_Init(void);
       
#endif


//led.c源文件

#include "led.h"


void LED_Init(void)
{
        GPIO_InitTypeDef GPIO_Initstructure;
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);

        GPIO_Initstructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_0|GPIO_Pin_1;
        GPIO_Initstructure.GPIO_Mode =GPIO_Mode_OUT;
        GPIO_Initstructure.GPIO_OType = GPIO_OType_PP;
        GPIO_Initstructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
         GPIO_Init(GPIOF,&GPIO_Initstructure);
       
       
        GPIO_Initstructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_Initstructure.GPIO_Mode =GPIO_Mode_OUT;
        GPIO_Initstructure.GPIO_OType = GPIO_OType_PP;
        GPIO_Initstructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
         GPIO_Init(GPIOF,&GPIO_Initstructure);
         LED0 = 1;
       
        GPIO_Initstructure.GPIO_Pin = GPIO_Pin_6|GPIO_Pin_4|GPIO_Pin_5;
        GPIO_Initstructure.GPIO_Mode =GPIO_Mode_IN;
        GPIO_Initstructure.GPIO_OType = GPIO_OType_PP;
        GPIO_Initstructure.GPIO_PuPd = GPIO_PuPd_DOWN;
        GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOF,&GPIO_Initstructure);
       
        GPIO_Initstructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_Initstructure.GPIO_Mode =GPIO_Mode_OUT;
        GPIO_Initstructure.GPIO_OType = GPIO_OType_PP;
        GPIO_Initstructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Initstructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOF,&GPIO_Initstructure);
          LED1 = 1;


//main.c文件

#include "led.h"
#include "delay.h"
#include "usart.h"
#include "beep.h"


int main(void)
{
        uint8_t tmp=0;
    delay_init(168);
        LED_Init();
        BEEP_Init();
       
        while(1)
  {
       

                GPIO_SetBits(GPIOF,GPIO_Pin_2);
                GPIO_SetBits(GPIOF,GPIO_Pin_0);
                GPIO_SetBits(GPIOF,GPIO_Pin_1);
                 if(F6==0)                       
                {
                 beep=1;
                }
               
                if(F4==0)                       
                {
                  LED0 = 0;
                }

                if(F5==0)                       
                {
                  LED1 = 0;
                }
                GPIO_SetBits(GPIOF,GPIO_Pin_0);
                GPIO_ResetBits(GPIOF,GPIO_Pin_1);
                GPIO_ResetBits(GPIOF,GPIO_Pin_2);
                if(F6==1)
                {
                  LED0 = 0;
                  beep = 1;
                }
                if(F5==1)
                {
                  LED0 = 0;
                  LED1 = 0;
                }

                GPIO_ResetBits(GPIOF,GPIO_Pin_0);
                GPIO_SetBits(GPIOF,GPIO_Pin_1);
                GPIO_ResetBits(GPIOF,GPIO_Pin_2);
                if(F6==1)
                {
                   LED1 = 0;                          
                   beep = 1;
                }
               
                       
       
               
        }
               
}


回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-8
在线时间
10 小时
 楼主| 发表于 2017-8-28 23:21:44 | 显示全部楼层
本帖最后由 Edffort4 于 2017-8-28 23:23 编辑
huanghan 发表于 2017-8-28 22:17
//F0,F1,F2先输出高电平给F4,F5,F6
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOF,GPIO_Pin ...

老哥,又遇到你,你这是断路程序,还有后面短路程序,而且
GPIO_SetBits(GPIOF,GPIO_Pin_0);
                GPIO_ResetBits(GPIOF,GPIO_Pin_1);
                GPIO_ResetBits(GPIOF,GPIO_Pin_2);
                if(F6==1)
                {
                  LED0 = 0;
                  beep = 1;
                }
然后在判断条件GPIO_ResetBits(GPIOF,GPIO_Pin_0);
                GPIO_SetBits(GPIOF,GPIO_Pin_1);
                GPIO_ResetBits(GPIOF,GPIO_Pin_2);
                if(F6==1)
                {
                   LED1 = 0;                          
                   beep = 1;
                }


怎样让这两个程序不要一起运行,就是当if(F6==1),不要两部分一起运行,执行完第一条
IF语句,然后重新赋值,GPIO_ResetBits(GPIOF,GPIO_Pin_0);
                GPIO_SetBits(GPIOF,GPIO_Pin_1);
                GPIO_ResetBits(GPIOF,GPIO_Pin_2);判断IF执行第二条,不要当if(F6==1)的时候,LED1,LED0 BEEP
同时亮和响,而没有进行赋值。

回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
691
金钱
691
注册时间
2017-7-27
在线时间
97 小时
发表于 2017-8-29 08:18:01 | 显示全部楼层
Edffort4 发表于 2017-8-28 23:21
老哥,又遇到你,你这是断路程序,还有后面短路程序,而且
GPIO_SetBits(GPIOF,GPIO_Pin_0);
         ...

大哥都给你写了一个参考的,剩下的自己写
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 04:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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