嵌入式课程设计-电子词典硬件设计.docx
《嵌入式课程设计-电子词典硬件设计.docx》由会员分享,可在线阅读,更多相关《嵌入式课程设计-电子词典硬件设计.docx(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1上海电力学院上海电力学院嵌入式系统嵌入式系统课程设计报告课程设计报告题目:电子词典的设计姓名:学号:院系:专业年级:同组成员:年月日2一、实验内容及要求一、实验内容及要求在 LCD 屏幕左侧绘制出单词输入框和释义显示框以及一个搜索键,右侧绘制 4*4 键盘按钮,模拟出简易电子词典的功能,按钮操作用触摸屏或键盘实现均可。实现功能:(1)LCD 屏幕上显示 4*4 键盘,显示单词及其翻译、例句。(2)一个键可完成 2 个英文字母的输入,如左上角第一个键可实现输入 a,b 两个字母,第一次按下时为输入 a,如果需输入 b,只需连续快速按键两次即可。(3)在输入完单词后,点击搜索键,即可在释义显示框
2、中显示该单词的词性、中文解释、示例词组和句子等。(4)当发现输入的单词在库中不存在时,可实现将该单词添加入库的操作。二、设计思路二、设计思路(1)通过 LCD 显示模块画出电子词典操作界面。(2)对应界面中各键的位置设置键盘对应键值。(3)设定功能键,实现以下 3 个功能:退格键:删除最后一位字母;搜索保存键:对输入框的单词进行判断,若单词存在于词库中,则显示单词词性、词义、例句;若单词不存在则自动进行保存;转换键:按下后,字母键输出对应的第二个字母。(4)按键后赋值并显示。三、软件构架三、软件构架开始LCD 模块键盘模块结束3四、模块分析四、模块分析(1)键盘模块流程图:源代码:/*File
3、:keyboard.c*Author:embest*Desc:keyboard source code*History:*/*-include files-*/开始键盘初始化键盘是否按下Y读取键值是否是功能键YN执行功能赋值显示结束N4#include 44b.h#include 44blib.h#include def.h#include keyboard.h#include lcd.h#include dict.h#ifndef KEY_INT#define KEY_INT#endif#ifndef BUT_INT#define BUT_INT#endif/*-global variabl
4、es-*/int input_char,n=0;char word20;int wordIndex=0;int x=15;int num=0;int counter=0;/*keyboard control address*/volatile UCHAR*keyboard_base=(UCHAR*)0 x06000000;/*-function declare-*/void init_keyboard();void close_keyboard();void KeyboardInt(void);/_attribute_(interrupt(IRQ);void Eint4567Isr(void)
5、;/_attribute_(interrupt(IRQ);/*-function code-*/*name:Test_Keyboard*func:test keyboard*para:none*ret:none*modify:*comment:*/void Test_Keyboard()5Uart_Printf(n Keyboard Test Examplen);Uart_Printf(n Please press one key on keyboard and look at LED.n);/init keyboardinit_keyboard();while(1);/close keybo
6、ard/close_keyboard();/*name:init_keyboard*func:init keyboard interrupt*para:none*ret:none*modify:*comment:*/extern void isrEINT1(void);extern void isrEint4567(void);void init_keyboard()/*enable interrupt*/rINTMOD=0 x0;rINTCON=0 x1;/*set EINT1 interrupt handler*/rINTMSK=(BIT_GLOBAL|BIT_EINT1|BIT_EINT
7、4567);pISR_EINT1=(int)isrEINT1;pISR_EINT4567=(int)isrEint4567;/*PORT G*/rPCONG=0 xffff;/EINT70rPUPG=0 x0;/pull up enablerEXTINT=rEXTINT|0 x20;/EINT1 falling edge moderI_ISPC=BIT_EINT1|BIT_EINT4567;/clear pending bitrEXTINTPND=0 xf;/clear EXTINTPND reg6/*name:close_keyboard*func:close keyboard interr
8、upt*para:none*ret:none*modify:*comment:*/void close_keyboard()pISR_EINT1=NULL;pISR_EINT4567=NULL;/*Mask interrupt*/rINTMSK=rINTMSK|BIT_EINT1|BIT_EINT4567;/*name:KeyboardInt*func:keyboard interrupt handler function*para:none*ret:none*modify:*comment:*/void KeyboardInt(void)int nTemp,i,j,k,m=0;char bb
9、yte;rI_ISPC=BIT_EINT1;/clear pending bitchar pbyte10;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)case 0:num=1;break;7case 1:num=2;break;case 2:num=3;break;case 3:num=4;break;case 4:num=5;break;case 5:num=6;bre
10、ak;case 6:num=7;break;case 7:num=8;break;case 8:num=9;break;case 9:counter=1;break;case 10:counter=2;break;case 11:counter=3;break;case 12:m=1;Lcd_Draw_HLine(15+n-10,15+n,45,WHITE,16);n-=10;wordwordIndex=0;wordIndex-;break;/*if(n=0)word20=0;8wordIndex=0;Lcd_Draw_HLine(10,310,85,WHITE,160);break;*/ca
11、se 13:wordwordIndex=0;wordIndex=0;for(i=0;i20;i+)if(strcmp(word,vocabi.c)=0)j=0;k=i;break;elsej=1;if(j=0)/#ifdef Eng_vLcd_DspAscII8x16(15,40,BLUE,vocabk.c);Lcd_DspAscII8x16(15,60,BLUE,vocabk.d);Lcd_DspAscII8x16(15,80,BLUE,vocabk.f);/#elseLcd_DspHz16(15,100,BLUE,vocabk.e);/#endifelseLcd_DspHz16(15,12
12、0,BLUE,未找到相应的单词);DelayMs(600);Lcd_DspHz16(15,120,WHITE,未找到相应的单词);break;case 14:wordwordIndex=0;wordIndex=0;for(i=0;ix0)for(i=0;i 20;i+)vocabx.ci=wordi;wordi=0;Lcd_DspAscII8x16(15,40,BLUE,vocabx.c);x+;elsex=15;/Lcd_DspAscII8x16(15,45,BLUE,word);for(i=0;i 20;i+)wordi=0;break;case 15:/Lcd_Draw_Box(10,4
13、0,310,80,GREEN);break;if(num!=0&counter!=0)switch(3*(num-1)+counter-1)10case 0:bbyte=a;break;case 1:bbyte=b;break;case 2:bbyte=c;break;case 3:bbyte=d;break;case 4:bbyte=e;break;case 5:bbyte=f;break;case 6:bbyte=g;break;case 7:bbyte=h;break;case 8:bbyte=i;break;case 9:bbyte=j;break;case 10:bbyte=k;br
14、eak;case 11:bbyte=l;break;case 12:bbyte=m;break;case 13:bbyte=n;break;case 14:bbyte=o;break;11case 15:bbyte=p;break;case 16:bbyte=q;break;case 17:bbyte=r;break;case 18:bbyte=s;break;case 19:bbyte=t;break;case 20:bbyte=u;break;case 21:bbyte=v;break;case 22:bbyte=w;break;case 23:bbyte=x;break;case 24:
15、bbyte=y;break;case 25:bbyte=z;break;case 26:bbyte=y;break;num=0;counter=0;if(m=0)wordwordIndex=bbyte;wordIndex+;/n+=10;12Lcd_DspAscII8x16(15,210,BLUE,word);/Uart_Printf(Key is:%x r,input_char);/*name:key_read*func:read key value*para:none*ret:key value,-1-error*modify:*comment:*/inline int key_read(
16、)int value;char temp;/*read line 1*/temp=*(keyboard_base+0 xfd);/*not 0 xF mean key down*/if(temp&KEY_VALUE_MASK)!=KEY_VALUE_MASK)if(temp&0 x1)=0)value=3;else if(temp&0 x2)=0)value=2;else if(temp&0 x4)=0)value=1;else if(temp&0 x8)=0)value=0;while(temp&KEY_VALUE_MASK)!=KEY_VALUE_MASK)/releasetemp=*(k
17、eyboard_base+0 xfd);return value;/*read line 2*/temp=*(keyboard_base+0 xfb);13/*not 0 xF mean key down*/if(temp&KEY_VALUE_MASK)!=KEY_VALUE_MASK)if(temp&0 x1)=0)value=7;else if(temp&0 x2)=0)value=6;else if(temp&0 x4)=0)value=5;else if(temp&0 x8)=0)value=4;while(temp&KEY_VALUE_MASK)!=KEY_VALUE_MASK)/r
18、eleasetemp=*(keyboard_base+0 xfb);return value;/*read line 3*/temp=*(keyboard_base+0 xf7);/*not 0 xF mean key down*/if(temp&KEY_VALUE_MASK)!=KEY_VALUE_MASK)if(temp&0 x1)=0)value=0 xb;else if(temp&0 x2)=0)value=0 xa;else if(temp&0 x4)=0)value=9;else if(temp&0 x8)=0)value=8;while(temp&KEY_VALUE_MASK)!
19、=KEY_VALUE_MASK)/releasetemp=*(keyboard_base+0 xf7);return value;/*read line 4*/temp=*(keyboard_base+0 xef);/*not 0 xF mean key down*/if(temp&KEY_VALUE_MASK)!=KEY_VALUE_MASK)if(temp&0 x1)=0)value=0 xf;else if(temp&0 x2)=0)value=0 xe;else if(temp&0 x4)=0)14value=0 xd;else if(temp&0 x8)=0)value=0 xc;w
20、hile(temp&KEY_VALUE_MASK)!=KEY_VALUE_MASK)/releasetemp=*(keyboard_base+0 xef);return value;return-1;/*name:Eint4567Isr*func:*para:none*ret:none*modify:*comment:*/void Eint4567Isr(void)unsigned char which_int;Uart_Printf(n SB2 or SB3 had pressed and light LED.);which_int=rEXTINTPND;rEXTINTPND=0 xf;/c
21、lear EXTINTPND reg.rI_ISPC=BIT_EINT4567;/clear pending_bitif(which_int=4)/SB2Led_Display(0 x0);Led_Display(0 x1);else if(which_int=8)/SB3Led_Display(0 x0);Led_Display(0 x2);(2)LCD 模块15流程图:源代码:/*File:lcd.c*Author:embest*Desc:LCD control and display functions*History:*/*-include files-*/#include lcd.h
22、/#include bmp.h#include 44b.h/*-global variables-*/开始LCD 初始化显示开机画面显示操作界面结束16INT32U aLcdActiveBufferLCD_YSIZELCD_XSIZE/4;/*-extern variables-*/extern const INT8U aucTempBitmap76800;/*-function code-*/*name:Lcd_Init()*func:Initialize LCD Controller*para:none*ret:none*modify:*comment:*/void Lcd_Init(vo
23、id)rDITHMODE=0 x12210;rDP1_2=0 xa5a5;rDP4_7=0 xba5da65;rDP3_5=0 xa5a5f;rDP2_3=0 xd6b;rDP5_7=0 xeb7b5ed;rDP3_4=0 x7dbe;rDP4_5=0 x7ebdf;rDP6_7=0 x7fdfbfe;/disable,8B_SNGL_SCAN,WDLY=16clk,WLH=16clk,rLCDCON1=(0 x0)|(25)|(MVAL_USED7)|(0 x38)|(0 x310)|(CLKVAL_COLOR12);/LINEBLANK=10(without any calculation
24、)rLCDCON2=(LINEVAL)|(HOZVAL_COLOR10)|(1021);rLCDCON3=0;/256-color,LCDBANK,LCDBASEUrLCDSADDR1=(0 x322)1);rLCDSADDR2=M5D(unsignedint)aLcdActiveBuffer+(SCR_XSIZE*LCD_YSIZE)1)|(MVAL21);rLCDSADDR3=(LCD_XSIZE/2)|(SCR_XSIZE-LCD_XSIZE)/2)9);/The following value has to be changed for better display.rREDLUT=0
25、 xfdb96420;/1111 1101 1011 1001 0110 0100 0010 0000rGREENLUT=0 xfdb96420;/1111 1101 1011 1001 0110 0100 0010 000017rBLUELUT=0 xfb40;/1111 1011 0100 0000rLCDCON1=(0 x1)|(25)|(MVAL_USED7)|(0 x38)|(0 x310)|(CLKVAL_COLOR12);/rPDATE=rPDATE&0 x0e;rPDATE=0 xfe;Lcd_Clr();/*name:Lcd_Clr()*func:clear LCD scre
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 课程设计 电子词典 硬件 设计
限制150内