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

上传人:b****1 文档编号:12752843 上传时间:2023-04-21 格式:DOCX 页数:19 大小:266.91KB
下载 相关 举报
ARM嵌入式系统设计与应用技术密码锁系统设计.docx_第1页
第1页 / 共19页
ARM嵌入式系统设计与应用技术密码锁系统设计.docx_第2页
第2页 / 共19页
ARM嵌入式系统设计与应用技术密码锁系统设计.docx_第3页
第3页 / 共19页
ARM嵌入式系统设计与应用技术密码锁系统设计.docx_第4页
第4页 / 共19页
ARM嵌入式系统设计与应用技术密码锁系统设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

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

《ARM嵌入式系统设计与应用技术密码锁系统设计.docx》由会员分享,可在线阅读,更多相关《ARM嵌入式系统设计与应用技术密码锁系统设计.docx(19页珍藏版)》请在冰豆网上搜索。

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

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

南京航空航天大学

研究生实验报告

项目名称:

ARM嵌入式系统设计与应用技术

设计专题:

综合实验三类:

密码锁系统

班级/任课教师:

xxxxxxx

 

小组成员(第六组)

(1)姓名:

学号:

学科:

电话:

Email:

签名:

(2)姓名:

学号:

学科:

电话:

Email:

签名:

 

xxx年x月x日

一、本实验主要内容

利用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

PleaseSetKeywords

2)用Joystick键按照第1点的方式设置密码。

将初始密码设置为:

1-2-3-4-5-6。

3)当上面6位密码输入完之后,按下Key键表示确认密码设置完成,此时将设定的密码写入FLASH存储器(M25PE80),写入确认成功后(读回写入的数据并比较即为检查成功),清屏,并显示:

KeywordsDone

PleaseSetKeywordsagain

Keywords:

0-0-0-0-0-0

根据提示再次输入6位密码。

按Key再次确认输入后,系统将本次输入的密码与FLASH中第一次设置的密码进行比较,不相同表示密码设置失败,相同则表示密码设定成功。

密码设定失败后,复位后液晶显示:

TheKeywordssetunsuccessful

PleaseSetKeywords:

0-0-0-0-0-0

设定密码成功后,注意这边一定要是复位后液晶显示:

TheKeywordshasset

PleaseEntertheKeywords:

0-0-0-0-0-0

此时进入解码状态。

3、密码锁解码步骤(解码仅需输入一次密码):

1)6位密码输入过程与“设置密码”相同。

2)输入6位解码密码后,按Key确认。

此时,系统将读取FLASH中6位数据进行匹配。

如果数据匹配,那么解码成功,此时液晶屏幕以500毫秒闪烁4次,并显示:

YouSuccess!

!

如果数据不匹配,则解码失败,液晶显示:

YouWrong!

!

PleaseEntertheKeywords:

0-0-0-0-0-0

在液晶屏合适的位置显示组名、姓名、学号、开发日期等信息。

可利用STM32开发板的资源扩展其他自定义功能。

二、硬件框图

1、LED与GPIO硬件连接图

 

Key按键GPIO引脚连接图

 

2、Joystick键硬件连接图

 

3、SPIFlash

 

4、LCD

 

三、程序流程图

 

主程序流程框图(无子程序流程框图)

四、调试和结果分析

1、软件的调试

在此次实验过程中,遇到了许多问题:

(1)调用库函数的时候该添加哪些文件?

怎么设置软件查找文件的路径等。

通过查询新建工程模板上详细的解释得以解决。

但是程序中存在的库函数的.h文件重定义问题,依然没有解决。

(2)实验中LCD上的字符的显示和数字的显示问题?

我采用了分别定义数组,分别用不同的函数来显示,至于字符和数字之间的距离,是通过不断的调试最终得出合适的值。

(3)如何用JOYSTICK摇杆键来实现对LCD上数字的加减和移位操作?

我采用调用库函数uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin);然后判断按个按键按下,执行程序中运用数组的操作。

比如向上拨动JOYSTICK键:

