嵌入式系统报告Word格式.docx
- 文档编号:16778436
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:21
- 大小:277.53KB
嵌入式系统报告Word格式.docx
《嵌入式系统报告Word格式.docx》由会员分享,可在线阅读,更多相关《嵌入式系统报告Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
5.参考文献………………………………………………………………………...16
引言
课程设计目的及要求
(1)通过设计加深对书本知识的理解和运用;
(2)增强实践动手能力,熟悉嵌入式系统开发流程;
(3)培养独立解决问题的能力;
(4)严格按照开发流程,首先设计系统的功能,然后画出流程图,最后进行C语言编程,调试。
课程设计任务及意义
设计任务:
1、设置密码:
从键盘输入任意6位数字作为密码,将这七位数字经过USI总线存储到Flash芯片中,设置密码完成。
2、通过密码登陆系统:
(1)、LCD首先显示“请输入密码”从键盘输入密码,比较键盘输入的密码与Flash中存储的密码是否相同。
(2)、如果密码正确,则LED灯点亮,LCD显示“密码正确”,并且开始切换图片,播放音频文件;
如果密码不正确,则LED灯闪烁,LCD显示“密码错误”,而且如果连续三次输入密码错误则系统锁定,不允许再次输入密码,LED等闪烁,LCD显示“系统锁定”并播放警报音乐。
设计意义:
通过对已有程序的理解,之后进行修改拼凑,在由华邦W90P710为核心器件的硬件系统上实现了具有一定功能的系统。
通过设计,熟悉了ARM开发系统模块,及开发流程,并深入了解了嵌入式系统的实际应用,能更深地理解课堂上所学的内容,使得单调的理论知识与实际联系起来,增强动手能力。
嵌入式应用系统设计
题目的意义
在生活中,安全一直是不可忽视的问题。
每个人都有安全设备的需求。
在过去,人们都习惯用机械锁,十分落后,可靠性低。
电子密码锁有使用方便、可靠、安全等诸多优点,相信会逐步取代机械锁,成为人们必不可少的安全产品。
基于以上原因,我选择了电子密码锁作为本次课程设计题目。
系统主要功能
本系统的基本功能就是密码锁,如果用户是第一次使用则提示其先设定密码。
成功设定密码后将密码通过USI写到FLASH中保存,并写入密码已设定的标志。
如果用户不是是第一次使用则提示其输入密码,系统将比对设定好的密码及用户输入的密码,如果密码正确,则屏幕显示“密码正确”和图片,并播放音频;
若不正确则屏幕显示“密码错误,同时LED闪烁;
若连续三次错误,系统就自动锁定并发出警报
系统功能设计
硬件设计
图1系统功能模块框图
系统各个功能模块的概述:
(1)嵌入式处理器模块:
此模块为本系统的重心,是程序运行的载体,同时这个模块也是我们这次课程设计的运行平台,我们所做的便是通过编写程序应用其自身的外设和资源。
在这次课程设计中,我用到了KPI模块,LED、LCD显示模块,FLASH,AC-97音频模块等系统资源。
图2是处理器的资源模块框图
图2W90P710芯片模块
(2)LCD显示模块:
W90P710试验板,使用的是AUO3.0"
TFTA030DL01(960x240,8位数据总线)数字式TFT液晶屏,可以将video/OSD的原始图像数据显示到外部显示设备。
TFT液晶屏的显示是对屏上每个像素点进行操作,通过向这些像素点配置不同的值,以显示不同的颜色,由于其内部没有缓存,所要显示的数据要随着时钟脉冲一点一点的传送过来。
因此,它需要在中开辟出一片缓冲区,将要显示的数据先存放到的缓冲区中,即存在SDRAM中,一般按照一维数组的形式进行存储,然后把存储数据的SDRAM的地址送给FIFO,然后送给颜色生成器,进而实现在屏幕上的显示;
如果在屏上的定位显示,算出所要显示的内容在屏幕上的位置,然后在相应的SDRAM的地址内存入要显示的数据即可。
硬件图如图11-1所示:
图3LCD电路原理图
该模块由40个引脚与外界电路相连,由于本身没有寄存器,需要由W90P710提供的LCD控制寄存器来控制选择对应的液晶类型及显示形式,FIFO的使用、颜色的显示模式和时序的设置,并通过配置相应的的寄存器即可实现。
(3)键盘输入模块:
图4键盘电路原理图
(4)LED显示模块:
图5LED电路原理
软件设计
(1)程序流程框图
主函数中,函数调用了KPI、USI、LCD、AC-97、LED初始化程序。
然后调用键盘中断设定原始密码,通过USI写入FLASH内。
当输入密码时,函数取出FLASH内的原始密码与输入的密码逐一比较。
若密码错误则返回输入密码的界面,同时使LED灯闪烁。
当输入超过三次是,函数就将系统锁定,不再响应键盘中断,并调用AC97中断函数播放警报音乐。
当密码输入正确,调用LCD显示函数切换显示图片,并调用音频中断服务程序播放优美的音乐,LED灯依次点亮,如此循环。
函数中总共调用了键盘中断、AC音频中断、LCD显示中断3个中断服务程序。
程序流程框图如图6所示:
图6程序流程框图
源程序代码
intmain(void)
{//USI寄存器初始化
intcnt,i;
U8wchar1[]="
请输密码"
;
U8wchar2[]="
密码正确"
U8wchar3[]="
密码错误"
U8wchar4[]="
系统锁定"
U8wchar5[]="
请欣赏音乐"
LCD_IMAGE_TLCD_Size;
LCD_LOCATION_TLCD_Location;
LCDShowParameterLSP0,LSP1,LSP2,LSP3,LSP4,LSP5;
LCD_Size.width=480;
LCD_Size.height=240;
LCD_Location.StartX=0;
LCD_Location.StartY=0;
LCD_Location.EndX=960;
LCD_Location.EndY=240;
printf("
***************USI测试程序**********************\n"
);
*************Flash型号W25P10********************\n"
USIInit();
//读器件ID
读器件ID:
"
USIRead_ID();
//擦除扇区0
写使能:
\n"
USIWriteEnable();
while(USICheckBusy());
USISectorErease(0x0);
for(cnt=0;
cnt<
6;
cnt++)
a[cnt]=cnt;
//发送数据初始化
LCDInit();
LCDShow(LCD_Size,LCD_Location);
LCDFIFOBufferSet(BlackBoard);
LCDDisplayOn();
LSP0.StartX=10;
LSP0.StartY=14;
LSP0.LibPlace=0x400000;
LSP0.Color=0x07ff;
LSP0.LetterChar=wchar1;
/*请输密码*/
LSP0.LCDBuffer=BlackBoard;
LSP2.StartX=10;
LSP2.StartY=14;
LSP2.LibPlace=0x400000;
LSP2.Color=0x07ff;
LSP2.LetterChar=wchar3;
/*密码错误**/
LSP2.LCDBuffer=BlackBoard2;
LSP3.StartX=10;
LSP3.StartY=14;
LSP3.LibPlace=0x400000;
LSP3.Color=0x07ff;
LSP3.LetterChar=wchar4;
/*系统锁定*/
LSP3.LCDBuffer=BlackBoard3;
LSP4.StartX=10;
LSP4.StartY=14;
LSP4.LibPlace=0x400000;
LSP4.Color=0x07ff;
LSP4.LetterChar=wchar2;
LSP4.LCDBuffer=BlackBoard4;
/*密码正确*/
LSP5.StartX=10;
LSP5.StartY=14;
LSP5.LibPlace=0x400000;
LSP5.Color=0x07ff;
LSP5.LetterChar=wchar5;
/*请欣赏音乐*/
LSP5.LCDBuffer=BlackBoard5;
LCDOutputShow(LSP0,4);
KPIInit();
Pleasepresskeys.\n"
while
(1)
{
if(p==1)
for(i=0;
i<
2;
i++)
{
EBILedInit(0x80);
Delay(0x100000);
EBILedInit(0x40);
EBILedInit(0x20);
EBILedInit(0x10);
EBILedInit(0x08);
Delay(0x10000);
EBILedInit(0x04);
EBILedInit(0x02);
EBILedInit(0x01);
}
LCDFIFOBufferSet(BlackBoard4);
LCDOutputShow(LSP4,4);
Delay(10000000);
LCDFIFOBufferSet(BlackBoard5);
LCDOutputShow(LSP5,5);
/*播放音乐*/
PCM_QUEUE_LEN=sizeof(PlayData);
_uPcmQHead=0;
/*设置I/O连接到音频*/
REG_GPIO_CFG0=0x155;
/*//GPIO4,1:
输入GPIO0,2,3:
输出*/
REG_GPIO_DIR0=0xd;
/*使能音频时钟*/
REG_CLKSEL=REG_CLKSEL|0x10000;
Initac97();
/*使能AC97播放中断*/
REG_AIC_SCR6=0x41;
REG_AIC_MECR=0x40;
SetPlayVolume(30,30);
StartPlay(8000);
/*检查是否播放完成*/
if(_uPcmQHead>
=(PCM_QUEUE_LEN-4096))
break;
}
StopPlay();
if(p==2)
LCDOutputShow(LSP2,4);
for(i=0;
5;
EBILedInit(0x0F);
EBILedInit(0xF0);
if(p==3)
LCDOutputShow(LSP3,4);
10;
i++)
{
Delay(1000000);
/*播放警报音乐*/
PCM_QUEUE_LEN=sizeof(PlayData1);
return0;
(3)键盘中断服务程序代码:
voidKPI_Handler(void)
{
U8KeyValue,tmp;
intcnt,sum=0;
tmp=REG_KPISTATUS;
//取按键值
tmp&
=0x0000000f;
//因为硬件连接关系,需要对按键进行处理
if((tmp>
0x7)&
&
(tmp<
0xC))
KeyValue=tmp-4;
elseif((tmp>
0x3)&
0x8))
KeyValue=tmp+4;
else
KeyValue=tmp;
shuru=KeyValue;
if(c<
7)
{
a[c]=shuru;
if(c==7){
//写数据
USIWrite(0x00,a);
Delay(100);
if((c>
7)&
(c<
15))
b[c-8]=shuru;
if(c==15)
{//读数据并比较
USIRead(0x0,a);
7;
if(a[cnt]==b[cnt])
{
sum++;
}
}
if(sum==7)
printf("
测试成功.....%d\n"
sum);
//EBILedInit(0x01);
p=1;
else
测试失败.....%d\n"
p=2;
//for(i=0;
50;
//{EBILedInit(0x01);
Delay(0x80000);
EBILedInit(0x00);
//}
}
sum=0;
15)&
23))
b[c-16]=shuru;
if(c==23)
if(a[cnt]==b[cnt])
测试成功.....\n"
p=1;
测试失败.....\n"
//}
23)&
31))
b[c-24]=shuru;
if(c==31)
测试失败不能再输入.....\n"
p=3;
KPIinterrupts.%x\n"
KeyValue);
//将按键值发送到控制台
c=c+1;
总结
经过这次课程设计,从方案的确定到模块的划分、功能函数的编程测试、模块测试等结果正确,所有功能正常工作。
总体上来说较好的完成课程设计任务要求。
当然其中也有些许不足,像输入密码的时候LCD显示图片不正常,自己做的警报音乐无法停止播放等。
不过通过这次课程设计学习,让我获益匪浅,增强了我对嵌入式系统开发流程了解。
参考文献
[1]张石,佘黎煌等.嵌入式系统技术教程.北京:
人民邮电出版社,2009.3
[2]谭浩强.C程序设计(第三版).北京:
清华大学出版社,2006.2
[3]李庆城,刘嘉欣.嵌入式系统原理.北京:
北京航空航天大学,2007.7
[4]熊茂华,杨震伦.ARM9嵌入式系统设计与开发应用.北京:
清华大学出版社,2008
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 报告