标题: STM32 GPIO口实验 每按一下开关,两个LED灯的亮灭状态翻 [打印本页]

作者: lxflxy    时间: 2020-6-13 20:23
标题: STM32 GPIO口实验 每按一下开关,两个LED灯的亮灭状态翻
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


   设计电路,在GPIOC口,分别接有一个开关K1和两个指示灯LED1和LED2。两个灯一亮一灭,每按一下开关,两个灯的亮灭状态翻。
1.    main.c
#include "stm32f10x.h"
#include "led.h"
#include "key.h"
#include "sys.h"
int main(void)
{
   u8  kcnt=0;
   SystemInit();
    LED_Init();
    KEY_Init();
   
  while (1)
  {
      if(S1_DOWN)
          {
              delay_nms(10);
                  if(S1_DOWN)
                  {
                     while(S1_DOWN);
                     kcnt++;
                     }
                         if(kcnt%2==0)
                         {  
                                LED1_ON;
                                LED2_OFF;
                       
                         }
                         if(kcnt%2==1)
                         {   
                                LED1_OFF;
                                LED2_ON;
                       
                         }
                        
       }                                 
  }
}

2.    led.h
#ifndef __LED__H

#define __LED__H

#include "stm32f10x.h"

#include "sys.h"

#define LED1_ON GPIO_SetBits(GPIOC,GPIO_Pin_5)
#define LED1_OFF GPIO_ResetBits(GPIOC,GPIO_Pin_5)
#define LED2_ON GPIO_SetBits(GPIOC,GPIO_Pin_6)
#define LED2_OFF GPIO_ResetBits(GPIOC,GPIO_Pin_6)
void LED_Init(void);
void delay_nms(u16 time);
#endif

3.    key.h
#ifndef __KEY_H_
#define __KEY_H_

#include "stm32f10x.h"
#include "sys.h"
#define S1_DOWN GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)==0
#define S1_UP GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_10)==1
void KEY_Init(void);
#endif

4.    led.c
#include "stm32f10x.h"
#include "led.h"
void LED_Init(void)
{
     GPIO_InitTypeDef GPIO_InitStructure;
     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
     GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6;
     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|GPIO_Pin_6);
}
void delay_nms(u16 time)
{
   u16 i=0;
   while(time--)
   {
      i=12000;
      while(i--);
   }
}

5.key.c
#include "stm32f10x.h"
#include "key.h"
#include "delay.h"

void KEY_Init(void)
{
     GPIO_InitTypeDef  GPIO_InitStructure;
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_15;
     GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;
     GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
     GPIO_Init(GPIOB,&GPIO_InitStructure);
     //GPIO_SetBits(GPIOB,GPIO_Pin_15);
}

51hei.png (81.17 KB, 下载次数: 42)

51hei.png

51hei.png (6.34 KB, 下载次数: 46)

51hei.png

实验.7z

696.75 KB, 下载次数: 26, 下载积分: 黑币 -5






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1