if(Key_Scan(GPIOG,GPIO_Pin_15)==KEY_ON)

{

STM_EVAL_LEDOn(LED1);

delay_ms(20);

STM_EVAL_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,解码成功)

 

五、源程序清单

#include"include.h"

#include"stm32f10x.h"

#include"stm32_eval.h"

#defineKEY_ON0

#defineKEY_OFF1

unsignedcharKeywords1[]="Passwords:

-----";

UnsignedcharKeywords2[]="PleaseSetPasswords";

unsignedcharKeywords3[]="PasswordsDone";

unsignedcharKeywords4[]="PleaseSetPasswordsagain";

unsignedcharKeywords5[]="ThePasswordshasset";

unsignedcharKeywords6[]="PleaseEnterthePasswords";

unsignedcharKeywords7[]="ThePasswordssetunsuccessful";

unsignedcharKeywords8[]="YouSuccess!

!

";

unsignedcharKeywords9[]="YouWrong!

!

";

unsignedcharKeywords10[]="ZhouDiqi";

unsignedcharKeywords11[]="SX1505073/Group6";

unsignedcharKeywords12[]="May9th,2016";

unsignedintcode[6]={0,0,0,0,0,0};

unsignedintGetCode[6];

voidKey_GPIO_Config(void);

uint8_tKey_Scan(GPIO_TypeDef*GPIOx,u16GPIO_Pin);

intmain(void)

