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);
            }
      }
    }
  • 相关阅读:
    POJ 2019
    POJ 3368
    POJ 3264
    POJ 2828
    POJ 3481
    结构光相移法-多频外差原理+实践(上篇)
    基于MAP-MRF的视差估计
    重磅直播|计算深度分割技术的实现与全局效应下的结构光三维重建
    用于类别级物体6D姿态和尺寸估计的标准化物体坐标空间
    通过几道CTF题学习Laravel框架
  • 原文地址:https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4417136.html
Copyright © 2011-2022 走看看