嵌入式课程设计报告-电子密码锁xWord下载.docx

上传人:聆听****声音 文档编号:3728020 上传时间:2023-05-02 格式:DOCX 页数:28 大小:504.45KB
下载 相关 举报
嵌入式课程设计报告-电子密码锁xWord下载.docx_第1页
第1页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第2页
第2页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第3页
第3页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第4页
第4页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第5页
第5页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第6页
第6页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第7页
第7页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第8页
第8页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第9页
第9页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第10页
第10页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第11页
第11页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第12页
第12页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第13页
第13页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第14页
第14页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第15页
第15页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第16页
第16页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第17页
第17页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第18页
第18页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第19页
第19页 / 共28页
嵌入式课程设计报告-电子密码锁xWord下载.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

嵌入式课程设计报告-电子密码锁xWord下载.docx

《嵌入式课程设计报告-电子密码锁xWord下载.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计报告-电子密码锁xWord下载.docx(28页珍藏版)》请在冰点文库上搜索。

嵌入式课程设计报告-电子密码锁xWord下载.docx

(2)从键盘输入密码,比较键盘输入的密码与Flash中存储的密码是否相同。

(3)如果密码正确,则LED灯点亮;

如果密码不正确,则LED灯闪烁,而且如果连续三次输入密码错误则系统锁定,不允许再次输入密码。

扩展功能:

(1)首先显示“请输入密码:

”,显示密码锁背景图片1。

(2)如果密码正确则显示“密码正确”,显示成功进入系统的背景图片2。

(3)如果密码不正确则显示“密码不正确,请重新输入:

(4)如果连续三次输入密码错误则显示“对不起,您已经连续三次输入密码错误,系统锁定”,显示图片1。

3、个人开发流程

(1)了解开发板的硬件结构编写适应其硬件结构的程序。

(2)掌握并编写LCD显示文本和图片程序。

(3)通过EBI对外部LED灯进行控制。

(4)键盘键值读取,及密码锁密码比对,密码锁状态转换的程序编写。

2、硬件设计及描述

1、LED灯模块

CPU的数据总线低8位连接到锁存器74HC273的信号输入端,CPU外部总线接口(EBI)的nECS0片选信号连接到锁存器的锁存控制信号,当CPU 访问

BANK0的任一地址空间是,数据总线的低八位的数据被锁存输出,作为控制8个LED等的发光状态的控制信号,当写入0xff是,8个LED灯都灭,写0x00,8个LED灯都亮。

硬件连接图如下。

2、KPI工作模块

行列式键盘以矩阵形式排列,每个键有一常开触点,其两端分别于输出扫描线和输入状态线相连,键盘中有无键按下,是由列线扫描输出、读入行线状态来判断。

每个键都有一个键值和键号,通常将行、列按二进制顺序组合成酱汁,经过查表获得键号。

硬件连接图如下

3、LCD工作模块

该模块由40个引脚与外界电路相连,由于本身没有寄存器,需要W90P710提供的LCD控制寄存器来控制选择对应的液晶类型及显示形式,FIFO的使用,颜色的显示模式和时序的设置,并通过配置相应的寄存器就可实现。

4、软件设计及描述

1、KPI模块设计

实验中的GPIO为键盘模式,使用的是GPIO_CFG2,查找相应的寄存器进行

设置,打开键盘中断,设定中断触发方式和优先级,扫描功能打开,时间约为

100ms。

2、LCD显示模块

初始化呢控制寄存器,设定lcd控制器和中断服务程序,并写到AIC中断向量表中。

关闭FIFO1和FIFO0,关闭绿的控制器,重置控制器,再讲显示的数据发送到缓存区中,根据时序的配置,从缓冲区中将数据读入液晶。

3、整体模块设计及程序流程图

在主程序中进行按键初始化,在中断程序中实现,按键值的读取和存储,通过设定状态标志位,数组。

对存储的密码和输入的密码进行比较,判断对错从而改变状态标志位,在中短结束,回到主程序后通过识别状态标志位,显示相应的图形和文字。

5、程序代码(主要程序,函数部分见附录)

1、main.c#include<

stdio.h>

#include"

710defs.h"

/*头文件声明*/#include"

HB_it.h"

main.h"

#include"

lcd_pattern.h"

externU8a[6];

externintp;

