一、STM32F103C8 引脚分布
二、LED的共阴、共阳接法
这里应该是七段数码管的接法。
限流电阻选择为470,在Multism中仿真,也需要接入,否则会出现闪烁情况。或者直接更改属性。
三、消除按钮的机械振动
1、键的特性
键盘是由若干独立的键组成,键的按下与释放是通过机械触点的闭合与断开来实现的,因机械触点的弹性作用,在闭合与断开的瞬间均有一个抖动过程 。
2、去抖动的方法
(1)硬件去抖动,主要是通过滤波电路。
(2)软件去抖动,延时函数。
四、按钮控制灯
1、一对一
每一个按键的电路是独立的,占用一条数据线 。这种键盘占用硬件资源多,适合少量按键的情况。
2、矩阵时(利用率提高一倍)
让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); } } }