基于STMFX的LCD显示的电子密码锁.docx
文本预览下载声明
基于STM32F10X的LCD显示电子密码锁鄂州职业大学 电子电气工程学院 柴进摘要 本文详细介绍了一种基于单片机电子密码锁的设计方案。描述了电子密码锁的总体结构、主要功能及工作原理等内容。传统的机械锁由于安全性能太差,被撬的事件屡见不鲜,相比之下,电子密码锁因其保密性强,灵活性好,安全系数高,受到了广大用户的欢迎。电子密码锁作为一种新型的锁,省去了传统机械锁的钥匙,使用者只要记得其密码,便可以开启,从而提高了防盗功能,本文主要设计了一种以STM32F103ZET6为核心的电子密码锁,详细的介绍了该电子密码锁完整的设计过程以及外围的开锁电路。主要程序:主函数///////////////////////////////////////////////****************电子密码锁*****************/鄂州职业大学 电子电气工程学院 柴进//key0,key1,key2,key3作为按键输入 1,2,3,4//改密码,长按key0进入改密码,依次输入4位密码后,长按key1确认//支持错误重新输入,不需要复位,只有正确输入密码后,才能改密码//存在flash里面的初始密码为 1234 //led0(蓝色)灯正常闪烁(200ms),提示系统在运行//led0闪烁频率加(100ms),密码错误, led1(红色)灯正常闪烁(200ms),提示密码正确//2015.1.29 建立工程 写出基本模型 不能硬件修改密码 只能软件修改//2015.1.31 加入支持硬件修改密码 但是不能保存密码 掉电后会消失//2015.2.6 加入EEPROM(AT24C02) 支持保存密码 基本完成 //2015.2.7 加入welcome显示函数//2015.2.14 用STM32内部flash模拟EEPROM 取代原有的 AT24c02 加入LCD外围彩色流水灯 和计数器 (通用定时器3)//2015.2.15 修复密码判断的bug 取消welcome显示函数//2015.2.17 加入输入密码限时功能 四位密码 必须在5s内进行输入(通用定时器2) 否则超时 清除所输入的密码 //为了改密的方便 成功进入改密码后 输入新的密码不限时//利用STM芯片都有唯一的12位地址码id 进行加密算法#include sys.h#include usart.h#include delay.h#include led.h#include key.h#include tim.h#include beep.h#include lcd.h#include fontupd.h#include text.h#include code.h#include stm32flash.h// #include at24cxx.h // #include iic.hvar_obj var;//结构体类型u8 id_num[12];//存放芯片型号的idu8 only_id[]={52,255,215,5,50,75,49,55,55,130,2,87,};//芯片唯一ID 十进制//#define flash_addr 0//存放的起始地址 必须大于代码数据长度//u8 t=0,num=0,lcd_x=0,i=0,flag=0,gaimi_flag=0,num1=0;int main(void){u8 i=0,ji1=0;//判断id时所用到的变量 Stm32_Clock_Init(9);//系统时钟设置delay_init(72); //延时初始化 beep_init();//蜂鸣器初始化led_init();//led初始化key_init();//key初始化LCD_Init();//lcd初始化uart_init(72,9600);//72m,9600波特率while(ji1!=12)//判断id是否相同{for(i=0;i12;i++){id_num[i]=*(u8 *)(0x1FFFF7E8+i); //将存储ID地址的数据读出来//printf(%d,,id_num[i]);if(only_id[i]==id_num[i]) //ID匹配{ji1++;}else {while(1)//只要有一位不同 就死循环{LED1=!LED1;delay_ms(200);}}}}tim2_init_cnt(7199,9);//1mstim3_init_cnt(7199,499);//50ms// tim4_init_cnt(7199,599);while(font_init()); //检查字库 POINT_COLOR=RED;Show_Str(40,90,200,16,欢迎使用 电子密码锁,16,0);S
显示全部