基于stm32的c语言程序设计,基于stm32的电子密码锁设计 main.c 代码奉上,做课设的直接用...

电子密码锁设计

**功能:支持3~20位的密码设置,初始密码为123456;若要重设密码,需先输入正确密码开锁。

** 正常显示情况下,按下确认键上锁;按下密码键,开始输入密码。

**接线:PE[0..3]----4*4键盘的行线,均用中断方式,上拉输入,下降沿触发

** PE[4..7]----4*4键盘的列线,下拉输入,在中断内临时改为上拉输入,用于读键值

** PD[0..7]----LCD12864 D0~D7

** PD[13..15]--LCD12864 RS,RW,E

** PA.1 连接继电器,低电平时合上,高电平时断开相当于开锁与上锁

*****************************************************************************/

#include "stm32f10x.h"

#include "LCD12864.h"

extern __IO uint16_t keyval;

extern __IO uint16_t keyflag;

uint16_t password[21]={1,2,3,4,5,6,'$'}; //初始密码为

123456

uint16_t passwordtmp[21];

#define OPEN_DOOR GPIOA->BRR = GPIO_Pin_1

#define CLOSE_DOOR GPIOA->BSRR = GPIO_Pin_1

//数组中存放各个备份数据寄存器基于BKP基地址的偏移地址,用于存储密码

uint16_t BKPDataReg[21] =

{

BKP_DR2, BKP_DR3, BKP_DR4, BKP_DR5, BKP_DR6, BKP_DR7, BKP_DR8,

BKP_DR9,

BKP_DR10, BKP_DR11, BKP_DR12, BKP_DR13, BKP_DR14,

BKP_DR15,BKP_DR16,BKP_DR17,

BKP_DR18, BKP_DR19, BKP_DR20, BKP_DR21, BKP_DR22

};

void WritePasswordToBackupReg(uint16_t

passwordarray[])

{

uint32_t index = 0;

PWR_BackupAccessCmd(ENABLE);

BKP_ClearFlag();

for (index = 0; passwordarray[index]!='$';

index++)

{ //偏移地址 和 数据

BKP_WriteBackupRegister(BKPDataReg[index],

passwordarray[index]);

}

BKP_WriteBackupRegister(BKPDataReg[index], passwordarray[index]);

//写入密码结尾符

}

void Load_Password(void)

{

uint32_t index = 0;

for(index = 0; BKP_ReadBackupRegister(BKPDataReg[index])!='$';

index++)

{

password[index]=BKP_ReadBackupRegister(BKPDataReg[index]);

}

password[index]='$';

}

void RCC_Configuration()

{

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB

| RCC_APB2Periph_GPIOC|\

RCC_APB2Periph_GPIOD |

RCC_APB2Periph_GPIOE,ENABLE);//使能所有GPIO的时钟

}

//GPIO配置函数

void GPIO_Configuration(void)

{

GPIO_InitTypeDef

GPIO_InitStructure;//定义GPIO的模式设置结构体变量

// PA1 接继电器 模拟开锁功能

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode =

GPIO_Mode_Out_OD;

GPIO_Init(GPIOA, &GPIO_InitStructure);

CLOSE_DOOR; // 初始锁上

}

// 矩阵键盘接口配置

void KeyBoard_Config(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

// 行线上拉输入

GPIO_InitStructure.GPIO_Pin = 0x000f;

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值