检测端口是c15,蜂鸣器是c14

 
#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include "Delay.h"                  // Device header
 
 
 
int s,t;//¶¨ÒåsΪ¾Ã×ø¼ÆÊýÖµ£¬
 
int main(void)
    
{
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //¿ªÆôʱÖÓ
 
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //ÉèÖÃGPIOµÄ5ºÅÒý½Å
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÉèÖÃÎªÍÆÍìÊä³ö
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //ÉèÖÃGPIOµÄÊä³öËÙ¶ÈΪ50MHz
    GPIO_Init(GPIOC, &GPIO_InitStructure); //³õʼ»¯GPIO
//·äÃùÆ÷Çý¶¯´úÂë
 
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //ÉèÖÃGPIOµÄ6ºÅÒý½Å
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖÃΪÉÏÀ­ÊäÈëģʽ
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //
    GPIO_Init(GPIOC, &GPIO_InitStructure); //
 
 
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
 
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOC, &GPIO_InitStructure);
 
    
    GPIO_SetBits(GPIOC,GPIO_Pin_5);//¿ªÊ¼¹©µç
    Delay_s(5);
    GPIO_ResetBits(GPIOC,GPIO_Pin_5);//Í£Ö¹¹©µç
    //¿ª»ú·äÃùÆ÷
    
  
    while(1)
        
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_13);
    Delay_s(1);
    GPIO_ResetBits(GPIOC, GPIO_Pin_13);
    Delay_s(1);
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==0)
    {
        s=s+1;
        Delay_s(1);
            }
    else
    {
        t=t+1;
        Delay_s(1);
    }        //¼ÆÊ±Ä£¿é
    if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_6)==0)
    {
    if(s>=5400)
      {
        GPIO_SetBits(GPIOC,GPIO_Pin_5);
        Delay_s(5);
        GPIO_ResetBits(GPIOC,GPIO_Pin_5);//Í£Ö¹¹©µç
      }
    }        
    else
      {
    if(t>=300)
    {
      GPIO_SetBits(GPIOC,GPIO_Pin_5);
        Delay_s(5);
        GPIO_ResetBits(GPIOC,GPIO_Pin_5);//Í£Ö¹¹©µç
     Delay_s(5);
        s=0;
    t=0;    
    
    }}}}
 
 
 

检测端口是c15,蜂鸣器是c14可以帮忙改吗

当然可以帮忙改,您可以将代码中的GPIO_Pin_13改为GPIO_Pin_14,将GPIO_Pin_5改为GPIO_Pin_15,以适配您的硬件连接。同时,需要将代码中检测按钮的GPIO端口由GPIOB改为GPIOC,并将对应的Pin号改为GPIO_Pin_6。修改后的代码如下:

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include "Delay.h"                  // Device header
 
int s,t;
 
int main(void)
    
{
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //使能时钟
 
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //设置GPIO的15号引脚
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //设置为推挽输出
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //设置GPIO的输出速率为2MHz
    GPIO_Init(GPIOC, &GPIO_InitStructure); //初始化GPIO
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; //设置GPIO的6号引脚
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //设置为上拉输入模式
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //
    GPIO_Init(GPIOC, &GPIO_InitStructure); //
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
 
    
    GPIO_SetBits(GPIOC,GPIO_Pin_15);//开始蜂鸣器
    Delay_s(5);
    GPIO_ResetBits(GPIOC,GPIO_Pin_15);//停止蜂鸣器

    
    while(1)
        
    {
        GPIO_SetBits(GPIOC, GPIO_Pin_14); //点亮LED
    Delay_s(1);
    GPIO_ResetBits(GPIOC, GPIO_Pin_14); //熄灭LED
    Delay_s(1);
    if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==0) //检测按钮是否按下
    {
        s=s+1;
        Delay_s(1);
    }
    else
    {
        t=t+1;
        Delay_s(1);
    }        //计时器
    if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_6)==0) //检测按钮是否按下
    {
    if(s>=5400) //长按5秒以上
      {
        GPIO_SetBits(GPIOC,GPIO_Pin_15); //开始蜂鸣器
        Delay_s(5);
       GPIO_ResetBits(GPIOC,GPIO_Pin_15);//停止蜂鸣器
      }
    }        
    else
      {
    if(t>=300) //短按1秒以上
    {
      GPIO_SetBits(GPIOC,GPIO_Pin_15); //开始蜂鸣器
        Delay_s(5);
        GPIO_ResetBits(GPIOC,GPIO_Pin_15);//停止蜂鸣器
     Delay_s(5);
        s=0;
    t=0;    
    
    }}}}

注意,修改后的代码仅仅适配了硬件连接,可能还需要根据您的具体需求进行进一步的调整和改进。

根据你的需求,给你改了改了一下代码,主要是标准库的应用,这个需要多动手操作,你可以试跑一下

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include "Delay.h"                     // Device header

int s, t;

