OpenEdv-开源电子网

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

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

[复制链接]

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-8
在线时间
10 小时
发表于 2017-8-26 10:17:38 | 显示全部楼层 |阅读模式
1金钱
本帖最后由 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.PNG
捕获10.PNG
捕获9.PNG
捕获8.PNG
捕获7.PNG

c.pdf

29.02 KB, 下载次数: 170

最佳答案

查看完整内容[请看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

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-8-26 10:17:39 | 显示全部楼层
//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-26 11:35:51 | 显示全部楼层
我是要实现断断路测试,断路测试:F0,F4用一根线连接,拔掉线的一端,LED0亮,F1,F5用一根线连接,拔掉线的一端,LED1亮,F2,F6用一根线连接,拔掉线的一端,BEEP响,
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-8
在线时间
10 小时
 楼主| 发表于 2017-8-26 11:38:09 | 显示全部楼层
短路测试:短路F0和F1这两根线,LED0,LED1亮。短路F0和F2这两根线,LED0亮,BEEP响。短路F2和F1这两根线,LED1亮BEEP响
回复

使用道具 举报

30

主题

150

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
208
金钱
208
注册时间
2017-5-19
在线时间
149 小时
发表于 2017-8-26 14:30:08 | 显示全部楼层
能不能传一份整体代码,这样看 别扭
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-8
在线时间
10 小时
 楼主| 发表于 2017-8-26 16:10:45 | 显示全部楼层
爱问知识人 发表于 2017-8-26 14:30
能不能传一份整体代码,这样看 别扭

附件里面上传了代码
回复

使用道具 举报

6

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2017-7-25
在线时间
39 小时
发表于 2017-8-26 21:43:57 | 显示全部楼层
这逻辑,看一下就知道是一起响一起亮的啊
回复

使用道具 举报

6

主题

72

帖子

0

精华

初级会员

Rank: 2

积分
198
金钱
198
注册时间
2017-7-25
在线时间
39 小时
发表于 2017-8-26 21:48:32 | 显示全部楼层
先不管你的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也亮,你说亮不亮
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-8
在线时间
10 小时
 楼主| 发表于 2017-8-28 14:17:56 | 显示全部楼层
17602515236 发表于 2017-8-26 21:48
先不管你的PF0,PF1,PF2,
就看你的F4,F5,F6,和LED0,LED1,BEEP
F6:

那应该怎么改正这个错误呢
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-8
在线时间
10 小时
 楼主| 发表于 2017-8-28 19:52:23 | 显示全部楼层
huanghan 发表于 2017-8-28 16:34
//F0,F1,F2先输出高电平给F4,F5,F6
GPIO_SetBits(GPIOF,GPIO_Pin_0);
GPIO_SetBits(GPIOF,GPIO_Pin_1 ...

你的断路代码跟我的断路代码一样,但是还有短路 的代码
回复

使用道具 举报

10

主题

266

帖子

0

精华

高级会员

Rank: 4

积分
693
金钱
693
注册时间
2017-7-27
在线时间
98 小时
发表于 2017-8-28 22:11:43 | 显示全部楼层
本帖最后由 huanghan 于 2017-8-28 22:14 编辑
Edffort4 发表于 2017-8-28 19:52
你的断路代码跟我的断路代码一样,但是还有短路 的代码

断路代码跟你写的断路代码不一样,你写的逻辑有问题,短路逻辑代码不用写,如果短路,按照你的设计IO口输入都0电平
回复

使用道具 举报

4

主题

12

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2017-8-8
在线时间
10 小时
 楼主| 发表于 2017-8-28 23:47:22 | 显示全部楼层
是的,我这代码写的太乱啦
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-18 11:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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