嵌入式课程设计电子词典硬件设计.docx

上传人:b****1 文档编号:13393569 上传时间:2023-06-13 格式:DOCX 页数:46 大小:72.54KB
下载 相关 举报
嵌入式课程设计电子词典硬件设计.docx_第1页
第1页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第2页
第2页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第3页
第3页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第4页
第4页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第5页
第5页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第6页
第6页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第7页
第7页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第8页
第8页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第9页
第9页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第10页
第10页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第11页
第11页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第12页
第12页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第13页
第13页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第14页
第14页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第15页
第15页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第16页
第16页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第17页
第17页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第18页
第18页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第19页
第19页 / 共46页
嵌入式课程设计电子词典硬件设计.docx_第20页
第20页 / 共46页
亲,该文档总共46页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

嵌入式课程设计电子词典硬件设计.docx

《嵌入式课程设计电子词典硬件设计.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计电子词典硬件设计.docx(46页珍藏版)》请在冰点文库上搜索。

嵌入式课程设计电子词典硬件设计.docx

嵌入式课程设计电子词典硬件设计

嵌入式课程设计电子词典硬件设计

 

 

————————————————————————————————作者:

————————————————————————————————日期:

 

上海电力学院

嵌入式系统

课程设计报告

 

题  目:

电子词典的设计

姓名:

学号:

院  系:

  

专业年级:

 

同组成员:

 

年 月 日

一、实验内容及要求

在LCD屏幕左侧绘制出单词输入框和释义显示框以及一个搜索键,右侧绘制4*4键盘按钮,模拟出简易电子词典的功能,按钮操作用触摸屏或键盘实现均可。

实现功能:

(1)LCD屏幕上显示4*4键盘,显示单词及其翻译、例句。

(2)一个键可完成2个英文字母的输入,如左上角第一个键可实现输入a,b两个字母,第一次按下时为输入a,如果需输入b,只需连续快速按键两次即可。

(3)在输入完单词后,点击搜索键,即可在释义显示框中显示该单词的词性、中文解释、示例词组和句子等。

(4)当发现输入的单词在库中不存在时,可实现将该单词添加入库的操作。

二、设计思路

(1)通过LCD显示模块画出电子词典操作界面。

(2)对应界面中各键的位置设置键盘对应键值。

(3)设定功能键,实现以下3个功能:

①退格键:

删除最后一位字母;②搜索∕保存键:

对输入框的单词进行判断,若单词存在于词库中,则显示单词词性、词义、例句;若单词不存在则自动进行保存;③转换键:

按下后,字母键输出对应的第二个字母。

(4)按键后赋值并显示。

三、软件构架

 

四、模块分析

(1)键盘模块

流程图:

 

源代码:

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

*File:

keyboard.c

*Author:

embest

*Desc:

keyboardsourcecode

*History:

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

/*---includefiles---*/

#include"44b.h"

#include"44blib.h"

#include"def.h"

#include"keyboard.h"

#include"lcd.h"

#include"dict.h"

#ifndefKEY_INT

#defineKEY_INT

#endif

#ifndefBUT_INT

#defineBUT_INT

#endif

/*---globalvariables---*/

intinput_char,n=0;

charword[20];

intwordIndex=0;

intx=15;

intnum=0;

intcounter=0;

/*keyboardcontroladdress*/

volatileUCHAR*keyboard_base=(UCHAR*)0x06000000;

/*---functiondeclare---*/

voidinit_keyboard();

voidclose_keyboard();

voidKeyboardInt(void);//__attribute__((interrupt("IRQ")));

voidEint4567Isr(void);//__attribute__((interrupt("IRQ")));

/*---functioncode---*/

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

*name:

Test_Keyboard

*func:

testkeyboard

*para:

none

*ret:

none

*modify:

*comment:

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

voidTest_Keyboard()

{

Uart_Printf("\nKeyboardTestExample\n");

Uart_Printf("\nPleasepressonekeyonkeyboardandlookatLED...\n");

//initkeyboard

init_keyboard();

while

(1);

//closekeyboard

//close_keyboard();

}

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

*name:

init_keyboard

*func:

initkeyboardinterrupt

*para:

none

*ret:

none

*modify:

*comment:

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

externvoidisrEINT1(void);