int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 使能C口时钟

    GPIO_InitTypeDef GPIO_InitStructure;

    // 配置C14引脚作为输出引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    // 配置C15引脚作为输入引脚,带上拉
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    
    while (1)
    {
        // 检测C15引脚的输入状态
        if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15) == 0)  // 按下低电平进入
        {
            s = s + 1;
            Delay_s(1);
        }
        else
        {
            t = t + 1;
            Delay_s(1);
        }

        // 根据条件进行操作
        if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15) == 0)
        {
            if (s >= 5400)
            {
                // 操作C14引脚
                GPIO_SetBits(GPIOC, GPIO_Pin_14);    // 输出高 响
                Delay_s(5);
                GPIO_ResetBits(GPIOC, GPIO_Pin_14);  // 输出低 不响
            }
        }
        else
        {
            if (t >= 300)
            {
                // 操作C14引脚
                GPIO_SetBits(GPIOC, GPIO_Pin_14);       // 输出高 响
                Delay_s(5);
                GPIO_ResetBits(GPIOC, GPIO_Pin_14);     // 输出低 不响
                Delay_s(5);
                s = 0;
                t = 0;
            }
        }
    }
}

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <sys/time.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <netdb.h>

void usage(char *prog) {
    fprintf(stderr, "error: Usage: %s [-m tcp|udp] [-t timeout_sec] [-u timeout_usec] <host> <port>\n", prog);
    exit(-1);
}

int main(int argc, char *argv[]) {

    int sockfd;
    struct sockaddr_in addr;
    struct hostent *host;
    int error = 0;
    int ret;
    socklen_t errlen;
    struct timeval timeout;
    fd_set fdrset, fdwset;
    int mode = 0;
    int c;
    char *cptr;
    long timeout_sec=0, timeout_usec=0;
    int port=0;

    if (argc < 3)  {
        usage(argv[0]);
    }

    while((c = getopt(argc, argv, "m:t:u:")) != -1) {
        switch(c) {
            case 'm':
                if (!strcmp(optarg, "udp"))
                    mode = 1;
                break;
            case 't':
                cptr = NULL;
                timeout_sec = strtol(optarg, &cptr, 10);
                if (cptr == optarg)
                    usage(argv[0]);
                break;
            case 'u':
                cptr = NULL;
                timeout_usec = strtol(optarg, &cptr, 10);
                if (cptr == optarg)
                    usage(argv[0]);
                break;
            default:
                usage(argv[0]);
                break;
        }
    }

    if (mode)
        sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    else
        sockfd = socket(AF_INET, SOCK_STREAM, 0);

    memset(&addr, 0, sizeof(addr));
    if ((host = gethostbyname(argv[optind])) == NULL) {
        exit(-1);
    }

    memcpy(&addr.sin_addr, host->h_addr_list[0], host->h_length);
    addr.sin_family = host->h_addrtype; /* always AF_INET */
    if (argv[optind+1]) {
        cptr = NULL;
        port = strtol(argv[optind+1], &cptr, 10);
        if (cptr == argv[optind+1])
            usage(argv[0]);
    } else {
        usage(argv[0]);
    }
    addr.sin_port = htons(port);

    fcntl(sockfd, F_SETFL, O_NONBLOCK);
    if ((ret = connect(sockfd, (struct sockaddr *)&addr, sizeof(addr))) != 0) {
        if (errno != EINPROGRESS) {
            return (-1);
        }

        FD_ZERO(&fdrset);
        FD_SET(sockfd, &fdrset);
        fdwset = fdrset;

        timeout.tv_sec = timeout_sec + timeout_usec / 1000000;
        timeout.tv_usec = timeout_usec % 1000000;

        if ((ret = select(sockfd+1, &fdrset, &fdwset, NULL, timeout.tv_sec+timeout.tv_usec > 0 ? &timeout : NULL)) == 0) {
            /* timeout */
            close(sockfd);
            return(2);
        }
        if (FD_ISSET(sockfd, &fdrset) || FD_ISSET(sockfd, &fdwset)) {
            errlen = sizeof(error);
            if ((ret=getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &error, &errlen)) != 0) {
                /* getsockopt error */
                close(sockfd);
                return(-1);
            }
            if (error != 0) {
                close(sockfd);
                return(1);
            }
        } else {
            exit(-1);
        }
    }
    /* OK, connection established */
    close(sockfd);
    return 0;
}


程序做了修改,不知道能否满足需求:

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include "Delay.h"                  // Device header
 
 
 
int s,t;//¶¨ÒåsΪ¾Ã×ø¼ÆÊýÖµ£¬
 
int main(void)
    
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //¿ªÆôʱÖÓ
 
    
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14; //ÉèÖÃGPIOµÄ5ºÅÒý½Å
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÉèÖÃÎªÍÆÍìÊä³ö
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //ÉèÖÃGPIOµÄÊä³öËÙ¶ÈΪ50MHz
    GPIO_Init(GPIOC, &GPIO_InitStructure); //³õʼ»¯GPIO
