电赛菜鸟营培训(一)——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);
        }
  }
}
posted @ 2015-04-11 10:36  Blue Mountain  阅读(2171)  评论(0编辑  收藏  举报