externU32KeyValue;

intmain(void)

{

U32FLL;

intcnt,i;

U8wchar[]="

设置密码"

;

U8wchar1[]="

请输密码"

U8wchar2[]="

密码正确"

U8wchar3[]="

密码错误"

U8wchar4[]="

对不起,您已经连续三次输入密码错误,系统锁定"

LCD_IMAGE_TLCD_Size;

/*声明结构体,结构体的具体定义在头文LCD_LOCATION_TLCD_Location;

件中*/

LCDShowParameterLSP;

LCD_Size.width=480;

/*定义lcd的显示的长宽像素值*/LCD_Size.height=240;

LCD_Location.StartX=0;

/*设定显示的起始坐标*/LCD_Location.StartY=0;

LCD_Location.EndX=960;

LCD_Location.EndY=240;

便显示*/

LCDInit();

/*初始化*/

LCDShow(LCD_Size,LCD_Location);

LCDFIFOBufferSet(BlackBoard);

/*将要显示的图片存入缓存中,以LCDDisplayOn();

/*显示图片*/

KPIInit();

/*按键初始化*/

printf("

Pleasepresskeys.\n"

);

/*并通过串口输出此时的键值*/USIInit();

//读器件ID /*初始化flash芯片*/

读器件ID:

"

USIRead_ID();

//擦除扇区0

写使能:

\n"

USIWriteEnable();

while(USICheckBusy());

USISectorErease(0x0);

EBILedInit(0x0);

LSP.StartX=8;

LSP.StartY=7;

LSP.LibPlace=0x400000;

LSP.Color=0x07ff;

LSP.LetterChar=wchar1;

LSP.LCDBuffer=BlackBoard;

LCDOutputShow(LSP,4);

EBILedSet(0x00);

while

(1)

if(p==6)

LCDInit();

LCDFIFOBufferSet(BlackBoard);

LCDDisplayOn();

LSP.StartX=8;

LSP.LetterChar=wchar1;

/*正确密码*/LSP.LCDBuffer=BlackBoard;

Delay(10000000);

}

if(p==1)

{LCDInit();

LSP.StartX=5;

LSP.StartY=5;

LSP.LetterChar=wchar2;

LCDOutputShow(LSP,22);

if(p==2)

{LCDInit();

LSP.LetterChar=wchar3;

/*密码错误*/LSP.LCDBuffer=BlackBoard;

if(p==3)

LSP.LetterChar=wchar4;

/*请输密码*/LSP.LCDBuffer=BlackBoard;

return0;

2、中断服务程序

voidKPI_Handler(void)

// U32KeyValue,tmp;

intcnt,sum=0;

//intshuru;

//inti;

tmp=REG_KPISTATUS;

//取按键值

tmp&

=0x0000000f;

//因为硬件连接关系,需要对按键进行处理if((tmp>

0x7)&

&

(tmp<

0xC))

KeyValue=tmp-4;

elseif((tmp>

0x3)&

0x8))

KeyValue=tmp+4;

else



KeyValue=tmp;

KPIinterrupts.%x\n"

KeyValue);

if(c<

6)

{a[c]=KeyValue;

} /*将设置的密码放在数组中*/elseif(c==6)

USIWriteEnable();

USIWrite(0x00,a);

/*将设置的密码放在flash芯片中存储中*/printf("

Succeed\n"

/*将设置密码结束,更新状态位*/Delay(100);

P=6;

elseif(c>

6&

c<

13)

b[c-7]=KeyValue;

/*输入密码*/

elseif(c==13)

USIRead(0x0,a);

/*将输入密码放入在flash芯片中存储呢

*/

for(cnt=0;

cnt<

6;

cnt++)

if(a[cnt]==b[cnt])/*比对密码*/

sum++;

if(sum==6)

测试成功 %d\n"

sum);

/*密码正确状态位为1*/

p=1;

测试失败 %d\n"

p=2;

13&

20)

b[c-14]=KeyValue;

/*继续读取密码*/

elseif(c==20)/*继续比对密码*/

for(cnt=0;

if(a[cnt]==b[cnt])sum++;

p=3;

20&

27)

b[c-21]=KeyValue;

elseif(c==27)/*第三次比对*/

p=4;

else/*这之后程序不再允许进行输入*/

invalidoperations\n"

c++;