//·äÃùÆ÷Çý¶¯´úÂë
 
 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15; //ÉèÖÃGPIOµÄ6ºÅÒý½Å
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //ÉèÖÃΪÉÏÀ­ÊäÈëģʽ
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; //
    GPIO_Init(GPIOC, &GPIO_InitStructure); //
 
 
    //RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
 
    //GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    //GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    //GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    //GPIO_Init(GPIOC, &GPIO_InitStructure);
 
    
   // GPIO_SetBits(GPIOC,GPIO_Pin_5);//¿ªÊ¼¹©µç
   // Delay_s(5);
    //GPIO_ResetBits(GPIOC,GPIO_Pin_5);//Í£Ö¹¹©µç
    //¿ª»ú·äÃùÆ÷
    
  
    while(1)
        
    {
        
        if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15)==0)
        {
            s=s+1;
            Delay_s(1);
        }
        else
        {
            t=t+1;
            Delay_s(1);
        }        //¼ÆÊ±Ä£¿é
        if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15)==0)
        {
            if(s>=5400)
            {
                GPIO_SetBits(GPIOC,GPIO_Pin_14);
                Delay_s(5);
                GPIO_ResetBits(GPIOC,GPIO_Pin_14);//Í£Ö¹¹©µç
            }
        }        
        else
        {
            if(t>=300)
            {
                GPIO_SetBits(GPIOC,GPIO_Pin_14);
                Delay_s(5);
                GPIO_ResetBits(GPIOC,GPIO_Pin_14);//Í£Ö¹¹©µç
                Delay_s(5);
                s=0;
                t=0;    
            
            }
        }
    }
}

答案参考ChatGPT Plus版,整理汇总。希望能帮助你解决问题
当检测端口为C15,蜂鸣器为C14时,你可以根据需要修改代码中相应的引脚定义和初始化。下面是修改后的代码示例:

#include "stm32f10x.h"                  // Device header
#include <stdio.h>
#include "Delay.h"                  // Device header

int s, t; // 定义s为计数变量

int main(void)
{
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); // 使能时钟

    GPIO_InitTypeDef GPIO_InitStructure;

    // 配置C14引脚作为输出引脚
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    // 配置C15引脚作为输入引脚,带上拉
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    // 循环进行检测和操作
    while (1)
    {
        // 检测C15引脚的输入状态
        if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15) == 0)
        {
            s = s + 1;
            Delay_s(1);
        }
        else
        {
            t = t + 1;
            Delay_s(1);
        }

        // 根据条件进行操作
        if (GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15) == 0)
        {
            if (s >= 5400)
            {
                // 操作C14引脚
                GPIO_SetBits(GPIOC, GPIO_Pin_14);
                Delay_s(5);
                GPIO_ResetBits(GPIOC, GPIO_Pin_14);
            }
        }
        else
        {
            if (t >= 300)
            {
                // 操作C14引脚
                GPIO_SetBits(GPIOC, GPIO_Pin_14);
                Delay_s(5);
                GPIO_ResetBits(GPIOC, GPIO_Pin_14);
                Delay_s(5);
                s = 0;
                t = 0;
            }
        }
    }
}

根据你的需求,将检测端口修改为C15,蜂鸣器修改为C14,并对引脚的初始化进行了相应的修改。请注意在修改代码后,确保相关的引脚连接和硬件配置正确。

该回答引用ChatGPT4与博主@晓码自在合作编写:

根据您的要求,主要需要修改GPIO口和蜂鸣器连接的端口。

改动如下:

c
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //开启GPIOC时钟  

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_15;     //选择GPIOC的15引脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;   //设置为上拉输入
GPIO_Init(GPIOC, &GPIO_InitStructure);        //GPIOC初始化  

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;     //选择GPIOC的14引脚(蜂鸣器)   
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //设为推挽输出
GPIO_Init(GPIOC, &GPIO_InitStructure);          //GPIOC初始化  

if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_15)==0)   //检测GPIOC15是否为低电平
{ 
//蜂鸣器鸣叫代码
GPIO_SetBits(GPIOC,GPIO_Pin_14);   //GPIOC14拉高,蜂鸣器鸣叫
Delay_s(t);                          //延时t
GPIO_ResetBits(GPIOC,GPIO_Pin_14);   //GPIOC14拉低,蜂鸣器停止鸣叫   
}

主要修改的地方有:

  1. GPIO_Pin_5改为GPIO_Pin_15,选择GPIOC的15引脚作为输入检测口。
  2. GPIO_Pin_13改为GPIO_Pin_14,选择GPIOC的14引脚用于驱动蜂鸣器。
  3. 相应的GPIO初始化函数的引脚也改为15和14。
  4. GPIO_ReadInputDataBit()函数检测的引脚改为GPIO_Pin_15。
  5. GPIO_SetBits()和GPIO_ResetBits()函数控制的引脚改为GPIO_Pin_14。

通过以上改动,程序实现检测GPIOC的15引脚输入,并控制GPIOC的14引脚输出来驱动蜂鸣器。