zoukankan      html  css  js  c++  java
  • 电赛菜鸟营培训(一)——STM32F103CB之LED控制

    一、STM32F103C8 引脚分布

    image

    二、LED的共阴、共阳接法

    image

             这里应该是七段数码管的接法。

    image

             限流电阻选择为470,在Multism中仿真,也需要接入,否则会出现闪烁情况。或者直接更改属性。

    三、消除按钮的机械振动

    1、键的特性

           键盘是由若干独立的键组成,键的按下与释放是通过机械触点的闭合与断开来实现的,因机械触点的弹性作用,在闭合与断开的瞬间均有一个抖动过程 。

    2、去抖动的方法

    image

    (1)硬件去抖动,主要是通过滤波电路。

    (2)软件去抖动,延时函数。

    四、按钮控制灯

    1、一对一

    image

            每一个按键的电路是独立的,占用一条数据线 。这种键盘占用硬件资源多,适合少量按键的情况。

    2、矩阵时(利用率提高一倍)

    image

            让D0,D1,D2,D3输出为0,

            检测D4—D7有一个为0的时候,再检测D0—D3有一个为0,则确定矩阵中哪一个开关可以使用。

    五、Keil环境下开发代码

    #include "stm32f10x.h"
    
    //最基本的头文件引用
    #include "stm32f10x_gpio.h"
    #include "stm32f10x_rcc.h"
    
    void delay(u32 kk)
    {
      while(kk--);
    }
    
    int main(void)
    {
        u8 led = 0; //led的tag值
        
        //输出端口配置
        GPIO_InitTypeDef GPIO_InitStructure;  //    声明一个结构体,在这里的思路是通过对一个结构体进行设置,然后再进行引入初始化,个人的观点就是作为构造函数的形参
        
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//   首先使这个端口开启
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_1;   //选取管脚          
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;          //选取模式
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;    //设置高低电平的切换速率
        GPIO_Init(GPIOA, &GPIO_InitStructure);           //
        
        //输入端口的配置
        GPIO_InitStructure.GPIO_Pin =GPIO_Pin_0;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
        GPIO_SetBits(GPIOA, GPIO_Pin_0);   //在输入输出这种第一功能下的对位置数的函数方法
        
      while(1)
      {  
            if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 1) //判断是否按下去
            {
                delay(5000);      //延时,消除按下去的抖动
                while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1) == 1);      //为判断松手的死循环
                delay(5000);       //延时,消除松手的抖动 
            //对灯的输出进行异或操作
                led = 1 - led;    
                if(led)
                    GPIO_ResetBits(GPIOA, GPIO_Pin_0);
                else
                    GPIO_SetBits(GPIOA, GPIO_Pin_0);
            }
      }
    }
  • 相关阅读:
    10 种保护 Spring Boot 应用的绝佳方法
    Redis 如何分析慢查询操作?
    Spring Boot 主类及目录结构介绍
    Redis 再牛逼,也得设置密码!!
    Spring Data Redis 详解及实战一文搞定
    Spring Boot Redis Cluster 实战干货
    超详细的 Redis Cluster 官方集群搭建指南
    Redis Linux 安装运行实战全记录
    hdu 4790 Just Random (思路+分类计算+数学)
    poj 1328 Radar Installation(贪心)
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4417136.html
Copyright © 2011-2022 走看看