简单C语言程序问题,求大神解答,谢谢

2019-07-20 12:17发布

本帖最后由 Edffort4 于 2017-8-29 11:21 编辑

我是要实现断短路测试,断路测试: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==0)
{
      beep=1;
}
if(F6==1)
{
      LED0 = 0;
    beep = 1;
}
if(F6==1)
  {
     LED1 = 0;     
      beep = 1;
  }
F6不就只有1和0,两种状态...1也响,0也响,你说他响不响
F4,F5也是一样,1也亮,0也亮,你说亮不亮
所以,我拔掉F6和F2任一端,LED0,LED1,BEEP全是同时响同时亮。
最后,  所以程序应该怎么改呢
最后,  所以程序应该怎么改呢
最后,  所以程序应该怎么改呢

//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)
{

    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;
  }
  

}
  
}



下面的图片是错误的,发错了,不用看
下面的图片是错误的,发错了,不用看


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
17602515236
1楼-- · 2019-07-21 05:08
先不管你的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也亮,你说亮不亮
Edffort4
2楼-- · 2019-07-21 10:00
 精彩回答 2  元偷偷看……
Edffort4
3楼-- · 2019-07-21 12:35
 精彩回答 2  元偷偷看……
huanghan
4楼-- · 2019-07-21 13:46
本帖最后由 huanghan 于 2017-8-28 22:14 编辑
Edffort4 发表于 2017-8-28 19:52
你的断路代码跟我的断路代码一样,但是还有短路 的代码

断路代码跟你写的断路代码不一样,你写的逻辑有问题,短路逻辑代码不用写,如果短路,按照你的设计IO口输入都0电平
Edffort4
5楼-- · 2019-07-21 17:56
 精彩回答 2  元偷偷看……

一周热门 更多>