externvoidisrEint4567(void);

voidinit_keyboard()

{

/*enableinterrupt*/

rINTMOD=0x0;

rINTCON=0x1;

/*setEINT1interrupthandler*/

rINTMSK=~(BIT_GLOBAL|BIT_EINT1|BIT_EINT4567);

pISR_EINT1=(int)isrEINT1;

pISR_EINT4567=(int)isrEint4567;

/*PORTG*/

rPCONG=0xffff;//EINT7~0

rPUPG=0x0;//pullupenable

rEXTINT=rEXTINT|0x20;//EINT1fallingedgemode

rI_ISPC=BIT_EINT1|BIT_EINT4567;//clearpendingbit

rEXTINTPND=0xf;//clearEXTINTPNDreg

}

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

*name:

close_keyboard

*func:

closekeyboardinterrupt

*para:

none

*ret:

none

*modify:

*comment:

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

voidclose_keyboard()

{

pISR_EINT1=NULL;

pISR_EINT4567=NULL;

/*Maskinterrupt*/

rINTMSK=rINTMSK|BIT_EINT1|BIT_EINT4567;

}

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

*name:

KeyboardInt

*func:

keyboardinterrupthandlerfunction

*para:

none

*ret:

none

*modify:

*comment:

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

voidKeyboardInt(void)

{

intnTemp,i,j,k,m=0;

charbbyte;

rI_ISPC=BIT_EINT1;//clearpendingbit

charpbyte[10];

nTemp=key_read();

if(nTemp>-1)

{

//Lcd_Draw_HLine(10,310,80,WHITE,50);

input_char=nTemp;

Lcd_DspAscII8x16(15,45,WHITE,word);

switch(input_char)

{

case0:

num=1;break;

case1:

num=2;break;

case2:

num=3;break;

case3:

num=4;break;

case4:

num=5;break;

case5:

num=6;break;

case6:

num=7;break;

case7:

num=8;break;

case8:

num=9;break;

case9:

counter=1;break;

case10:

counter=2;break;

case11:

counter=3;break;

case12:

m=1;

Lcd_Draw_HLine(15+n-10,15+n,45,WHITE,16);

n-=10;

word[wordIndex]='\0';

wordIndex--;

break;

/*if(n==0)

{

word[20]=0;

wordIndex=0;

Lcd_Draw_HLine(10,310,85,WHITE,160);

}break;*/

case13:

word[wordIndex]='\0';

wordIndex=0;

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

{

if(strcmp(word,vocab[i].c)==0)

{

j=0;

k=i;

break;

}

else

j=1;

}

if(j==0)

{

//#ifdefEng_v

Lcd_DspAscII8x16(15,40,BLUE,vocab[k].c);

Lcd_DspAscII8x16(15,60,BLUE,vocab[k].d);

Lcd_DspAscII8x16(15,80,BLUE,vocab[k].f);

//#else

Lcd_DspHz16(15,100,BLUE,vocab[k].e);

//#endif

}

else

{

Lcd_DspHz16(15,120,BLUE,"未找到相应的单词");

DelayMs(600);

Lcd_DspHz16(15,120,WHITE,"未找到相应的单词");

}

break;

case14:

word[wordIndex]='\0';

wordIndex=0;

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

{

if(strcmp(word,vocab[i].c)==0)

{

j=0;

k=i;

break;

}

else

j=1;

}

if(j==0)

{

//#ifdefEng_v

Lcd_DspAscII8x16(15,40,BLUE,vocab[k].c);

Lcd_DspAscII8x16(15,60,BLUE,vocab[k].d);

Lcd_DspAscII8x16(15,80,BLUE,vocab[k].f);

//#else

Lcd_DspHz16(15,100,BLUE,vocab[k].e);

//#endif

}

else

{

if(20>x>0)

{

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

vocab[x].c[i]=word[i];

word[i]='\0';

Lcd_DspAscII8x16(15,40,BLUE,vocab[x].c);

x++;

}

else

x=15;

//Lcd_DspAscII8x16(15,45,BLUE,word);

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

word[i]='\0';

}

break;

case15:

//Lcd_Draw_Box(10,40,310,80,GREEN);

break;

}

if(num!

=0&&counter!

=0)

{

switch(3*(num-1)+counter-1)

{

case0:

bbyte='a';break;

case1:

bbyte='b';break;

case2:

bbyte='c';break;

case3:

bbyte='d';break;

case4:

bbyte='e';break;

case5:

bbyte='f';break;

case6:

bbyte='g';break;

case7:

bbyte='h';break;

case8:

bbyte='i';break;

case9:

bbyte='j';break;

case10:

bbyte='k';break;

case11:

bbyte='l';break;

case12:

bbyte='m';break;

case13:

bbyte='n';break;

case14:

bbyte='o';break;

case15:

bbyte='p';break;

case16:

bbyte='q';break;

case17:

bbyte='r';break;

case18:

bbyte='s';break;

case19:

bbyte='t';break;

case20:

bbyte='u';break;

case21:

bbyte='v';break;

case22:

bbyte='w';break;

case23:

bbyte='x';break;

case24:

bbyte='y';break;

case25:

bbyte='z';break;

case26:

bbyte='y';break;

}

num=0;counter=0;

if(m==0)

{

word[wordIndex]=bbyte;

wordIndex++;

//n+=10;

}

}

Lcd_DspAscII8x16(15,210,BLUE,word);

//Uart_Printf("Keyis:

%x\r",input_char);

}

}

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

