东北大学嵌入式课程设计报告.docx

上传人:b****6 文档编号:7791660 上传时间:2023-01-26 格式:DOCX 页数:22 大小:768.57KB
下载 相关 举报
东北大学嵌入式课程设计报告.docx_第1页
第1页 / 共22页
东北大学嵌入式课程设计报告.docx_第2页
第2页 / 共22页
东北大学嵌入式课程设计报告.docx_第3页
第3页 / 共22页
东北大学嵌入式课程设计报告.docx_第4页
第4页 / 共22页
东北大学嵌入式课程设计报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

东北大学嵌入式课程设计报告.docx

《东北大学嵌入式课程设计报告.docx》由会员分享,可在线阅读,更多相关《东北大学嵌入式课程设计报告.docx(22页珍藏版)》请在冰豆网上搜索。

东北大学嵌入式课程设计报告.docx

东北大学嵌入式课程设计报告

 

嵌入式系统课程设计报告

 

姓名:

张阳

学号:

20082723

班级:

电子0803

 

摘要

嵌入式系统应用广泛,涉及通信、网络消费电子产品、医疗仪器、汽车电子、工业控制、仪器仪表、航天军事等各个行业和领域。

通信领域大量使用嵌入式系统,主要包括程控交换机,路由器,IP交换机,传输设备等。

在消费电子产品领域,随着技术的发展,消费电子产品正向数字化和网络化方向发展。

在医疗仪器,汽车电子,工业控制,仪器仪表等领域,随着医疗卫生,汽车,工业等各部门对智能控制需求的不断增长,需要对设备进行智能化,数字化改造,位嵌入式系统提供了很大的市场。

就汽车电子系统而言,目前的大多数高档轿车每两拥有约50个嵌入式微处理器。

嵌入式系统在应用数量上已经远远超过了各种通用计算机。

可以说嵌入式产品“无处不在”。

本次课程设计,使用基于华邦W90P710处理器的实验教学系统设计了一个电子密码锁。

 

关键字:

华邦W90P710微处理器、UART、USI、FLASH、LCD,键盘

 

1.绪论…………………………………………………………………………………………4

1.1课程设计的目的………………………………………………………………………4

1.2课程设计的要求………………………………………………………………………4

1.3课程设计的任务………………………………………………………………………4

1.4课程设计的意义………………………………………………………………………4

2.应用试验箱开发电子密码锁系统……………………………………………5

2.1电子密码锁系统概述…………………………………………………………………5

2.2题目意义………………………………………………………………………………5

2.2.1系统的主要功能……………………………………………………………………5

2.2.2密码锁系统功能框图………………………………………………………………7

2.2.3LCD液晶显示模块…………………………………………………………………7

2.3软件设计流程及主要函数描述………………………………………………………8

2.3.1程序流程图…………………………………………………………………………8

2.3.2主要函数……………………………………………………………………………11

3.程序设计中遇见的问题及解决的方法………………………………………………12

4.课程设计体会………………………………………………………………………………12

5.参考文献……………………………………………………………………………………13

 

1.绪论

1.1课程设计目的

(1)通过设计加深对书本知识的理解;

(2)增强实践动手能力;

(3)培养综合设计能力。

1.2课程设计要求

(1)根据教师布置的题目自行选题;

(2)根据实验板提供的功能,自行设计功能模块,画出硬件原理图;

(3)画出软件流程图;

(4)采用C语言进行编程;

(5)编写完整的软件程序;

(6)调试、修改、完善;

(7)写出课程设计报告。

1.3课程设计任务

用华邦W90P710开发板实现电子密码锁。

要求:

1、设置密码:

从键盘输入任意6位数字作为密码,将这六位数字经过USI总线存储到Flash芯片中,设置密码完成。

2、通过密码登陆系统:

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

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

1.4课程设计的意义

本次实训,在实验指导书中已经给出一些实例程序,其中包括已有实验程序:

(1)启动代码程序;

(2)流水灯程序;

(3)键盘程序;

(4)外部中断程序;

(5)定时计数器程序;

(6)串口通信程序;

(7)实时时钟程序;

(8)USI程序;

(9)LCD显示程序;

通过对已有程序的理解,之后进行修改拼凑,在由华邦W90P710为核心器件的硬件系统上实现了具有一定功能的系统。

