找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3148|回复: 0
收起左侧

STM32 GPIO口实验 每按一下开关,两个LED灯的亮灭状态翻

[复制链接]
ID:777712 发表于 2020-6-13 20:23 | 显示全部楼层 |阅读模式
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
51hei.png

   设计电路,在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
51hei.png

实验.7z

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

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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