电赛菜鸟营培训(一)——STM32F103CB之LED控制

时间:2023-03-10 06:41:37
电赛菜鸟营培训(一)——STM32F103CB之LED控制

一、STM32F103C8 引脚分布

电赛菜鸟营培训(一)——STM32F103CB之LED控制

二、LED的共阴、共阳接法

电赛菜鸟营培训(一)——STM32F103CB之LED控制

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

电赛菜鸟营培训(一)——STM32F103CB之LED控制

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

三、消除按钮的机械振动

1、键的特性

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

2、去抖动的方法

电赛菜鸟营培训(一)——STM32F103CB之LED控制

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

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

四、按钮控制灯

1、一对一

电赛菜鸟营培训(一)——STM32F103CB之LED控制

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

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

电赛菜鸟营培训(一)——STM32F103CB之LED控制

让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);
}
}
}