登录  | 立即注册

游客您好!登录后享受更多精彩

扫一扫,访问微社区

QQ登录

只需一步,快速开始

开启左侧

[寒假笔记] STM32

[复制链接]
发表于 2023-1-9 14:32:17 | 显示全部楼层 |阅读模式
学习笔记
学习科目: STM32单片机
学习安排: C语言,按键控制LED灯
开始时间: 2023-01-09
结束时间: 2023-01-09
按键控制LED灯代码
1:main.c
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "LED.h"
#include "Key.h"

uint8_t KeyNum;

int main(void)
{
        LED_Init();
        Key_Init();
       
        while (1)
        {
                KeyNum=Key_GetNum();
                if (KeyNum==1)
                {
                        LED1_Turn();
                }       
                if (KeyNum==2)
                {
                        LED2_Turn();
                }               
               
        }
}


2ED.c
#include "stm32f10x.h"                  // Device header

void LED_Init(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
       
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 |GPIO_Pin_2;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA,&GPIO_InitStructure);
       
        GPIO_SetBits(GPIOA,GPIO_Pin_1 |GPIO_Pin_2);
}

void LED1_ON(void)
{
        GPIO_ResetBits(GPIOA,GPIO_Pin_1);
}       

void LED1_OFF(void)
{
        GPIO_SetBits(GPIOA,GPIO_Pin_1);
}       

void LED1_Turn(void)
{
        if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_1)==0)
        {
                GPIO_SetBits(GPIOA,GPIO_Pin_1);
        }       
        else
        {
                GPIO_ResetBits(GPIOA,GPIO_Pin_1);
        }       
}
void LED2_Turn(void)
{
        if (GPIO_ReadOutputDataBit(GPIOA, GPIO_Pin_2)==0)
        {
                GPIO_SetBits(GPIOA,GPIO_Pin_2);
        }       
        else
        {
                GPIO_ResetBits(GPIOA,GPIO_Pin_2);
        }       
}

void LED2_ON(void)
{
        GPIO_ResetBits(GPIOA,GPIO_Pin_2);
}       

void LED2_OFF(void)
{
        GPIO_SetBits(GPIOA,GPIO_Pin_2);
}       


3ED.h
#ifndef __LED_H
#define __LED_H

void LED_Init(void);
void LED1_ON(void);
void LED1_OFF(void);
void LED2_ON(void);
void LED2_OFF(void);
void LED1_Turn(void);
void LED2_Turn(void);
#endif

4:Key.c
#include "stm32f10x.h"                  // Device header
#include "Delay.h"

void Key_Init(void)
{
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
       
        GPIO_InitTypeDef GPIO_InitStructure;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 |GPIO_Pin_11;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOB,&GPIO_InitStructure);               
}

uint8_t Key_GetNum(void)
{
    uint8_t KeyNum = 0;
        if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) ==0)
        {
                Delay_ms(20);
                while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_1) ==0);
                Delay_ms(20);
                KeyNum = 1;
        }
                if (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) ==0)
        {
                Delay_ms(20);
                while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_11) ==0);
                Delay_ms(20);
                KeyNum = 2;
        }       
        return  KeyNum;
}

5:Key.h
#ifndef __KEY_H
#define __KEY_H

void Key_Init(void);
uint8_t Key_GetNum(void);
#endif


74839E8E7446799DA7EFFF2711B5EE9C.jpg
0411721ABECC7103B2CB7B5BED716509.jpg
29860A640BEE021B6B15A086870CD64F.jpg
好懒~~不想说~~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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