通过设计,熟悉了ARM开发系统,及开发流程,并深入了解了嵌入式系统的实际应用,能更深地理解课堂上所学的内容,使得单调的理论知识与实际联系起来,帮助我们更好的理解。

2.应用实验箱开发电子密码锁系统

2.1电子密码锁系统概述

2.2题目意义

生活中,安全一直都是人们关心的话题。

随着人们生活水平的提高,如何实现家庭防盗这一问题也变的尤其的突出,传统的机械锁由于其构造的简单,被撬的事件屡见不鲜,电子锁由于其保密性高,使用灵活性好,安全系数高,受到了广大用户的亲呢。

本次课程设计,我实现一款电子密码锁,既简单又适用。

2.2.1系统的主要功能

本系统的基本功能就是密码锁,如果用户是第一次使用则提示其先设定密码,要求输入两次以确认。

成功设定密码后将密码通过USI写到FLASH中保存,并写入密码已设定的标志。

如果用户不是是第一次使用则提示其输入密码,系统将比对设定好的密码及用户输入的密码,如果密码正确,则屏幕显示“密码正确”;若不正确则提示错误,同时LED闪烁,若连续三次错误,系统就自动锁定。

2.1.3创新特点

本设计添加了退格键,以便用户输入错误密码时可以退格清除。

在设定密码阶段加上了重输密码以确认的功能,防止用户不小心设定了错误的密码。

界面和操作更友好,更人性化。

2.2硬件电路设计及描述

2.2.1实验箱硬件电路及原理框图

 

 

2.2.2密码锁系统功能框图

 

系统各个功能模块的概述:

1)嵌入式处理器模块:

此模块为本系统的重心,是程序运行的载体,同时这个模块也是我们这次课程设计的运行平台,我们所做的便是通过编写程序应用其自身的外设和资源。

2)按键输入模块:

通过键盘调实现密码输入。

3)LCD模块:

密码锁界面显示。

2.2.3LCD液晶显示模块

LCD控制器的主要目的是用于将video/OSD的原始图像数据显示到外部显示设备。

它支持一般的小包RGB和小包YUV格式的原始数据,并且能够连接到一般的TFTLCD,STNLCD和电视编码器。

可以支持LG的TFT屏,CASIO的TFT屏,以及STNLCD,支持VIDEO和OSD模式,这两种模式的设定有不同的寄存器控制,通过设定寄存器的设置可以实现不同的模式及功能。

W90P710试验板,使用的是AUO3.0"TFTA030DL01(960x240,8位数据总线)数字式TFT液晶屏,可以将video/OSD的原始图像数据显示到外部显示设备。

TFT液晶屏的显示是对屏上每个像素点进行操作,通过向这些像素点配置不同的值,以显示不同的颜色,由于其内部没有缓存,所要显示的数据要随着时钟脉冲一点一点的传送过来。

因此,它需要在中开辟出一片缓冲区,将要显示的数据先存放到的缓冲区中,即存在SDRAM中,一般按照一维数组的形式进行存储,然后把存储数据的SDRAM的地址送给FIFO,然后送给颜色生成器,进而实现在屏幕上的显示;如果在屏上的定位显示,算出所要显示的内容在屏幕上的位置,然后在相应的SDRAM的地址内存入要显示的数据即可。

硬件图如下:

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

模块可以选择并行或串行方式与微控制器相连,通过配置寄存器、送入指令和数据,可对显示方式和显示内容作出选择。

 

2.3软件设计流程及主要函数描述

2.3.1程序流程图

主函数流程图:

 

 

LED工作流程

 

 

LED工作的代码:

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

{

EBILedSet(0xF0);

Delay(1000000);

EBILedSet(0x0f);

Delay(1000000);

}

if(++ti==3)

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

{

EBILedSet(0xFF);

Delay(1000000)

EBILedSet(0x81);

Delay(1000000);

}

2.3.2主要函数

intmain(void)

