ARM嵌入式系统设计与应用技术—密码锁系统设计
- 格式:doc
- 大小:81.90 MB
- 文档页数:10
南京航空航天大学研究生实验报告
项目名称:ARM嵌入式系统设计与应用技术
设计专题:综合实验三类:密码锁系统
班级/任课教师:xxxxxxx
小组成员(第六组)
(1)姓名:学号:学科:
电话:Email:签名:
(2)姓名:学号:学科:电话:Email:签名:
xxx年x月x日
南京航空航天大学研究生实验报告——ARM嵌入式系统设计与嵌入式
一、本实验主要内容
利用FLASH,编写程序实现一个设置密码和解码的密码锁系统。要求如下:
1、采用开发板上的按键和显示模块进行相关控制:
1)Joystick键用来设置“0~9”。向上为增,向下为减,左右为调整输入
对应的位。
2)输入数字过程中,用指示灯LED1-LED4表示输入状态指示灯,即上面
的JOY_UP(LED1)、JOY_DOWN(LED2)、JOY_LEFT(LED3)、
JOY_RIGHT(LED4)。每按一次上面的键,对应的LED就亮一次。
3)按下Key键表示6位数字密码最终确认。
2、设置密码步骤(设置密码需要输入两次)。
1)在没有给FLASH设定密码前,系统处于待设定密码状态。液晶屏幕上
默认显示如下:(居中显示,显示内容也必须一致)
Keywords:0-0-0-0-0-0
Please Set Keywords
2)用Joystick键按照第1点的方式设置密码。将初始密码设置为:
1-2-3-4-5-6。
3)当上面6位密码输入完之后,按下Key键表示确认密码设置完成,此
时将设定的密码写入FLASH存储器(M25PE80),写入确认成功后(读
回写入的数据并比较即为检查成功),清屏,并显示:
Keywords Done
Please Set Keywords again
Keywords:0-0-0-0-0-0
根据提示再次输入6位密码。按Key再次确认输入后,系统将本次输
入的密码与FLASH中第一次设置的密码进行比较,不相同表示密码设
置失败,相同则表示密码设定成功。
密码设定失败后,复位后液晶显示:
The Keywords set unsuccessful
Please Set Keywords:0-0-0-0-0-0
设定密码成功后,注意这边一定要是复位后液晶显示:
The Keywords has set
Please Enter the Keywords:0-0-0-0-0-0 此时进入解码状态。
3、密码锁解码步骤(解码仅需输入一次密码):
1)6位密码输入过程与“设置密码”相同。
2)输入6位解码密码后,按Key确认。此时,系统将读取FLASH中6位
数据进行匹配。如果数据匹配,那么解码成功,此时液晶屏幕以500
毫秒闪烁4次,并显示:
You Success!!
如果数据不匹配,则解码失败,液晶显示:
You Wrong!!
Please Enter the Keywords:0-0-0-0-0-0
在液晶屏合适的位置显示组名、姓名、学号、开发日期等信息。可利用STM32开发板的资源扩展其他自定义功能。
二、硬件框图
1、LED与GPIO硬件连接图
Key 按键GPIO引脚连接图2、Joystick键硬件连接图
3、SPI Flash
4、LCD
三、程序流程图
主程序流程框图(无子程序流程框图)
四、调试和结果分析
1、软件的调试
在此次实验过程中,遇到了许多问题:
(1)调用库函数的时候该添加哪些文件?怎么设置软件查找文件的路径等。通过查询新建工程模板上详细的解释得以解决。但是程序中存在的库函数的.h文件重定义问题,依然没有解决。
(2)实验中LCD上的字符的显示和数字的显示问题?我采用了分别定义数组,分别用不同的函数来显示,至于字符和数字之间的距离,是通过不断的调试最终得出合适的值。
(3)如何用JOYSTICK摇杆键来实现对LCD上数字的加减和移位操作?我采用调用库函数uint8_t Key_Scan(GPIO_TypeDef* GPIOx, u16 GPIO_Pin);然后判断按个按键按下,执行程序中运用数组的操作。比如向上拨动JOYSTICK键:if (Key_Scan(GPIOG, GPIO_Pin_15) == KEY_ON)
{
STM_EV AL_LEDOn(LED1);
delay_ms(20);
STM_EV AL_LEDOff(LED1);
if(code[i]<9)
{code[i]=code[i]+1;}
else
{code[i]=9;}
POINT_COLOR=RED;
LCD_ShowNum(148+(2*i-1)*8,90,code[i],1,16);
}
(4)在此次实验中最大的难点是Key键作为输入密码的确认键用的很频繁,而且每次按下Key键需要执行的程序不一样?我采用标志位的方法实现每次Key按键按下的时候执行不同的程序。
2、实验结果
(1)设定密码成功(“”表示按下Key键)
(2)设定密码不成功(第一次输入:1-2-3-4-5-6,第二次输入:1-1-1-2-2-2)
(3)解码成功(设定密码为1-2-3-4-5-6)
(3)解码不成功(输入密码为1-2-2-1-3-3,再次输入1-2-3-4-5-6,解码成功)