*name:

key_read

*func:

readkeyvalue

*para:

none

*ret:

keyvalue,-1--error

*modify:

*comment:

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

inlineintkey_read()

{

intvalue;

chartemp;

/*readline1*/

temp=*(keyboard_base+0xfd);

/*not0xFmeankeydown*/

if((temp&KEY_VALUE_MASK)!

=KEY_VALUE_MASK)

{

if((temp&0x1)==0)

value=3;

elseif((temp&0x2)==0)

value=2;

elseif((temp&0x4)==0)

value=1;

elseif((temp&0x8)==0)

value=0;

while((temp&KEY_VALUE_MASK)!

=KEY_VALUE_MASK)//release

temp=*(keyboard_base+0xfd);

returnvalue;

}

/*readline2*/

temp=*(keyboard_base+0xfb);

/*not0xFmeankeydown*/

if((temp&KEY_VALUE_MASK)!

=KEY_VALUE_MASK)

{

if((temp&0x1)==0)

value=7;

elseif((temp&0x2)==0)

value=6;

elseif((temp&0x4)==0)

value=5;

elseif((temp&0x8)==0)

value=4;

while((temp&KEY_VALUE_MASK)!

=KEY_VALUE_MASK)//release

temp=*(keyboard_base+0xfb);

returnvalue;

}

/*readline3*/

temp=*(keyboard_base+0xf7);

/*not0xFmeankeydown*/

if((temp&KEY_VALUE_MASK)!

=KEY_VALUE_MASK)

{

if((temp&0x1)==0)

value=0xb;

elseif((temp&0x2)==0)

value=0xa;

elseif((temp&0x4)==0)

value=9;

elseif((temp&0x8)==0)

value=8;

while((temp&KEY_VALUE_MASK)!

=KEY_VALUE_MASK)//release

temp=*(keyboard_base+0xf7);

returnvalue;

}

/*readline4*/

temp=*(keyboard_base+0xef);

/*not0xFmeankeydown*/

if((temp&KEY_VALUE_MASK)!

=KEY_VALUE_MASK)

{

if((temp&0x1)==0)

value=0xf;

elseif((temp&0x2)==0)

value=0xe;

elseif((temp&0x4)==0)

value=0xd;

elseif((temp&0x8)==0)

value=0xc;

while((temp&KEY_VALUE_MASK)!

=KEY_VALUE_MASK)//release

temp=*(keyboard_base+0xef);

returnvalue;

}

return-1;

}

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

*name:

Eint4567Isr

*func:

*para:

none

*ret:

none

*modify:

*comment:

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

voidEint4567Isr(void)

{

unsignedcharwhich_int;

Uart_Printf("\nSB2orSB3hadpressedandlightLED.");

which_int=rEXTINTPND;

rEXTINTPND=0xf;//clearEXTINTPNDreg.

rI_ISPC=BIT_EINT4567;//clearpending_bit

if(which_int==4)//SB2

{

Led_Display(0x0)

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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