1. 单片机开发环境
KEIL5——百度网盘链接:点击此处
推荐微信搜索KEIL5下载,下载资源很多,自行搜索下载安装
2. 主要材料清单
STM32F103C8T6最小系统 x 1 | 指纹模块 x 1 |
---|---|
红外遥控收发模块 x 1 | HC-05蓝牙模块 x 1 |
0.96寸OLED屏幕 x 1 | 继电器模块 x 1 |
矩阵键盘 x 1 | 12V-5V降压模块 x 1 |
J-LINK下载器 x 1 | USB-TTL x 1 |
3. 实物图
3.1 控制板实物图
3.2 控制板原理图
原理图PDF源文件:点击此处。
注意:部分管脚可能连接错误,实际管脚连接与代码对应一致。
4. 代码
4.1 主控代码
int main(void)
{
uint8_t i = 0 , error = 0;
char shuzu[5];
Device_Init();//初始化
while (1)
{
if(KeyValueCount()){
if(keyvalue == Enter){//确定键
if(GateLockStates != 3){
for(i = 0;i < 5;i++){
if(PasswordNow[i] != PasswordBase[i]){
error ++;
}
}
if(error == 0 && PasswordLeight == 5){
GateLockStates = 1;//密码正确
memset(PasswordNow,0,5);
}
else{
GateLockStates = 2;//密码错误
memset(PasswordNow,0,5);
error = 0;
}
}
else{
shuzu[0] = PasswordNow[0]+48;
shuzu[1] = PasswordNow[1]+48;
shuzu[2] = PasswordNow[2]+48;
shuzu[3] = PasswordNow[3]+48;
shuzu[4] = PasswordNow[4]+48;
sprintf(TEXT_Buffer,"%c%c%c%c%c",shuzu[0],shuzu[1],shuzu[2],shuzu[3],shuzu[4]);
STMFLASH_Write(FLASH_SAVE_ADDR,(u16*)TEXT_Buffer,5);
STMFLASH_Read(FLASH_SAVE_ADDR,(u16*)datatemp,5);
PasswordBase[0] = datatemp[0]-48;
PasswordBase[1] = datatemp[1]-48;
PasswordBase[2] = datatemp[2]-48;
PasswordBase[3] = datatemp[3]-48;
PasswordBase[4] = datatemp[4]-48;
GateLockStates = 4;
}
}
else if(keyvalue == User){
GateLockStates = 3;//修改密码
}
else if(keyvalue == Delete){//删除键
if(PasswordLeight > 0){
PasswordNow[PasswordLeight] = 0;
PasswordLeight--;
OLED_Clear();
}
}
else if(keyvalue == Clear){//清除键
memset(PasswordNow,0,5);
PasswordLeight = 0;
OLED_Clear();
}
else{
ViewSign = 0;k=0;
PasswordNow[PasswordLeight] = keyvalue;//数字键
PasswordLeight++;
}
}
else if(BTValueCount()){
if(BTReadData == 11){
for(i = 0;i < 5;i++){
if(PasswordNow[i] != PasswordBase[i]){
error ++;
}
}
if(error == 0 && PasswordLeight == 5){
GateLockStates = 1;//密码正确
memset(PasswordNow,0,5);
BTReadData = 99;
}
else{
GateLockStates = 2;//密码错误
memset(PasswordNow,0,5);
error = 0;
BTReadData = 99;
}
}
else if(BTReadData == 12){
if(PasswordLeight > 0){
PasswordNow[PasswordLeight] = 0;
PasswordLeight--;
OLED_Clear();
BTReadData = 99;
}
}
else if(BTReadData == 13){
memset(PasswordNow,0,5);
PasswordLeight = 0;
OLED_Clear();
BTReadData = 99;
}
else{
ViewSign = 0;k=0;
PasswordNow[PasswordLeight] = BTReadData;//数字键
BTReadData = 99;
PasswordLeight++;
}
}
else if(RemoteValueCount()){
if(RemoteValue == 12){
for(i = 0;i < 5;i++){
if(PasswordNow[i] != PasswordBase[i]){
error ++;
}
}
if(error == 0 && PasswordLeight == 5){
GateLockStates = 1;//密码正确
memset(PasswordNow,0,5);
}
else{
GateLockStates = 2;//密码错误
memset(PasswordNow,0,5);
error = 0;
}
}
else if(RemoteValue == 10){
if(PasswordLeight > 0){
PasswordNow[PasswordLeight] = 0;
PasswordLeight--;
OLED_Clear();
}
}
else if(RemoteValue == 11){
memset(PasswordNow,0,5);
PasswordLeight = 0;
OLED_Clear();
}
else{
ViewSign = 0;k=0;
PasswordNow[PasswordLeight] = RemoteValue;//数字键
PasswordLeight++;
}
}
else if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 1){
if(++j >= 100){
if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_8) == 1){
GateLockStates = 1;//密码正确
memset(PasswordNow,0,5);
j = 0;
}
}
}
Oled_Display();//屏幕显示
}
}
4.2 代码烧录
完整代码下载:点击此处
魔术棒配置下载器,点击下载即可。不会下载,自行搜索教程。