基于STM32F407ZE粤嵌GEC-M4开发板的按键密码系统
该系统分为两个部分: 一是按键密码部分 密码为四位 输入错误则亮灯提示 正确则蜂鸣器提示 然后解锁进入主程序 二是主程序部分 根据四个按键做了不同功能 以便演示和后期改进
直接上代码:
# include "stm32f4xx.h"
void delay(uint32_t s)
{
uint32_t i = 0x500000;
int n;
for(n=0;n<s;n++)
{
while(i--);
}
}
void delay_s(uint32_t s)
{
uint32_t i = 0x50000;
int n;
for(n=0;n<s;n++)
{
while(i--);
}
}
void init_GPIOF_9_10_OUT()
{
GPIO_InitTypeDef GPIOF_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIOF_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIOF_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIOF_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOF_InitStruct.GPIO_OType = GPIO_OType_OD;
GPIOF_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOF,&GPIOF_InitStruct);
}
void init_GPIOE_13_14_OUT()
{
GPIO_InitTypeDef GPIOE_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIOE_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIOE_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIOE_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOE_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOE_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOE,&GPIOE_InitStruct);
}
void init_GPIO_EF_OUT()
{
GPIO_InitTypeDef GPIO_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9 | GPIO_Pin_10;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIOF,&GPIO_InitStruct);
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;
GPIO_Init(GPIOE,&GPIO_InitStruct);
}
void init_BEEP(void)
{
GPIO_InitTypeDef GPIOF_BEEP_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);
GPIOF_BEEP_InitStruct.GPIO_Pin = GPIO_Pin_8;
GPIOF_BEEP_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
GPIOF_BEEP_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIOF_BEEP_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIOF_BEEP_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
GPIO_Init(GPIOF,&GPIOF_BEEP_InitStruct);
}
void init_KEEY(void)
{
GPIO_InitTypeDef GPIO_KEEY_InitStruct;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
GPIO_KEEY_InitStruct.GPIO_Pin = GPIO_Pin_0;
GPIO_KEEY_InitStruct.GPIO_Mode = GPIO_Mode_IN;
GPIO_KEEY_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_KEEY_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_KEEY_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOA,&GPIO_KEEY_InitStruct);
GPIO_KEEY_InitStruct.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4;
GPIO_Init(GPIOE,&GPIO_KEEY_InitStruct);
}
int main(void)
{
int x=5;
init_GPIOF_9_10_OUT();
init_GPIOE_13_14_OUT();
init_BEEP();
init_KEEY();
int y;
int flag=0;
delay(1);
while(1)
{
int buf[4];
uint8_t key0 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
uint8_t key1 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2);
uint8_t key2 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3);
uint8_t key3 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_SetBits(GPIOE,GPIO_Pin_13);
GPIO_SetBits(GPIOE,GPIO_Pin_14);
if( key0 == Bit_RESET)
{
y=0;
flag++;
while(1){GPIO_ResetBits(GPIOF,GPIO_Pin_9);
uint8_t key0 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
if(key0 == Bit_SET)GPIO_SetBits(GPIOF,GPIO_Pin_9);break;}
delay(1);
}
if( key1 == Bit_RESET)
{
y=1;
flag++;
while(1){GPIO_ResetBits(GPIOF,GPIO_Pin_10);
uint8_t key1 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2);
if(key1 == Bit_SET)GPIO_SetBits(GPIOF,GPIO_Pin_10);break;}
delay(1);
}
if( key2 == Bit_RESET)
{
y=2;
flag++;
while(1){GPIO_ResetBits(GPIOE,GPIO_Pin_13);
uint8_t key2 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3);
if(key2 == Bit_SET)GPIO_SetBits(GPIOE,GPIO_Pin_13);break;}
delay(1);
}
if( key3 == Bit_RESET)
{
y=3;
flag++;
while(1){GPIO_ResetBits(GPIOE,GPIO_Pin_14);
uint8_t key3 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);
if(key3 == Bit_SET)GPIO_SetBits(GPIOE,GPIO_Pin_14);break;}
delay(1);
}
if (flag >= 1){buf[flag-1]=y;}
if (flag == 4){
buf[flag-1]=y;flag=0;
if (buf[0]!=3 | buf[1]!=2 | buf[2]!=1 | buf[3]==0){
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
GPIO_ResetBits(GPIOE,GPIO_Pin_13);
GPIO_ResetBits(GPIOE,GPIO_Pin_14);
delay(1);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_SetBits(GPIOE,GPIO_Pin_13);
GPIO_SetBits(GPIOE,GPIO_Pin_14);
}
}
if (buf[0]==3 && buf[1]==2 && buf[2]==1 && buf[3]==0)
{
GPIO_SetBits(GPIOF,GPIO_Pin_9);GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_SetBits(GPIOF,GPIO_Pin_10);GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_SetBits(GPIOE,GPIO_Pin_13);GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_SetBits(GPIOE,GPIO_Pin_14);GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_ResetBits(GPIOF,GPIO_Pin_10);GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_ResetBits(GPIOE,GPIO_Pin_13);GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_ResetBits(GPIOE,GPIO_Pin_14);GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_ResetBits(GPIOE,GPIO_Pin_14);GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_ResetBits(GPIOE,GPIO_Pin_13);GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_ResetBits(GPIOF,GPIO_Pin_10);GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_SetBits(GPIOE,GPIO_Pin_14);GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_SetBits(GPIOE,GPIO_Pin_13);GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_SetBits(GPIOF,GPIO_Pin_10);GPIO_SetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
GPIO_SetBits(GPIOF,GPIO_Pin_9);GPIO_ResetBits(GPIOF,GPIO_Pin_8);
delay_s(1);
break;
}
}
while(1)
{
uint8_t key0 = GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0);
uint8_t key1 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2);
uint8_t key2 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_3);
uint8_t key3 = GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_SetBits(GPIOE,GPIO_Pin_13);
GPIO_SetBits(GPIOE,GPIO_Pin_14);
if( key0 == Bit_RESET)
{
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
GPIO_ResetBits(GPIOE,GPIO_Pin_13);
GPIO_ResetBits(GPIOE,GPIO_Pin_14);
GPIO_SetBits(GPIOF,GPIO_Pin_8);
}
if( key1 == Bit_RESET)
{
GPIO_SetBits(GPIOF,GPIO_Pin_10);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
GPIO_SetBits(GPIOE,GPIO_Pin_14);
GPIO_SetBits(GPIOE,GPIO_Pin_13);
GPIO_ResetBits(GPIOF,GPIO_Pin_8);
}
if( key2 == Bit_RESET)
{
x=1;
while(x--)
{
GPIO_SetBits(GPIOF,GPIO_Pin_9);
delay_s(1);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
delay_s(1);
GPIO_SetBits(GPIOE,GPIO_Pin_13);
delay_s(1);
GPIO_SetBits(GPIOE,GPIO_Pin_14);
delay_s(1);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
delay_s(1);
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
delay_s(1);
GPIO_ResetBits(GPIOE,GPIO_Pin_13);
delay_s(1);
GPIO_ResetBits(GPIOE,GPIO_Pin_14);
delay_s(1);
}
}
if( key3 == Bit_RESET)
{
x=1;
while(x--)
{
GPIO_ResetBits(GPIOE,GPIO_Pin_14);
delay_s(1);
GPIO_ResetBits(GPIOE,GPIO_Pin_13);
delay_s(1);
GPIO_ResetBits(GPIOF,GPIO_Pin_10);
delay_s(1);
GPIO_ResetBits(GPIOF,GPIO_Pin_9);
delay_s(1);
GPIO_SetBits(GPIOE,GPIO_Pin_14);
delay_s(1);
GPIO_SetBits(GPIOE,GPIO_Pin_13);
delay_s(1);
GPIO_SetBits(GPIOF,GPIO_Pin_10);
delay_s(1);
GPIO_SetBits(GPIOF,GPIO_Pin_9);
delay_s(1);
}
}
}
}
|