ARM嵌入式系统设计与应用技术—密码锁系统设计

  • 格式:doc
  • 大小:81.90 MB
  • 文档页数:10

下载文档原格式

  / 10
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

南京航空航天大学研究生实验报告

项目名称: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,解码成功)