{

unsignedintsectorCnt;

staticunsignedinti,k,m,n,cmt,cnt,flag=0;

SystemInit();

delay_init();

uart_init(9600);

STM_EVAL_LEDInit(LED1);

STM_EVAL_LEDInit(LED2);

STM_EVAL_LEDInit(LED3);

STM_EVAL_LEDInit(LED4);

Key_GPIO_Config();

NVIC_Configuration();

LCD_Init();

SPI_FLASH_Init();

sectorCnt=sizeof(code)/SPI_FLASH_SectorSize;

if(sizeof(code)%SPI_FLASH_SectorSize!

=0)

sectorCnt++;

for(n=0;n

{

SPI_FLASH_SectorErase(i*SPI_FLASH_SectorSize);

}

POINT_COLOR=BLUE;

LCD_ShowString(60,70,Keywords2);

LCD_ShowString(60,90,Keywords1);

LCD_ShowString(160,160,Keywords10);

LCD_ShowString(130,180,Keywords11);

LCD_ShowString(140,200,Keywords12);

for(k=0;k<6;k++)

code[k]=0;

for(m=0;m<6;m++)

{

POINT_COLOR=RED;

LCD_ShowNum(148+(2*m-1)*8,90,code[m],1,16);

}

while

(1)

{

if(Key_Scan(GPIOG,GPIO_Pin_13)==KEY_ON){

STM_EVAL_LEDOn(LED4);

delay_ms(20);

STM_EVAL_LEDOff(LED4);

if(i<5)

{i++;}

else

{i=5;}

}

if(Key_Scan(GPIOG,GPIO_Pin_14)==KEY_ON)

{

STM_EVAL_LEDOn(LED3);

delay_ms(20);

STM_EVAL_LEDOff(LED3);

if(i>0)

{i--;}

else

{i=0;}

}

if(Key_Scan(GPIOD,GPIO_Pin_3)==KEY_ON)

{

STM_EVAL_LEDOn(LED2);

delay_ms(20);

STM_EVAL_LEDOff(LED2);

if(code[i]>0)

{code[i]=code[i]-1;}

else

{code[i]=0;}

POINT_COLOR=RED;

LCD_ShowNum(148+(2*i-1)*8,90,code[i],1,16);

}

if(Key_Scan(GPIOG,GPIO_Pin_15)==KEY_ON)//JOY_UPispushed

{

STM_EVAL_LEDOn(LED1);

delay_ms(20);

STM_EVAL_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);

}

if(Key_Scan(GPIOG,GPIO_Pin_8)==KEY_ON)//Keyispushed

{

cnt++;

flag++;

}

if(flag==1)

{

SPI_FLASH_BufferWrite((u8*)code,0,sizeof(code));

LCD_Clear(WHITE);

POINT_COLOR=BLUE;LCD_ShowString(60,70,Keywords3);LCD_ShowString(60,90,Keywords1);LCD_ShowString(40,110,Keywords4);LCD_ShowString(160,160,Keywords10);LCD_ShowString(130,180,Keywords11);LCD_ShowString(140,200,Keywords12);

POINT_COLOR=RED;

for(k=0;k<6;k++)

{

code[k]=0;}

for(m=0;m<6;m++)

{

POINT_COLOR=RED;

LCD_ShowNum(148+(2*m-1)*8,90,code[m],1,16);

}

i=0;

flag=2;

}

if(cnt==2)

{

i=0;

SPI_FLASH_BufferRead((u8*)GetCode,0,sizeof(code));

for(k=0;k<6;k++)

{

if(code[k]==GetCode[k])

{

cmt++;

}

}

if(cmt==6)

{

LCD_Clear(WHITE);

POINT_COLOR=BLUE;

LCD_ShowString(60,50,Keywords5);

LCD_ShowString(60,70,Keywords6);

LCD_ShowString(60,90,Keywords1);

LCD_ShowString(160,160,Keywords10);

LCD_ShowString(130,180,Keywords11);

LCD_ShowString(140,200,Keywords12);

for(k=0;k<6;k++)

code[k]=0;

for(m=0;m<6;m++)

{

POINT_COLOR=RED;

LCD_ShowNum(148+(2*m-1)*8,90,code[m],1,16);

}

cnt=3;

cmt=0;

}

else

{

cnt=0;

cmt=0;

flag=0;

LCD_Clear(WHITE);

POINT_COLOR=BLUE;LCD_ShowString(40,50,Keywords7);LCD_ShowString(60,70,Keywords2);

LCD_ShowString(60,90,Keywords1);

LCD_ShowString(160,160,Keywords10);

LCD_ShowString(130,180,Keywords11);

LCD_ShowString(140,200,Keywords12);

for(k=0;k<6;k++)

code[k]=0;

for(m=0;m<6;m++)

{

POINT_COLOR=RED;LCD_ShowNum(148+(2*m-1)*8,90,code[m],1,16);

}

}

}

if(cnt>=4&&cnt<=9)

{SPI_FLASH_BufferRead((u8*)GetCode,0,sizeof(code));

for(k=0;k<6;k++)

{if(code[k]==GetCode[k])

cmt++;

}

}

if(cmt==6)

{

for(i=0;i<4;i++)

{

LCD_Clear(WHITE);

delay_ms(250);POINT_COLOR=BLUE;

LCD_ShowString(100,90,Keywords8);

LCD_ShowString(160,160,Keywords10);

LCD_ShowString(130,180,Keywords11);

LCD_ShowString(140,200,Keywords12);

delay_ms(250);

}POINT_COLOR=BLUE;LCD_ShowString(100,90,Keywords8);LCD_ShowString(160,160,Keywords10);LCD_ShowString(130,180,Keywords11);

LCD_ShowString(140,200,Keywords12);

cnt=10;

cmt=0;

}

else

{

LCD_Clear(WHITE);

POINT_COLOR=BLUE;

LCD_ShowString(100,50,Keywords9);

LCD_ShowString(60,70,Keywords2);

LCD_ShowString(60,90,Keywords1);

LCD_ShowString(160,160,Keywords10);LCD_ShowString(130,180,Keywords11);

LCD_ShowString(140,200,Keywords12);

i=0;

for(k=0;k<6;k++)

code[k]=0;

for(m=0;m<6;m++)

{

POINT_COLOR=RED;

LCD_ShowNum(148+(2*m-1)*8,90,code[m],1,16);

}

cnt=3;

cmt=0;

}

}

}

}

六、实验分工和安排

自己编写

七、对本实验课程的感想和建议

自己编写

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1