{

LCD_IMAGE_TLCD_Size;

LCD_LOCATION_TLCD_Location;

LCD_Size.width=480;

LCD_Size.height=240;

LCD_Location.StartX=0;

LCD_Location.StartY=0;

LCD_Location.EndX=960;

LCD_Location.EndY=240;

LCDInit();//LCD初始化

LCDShow(LCD_Size,LCD_Location);

LCDFIFOBufferSet(gImage_login);//装入背景图片

LCDDisplayOn();//开显示

KPIInit();//键盘初始化

EBILedInit();//LED初始化

USIInit();//USI初始化

//USIRead_ID();

USIRead(0x0,2,pswSign);//从FLASH中读取0x0开始的

//两个“已设定密码”标志

if(pswSign[0]==0x00&&pswSign[1]==0x01)setFlg=1;

//如果两位分别是0x20,0x09则表示已经设定好密码,置setFlg为1

if(!

setFlg)setPsw();//如果未设定密码,则先调用设定密码函数

USIRead(0x10,6,psw2);//从FLASH中读取6位密码

inpPsw();//调用输入密码函数

return0;

}

 

3.调试设计中遇见的问题及解决的方法

首先我实现了密码锁最基本的功能:

设置密码,输入正确密码允许进入,输入错误密码禁止进入,三次错误后密码锁锁定,以及相应的屏幕文字显示和LED灯相应变化。

接下来我打算扩展密码锁的功能:

(1)当输入密码正确时显示图片。

(2)操作密码锁是可以作为电子相册。

1)问题:

把多个工程的相关文件组合成一个工程时出现编译错误。

解决方法:

分析各变量、函数所依赖的头文件,把缺失的加入到工程,把相同的定义去除。

2)问题:

LCD无法显示汉字和显示图片失真。

解决方法:

在调试运行时把汉字字库文件加载到内存即可显示汉字。

把图片转换成字模时色彩选择“真彩”,字模数组大小为960*240。

4.课程设计体会

在大学时候的第一次在书本之外,自己设计实现的小系统让我初步的了解嵌入式的前景。

这次小系统设计让我体会了一种学习方式,那就是实践和书本上的理论很不同,却又紧密相关,激发了我积极参与到实践中的热情,收获了实践的经验。

5.参考文献

[1]张石,佘黎煌等.嵌入式系统技术教程.北京:

人民邮电出版社,2009.3

[2]嵌入式实验指导书

程序的主要代码:

MAIN.C

intmain(void)