六、实验结果截图

(1)密码锁初始状态,显示设置密码,显示图片1。

(2)设置密码后显示,输入密码。

(3)当连续输入错误的密码,系统显示密码错误,并且锁定系统。

(4)当输入密码正确时,显示图片2。

七、课程设计体会

经过这次课程设计,我对arm芯片有了更深入的理解,同时在操作

W90P710这款芯片开发板的过程中提高了动手能力。

掌握了ADS集成开发环境及JTAG仿真器的使用。

通过实践,不断更改调试程序的过程中,我对理论学习长得中断源程序的编写、GPIO控制寄存器、中断寄存器的控制、对库函数的调用有了更好的理解和掌握。

同时也意识到自己的不足,学好汇编和c语言基础是未来面向硬件编程的重要基础,在c语言部分,指针的知识与应用还需加强。

本次课程设计的过程中体现出了arm系列芯片较传统mcu的优势,接口丰富,内部存储资源更充裕。

但是本次课设主要是运用了芯片偏向mcu的功能,并没有在芯片中加载操作系统。

Arm系列的学习才刚刚开始,仅在入门阶段,未来

需要深入继续学习嵌入式知识,使自己的技能更上一层楼。

八、参考文献

[1]张毅坤,陈善久,裘雪红. 单片微型计算机原理及应用.西安电子科技大学出版社.2008年5月

[2]华成英,童诗白. 模拟电子技术基础.高等教育出版社,2007年8

[3]唐俊翟等单片机原理与应用冶金工业出版社,2003.9

[4]刘瑞新等单片机原理及应用教程机械工业出版社,2003.7

[5]吴国经等单片机应用技术中国电力出版社,2004.1

[6]李全利,迟荣强编著单片机原理及接口技术高等教育出版社,2004.1九、附录

/****************************************************************

***************

*FunctionName :

LCDInit

*Description :

LCD初始化

*Input :

None

*Output :

*Return :

****************************************************************

***************/voidLCDInit(void)

REG_GPIO_CFG6=0x555555;

REG_LCD_LCDCON=0x30c05;

REG_LCD_FIFO1PRM=0xa;

REG_LCD_F1DREQCNT=0x1e000f0;

REG_LCD_FIFO1RELACOLCNT=0x1e0;

//LCDCLK

REG_LCD_LCDTCON1=0x3b166;

REG_LCD_LCDTCON2=0x3bf00f1;

REG_LCD_LCDTCON3=0x105401;

REG_LCD_LCDTCON4=0x20101;

REG_LCD_LCDTCON5=0xe;

LCDShow

设置LCD显示位置

***************/

voidLCDShow(LCD_IMAGE_TSize,LCD_LOCATION_TLocation)

REG_LCD_F1DREQCNT=(Size.width<

<

15)+Size.height;

REG_LCD_FIFO1RELACOLCNT=(Size.width>

>

1);

REG_LCD_DISPWINS=(Location.StartY<

16)+Location.StartX;

REG_LCD_DISPWINE=(Location.EndY<

16)+Location.EndX;

LCDFIFOBufferSet

指向LCD缓冲区存取图像内容

数组名称

voidLCDFIFOBufferSet(PUINT8Buffer)

REG_LCD_F1SADDR=(U32)Buffer;

LCDDisplayOn

打开LCD

voidLCDDisplayOn(void)

lcdIoctl(1,1,0);

LCDDisplayOff

关闭LCD

voidLCDDisplayOff(void)

lcdIoctl(1,2,0);

Delay

用于不精确延时

延时时间

***************/voidDelay(U32t)

do

t--;

}while(t);

StringShow

显示单个字符

LCD显示字符相关信息

voidStringShow(LCDShowParameterLCDShowPara)

//用于取汉字点阵图U32Offset=0,Length=0;

U8PBuffer[32]={0};

//用于将汉字点阵图转化为LCD显示图

U32BitCounter=8;

//8U32ByteCounter=0;

//32U32temp;

U8ColorHigh,ColorLow;

//用于在LCD上显示汉字

U32X=0,Y=0,Line=0,Row=0;

U8LBuffer[512]={0};

Offset = ((LCDShowPara.LetterChar[0]-0xa1) * 0x5e +(LCDShowPara.Le

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

当前位置:首页 > 成人教育 > 远程网络教育

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2