{

U8np=0,ti=0,i;

U8pswSign[2],setFlg=0,reFlg=0;

U8psw[6],psw2[6];

U8ast[]="********************";

U8prmpt1[]="请设定密码:

";

U8prmpt2[]="请重输确认:

";

U8prmpt3[]="两次密码不符!

请重新输入:

";

U8prmpt4[]="密码设定成功!

";

U8prmpt5[]="请输入密码:

";

U8prmpt6[]="密码错误!

请重新输入:

";

U8prmpt7[]="密码正确!

";

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

";

LCD_IMAGE_TLCD_Size;

LCD_LOCATION_TLCD_Location;

LCDShowParameterLSP,LSP0,LSP1,LSP2,LSP3,LSP4,LSP5,LSP6,LSP7,LSP8

LCD_Size.width=480;

LCD_Size.height=240;

LCD_Location.StartX=0;

LCD_Location.StartY=0;

LCD_Location.EndX=960;

LCD_Location.EndY=240;

LSP.StartX=12;

LSP.StartY=4;

LSP.LibPlace=0x400000;

LSP.Color=0x0;

LSP.LetterChar=ast;

LSP.LCDBuffer=BlackBoard;

LSP0.StartX=12;

LSP0.StartY=4;

LSP0.LibPlace=0x400000;

LSP0.Color=0x07ff;

LSP0.LetterChar=ast;

LSP0.LCDBuffer=BlackBoard;

LSP1.StartX=5;

LSP1.StartY=4;

LSP1.LibPlace=0x400000;

LSP1.Color=0x07ff;

LSP1.LetterChar=prmpt1;

LSP1.LCDBuffer=BlackBoard;

LSP2.StartX=5;

LSP2.StartY=6;

LSP2.LibPlace=0x400000;

LSP2.Color=0x07ff;

LSP2.LetterChar=prmpt2;

LSP2.LCDBuffer=BlackBoard;

LSP3.StartX=8;

LSP3.StartY=8;

LSP3.LibPlace=0x400000;

LSP3.Color=0x07ff;

LSP3.LetterChar=prmpt3;

LSP3.LCDBuffer=BlackBoard;

LSP4.StartX=8;

LSP4.StartY=8;

LSP4.LibPlace=0x400000;

LSP4.Color=0x07ff;

LSP4.LetterChar=prmpt4;

LSP4.LCDBuffer=BlackBoard;

LSP5.StartX=5;

LSP5.StartY=4;

LSP5.LibPlace=0x400000;

LSP5.Color=0x07ff;

LSP5.LetterChar=prmpt5;

LSP5.LCDBuffer=BlackBoard;

LSP6.StartX=8;

LSP6.StartY=8;

LSP6.LibPlace=0x400000;

LSP6.Color=0x07ff;

LSP6.LetterChar=prmpt6;

LSP6.LCDBuffer=BlackBoard;

LSP7.StartX=8;

LSP7.StartY=8;

LSP7.LibPlace=0x400000;

LSP7.Color=0x07ff;

LSP7.LetterChar=prmpt7;

LSP7.LCDBuffer=BlackBoard;

LSP8.StartX=4;

LSP8.StartY=8;

LSP8.LibPlace=0x400000;

LSP8.Color=0x07ff;

LSP8.LetterChar=prmpt8;

LSP8.LCDBuffer=BlackBoard;

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

USIInit();

USIRead_ID();

USIRead(0x0,2,pswSign);

if(pswSign[0]==0x20&&pswSign[1]==0x07)setFlg=1;

LCDInit();

LCDShow(LCD_Size,LCD_Location);

LCDFIFOBufferSet(BlackBoard);

LCDDisplayOn();

KPIInit();

EBILedInit();

EBILedSet(0x00);

if(!

setFlg)

{

LCDOutputShow(LSP1,6);

LCDOutputShow(LSP2,6);

}

while(!

setFlg)

{

if(keyFlg)

{

keyFlg=0;

if(keyValue==0x0e)

{

if(np==6)

{

if(reFlg)

{

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

if(psw[i]!

=psw2[i])break;

if(i<6)

{

LCDOutputShow(LSP3,13);

np=0;

reFlg=0;

LSP0.StartX=12;

LSP0.StartY=4;

LSP.StartX=12;

LSP.StartY=6;

LCDOutputShow(LSP,6);

LSP.StartY=4;

LCDOutputShow(LSP,6);

}

else

{

LSP.StartX=5;

LSP.StartY=4;

LCDOutputShow(LSP,14);

LSP.StartX=5;

LSP.StartY=6;

LCDOutputShow(LSP,14);

LSP.StartX=8;

LSP.StartY=8;

LCDOutputShow(LSP,14);

LCDOutputShow(LSP4,7);

Delay(1000000);

USIWriteEnable();

while(USICheckBusy());

USISectorErease(0x10);

USIWriteEnable();

USIWrite(0x10,6,psw);

Delay(100000);

pswSign[0]=0x20;

pswSign[1]=0x07;

USIWriteEnable();

USIWrite(0x0,2,pswSign);

Delay(100000);

setFlg=1;

}

}

else

{

np=0;

reFlg=1;

LSP0.StartX=12;

LSP0.StartY=6;

LSP.StartY=6;

}

}

}

elseif(keyValue==0x0f)

{

if(np>0)

{

np--;

LSP0.StartX--;

LSP.StartX=LSP0.StartX;

LCDOutputShow(LSP,1);

}

}

else

{

if(np==6)continue;

if(reFlg)psw2[np++]=keyValue;

elsepsw[np++]=keyValue;

LCDOutputShow(LSP0,1);

LSP0.StartX++;

}

}

}

USIRead(0x10,6,psw2);

LSP.StartX=8;

LSP.StartY=8;

LCDOutputShow(LSP,14);

LCDOutputShow(LSP5,6);

np=0;

LSP0.StartX=12;

LSP0.StartY=4;

LSP.StartY=4;

while

(1)

{

if(keyFlg)

{

keyFlg=0;

if(keyValue==0x0e)

{

if(np==6)

{

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

if(psw[i]!

=psw2[i])break;

if(i<6)

{

LCDOutputShow(LSP6,11);

np=0;

LSP0.StartX=12;

LSP0.StartY=4;

LSP.StartX=12;

LSP.StartY=4;

LCDOutputShow(LSP,6);

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

{

EBILedSet(0xF0);

Delay(1000000);

EBILedSet(0x0f);

Delay(1000000);

if(++ti==3)

{

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

{

EBILedSet(0xFF);

Delay(1000000);

EBILedS

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

当前位置:首页 > 人文社科 > 广告传媒

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

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