《嵌入式课程设计 - 电子词典硬件设计》由会员分享,可在线阅读,更多相关《嵌入式课程设计 - 电子词典硬件设计(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)键盘模块
3、流程图:源代码: /* * * File: 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
4、 #ifndef BUT_INT #define BUT_INT #endif/*- global variables -*/ 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 *)0x06000000;/*- function declare -*/void init_keyboard(); void close_keyboard
5、(); void KeyboardInt(void);/ _attribute_ (interrupt (“IRQ“);void Eint4567Isr(void);/ _attribute_ (interrupt (“IRQ“);/*- function code -*/* * * name:Test_Keyboard * func:test keyboard * para:none * ret:none * modify: * comment: * */ void Test_Keyboard()5 Uart_Printf(“n Keyboard Test Examplen“); Uart_
6、Printf(“n Please press one key on keyboard and look at LED .n“);/ init keyboard init_keyboard(); while(1);/ close keyboard / close_keyboard(); /* * * name:init_keyboard * func:init keyboard interrupt * para:none * ret:none * modify: * comment: * */ extern void isrEINT1(void); extern void isrEint4567
7、(void); void init_keyboard() /* enable interrupt */ rINTMOD = 0x0; rINTCON = 0x1;/* set EINT1 interrupt handler */ rINTMSK =(BIT_GLOBAL|BIT_EINT1|BIT_EINT4567);pISR_EINT1 = (int)isrEINT1;pISR_EINT4567 = (int)isrEint4567;/* PORT G */rPCONG = 0xffff;/ EINT70 rPUPG = 0x0;/ pull up enable rEXTINT = rEXT
8、INT|0x20;/ EINT1 falling edge moderI_ISPC = BIT_EINT1|BIT_EINT4567;/ clear pending bit rEXTINTPND = 0xf;/ clear EXTINTPND reg 6/* * * name:close_keyboard * func:close keyboard interrupt * para:none * ret:none * modify: * comment: * */ void close_keyboard() pISR_EINT1 = NULL; pISR_EINT4567 = NULL; /*
9、 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 bbyte; rI_ISPC = BIT_EINT1;/ clear pending bit char pbyte10; nTemp = k
10、ey_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;break;case 6:num=7;break;case 7:num=8;break;case 8
11、: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;*/ case 13:wordwordIndex=0;wordIndex=0;for(i
12、=0;ix0)for(i = 0; i 22)1); rLCDSADDR2= M5D(unsigned int)aLcdActiveBuffer+(SCR_XSIZE*LCD_YSIZE)1) | (MVAL= usDy GUISWAP(usY1, usY0);y_sign = (usY1 - usY0) / usDy;x_sign = (usX1 - usX0) / usDx;if( usDx = usDy )for( wCurx = usX0, wCury = usY0, wNextx = usX1,wNexty = usY1, decision = (usDx 1);wCurx = usDx )decision -= usDx;wCury += y_sign;wNexty -= y_sign;for( wpy = wCury - usWidth / 2;wpy 1);wCury = usDy )decision -= usDy;wCurx += x_sign;wNextx -= x_sign;22for( wpx = wCurx - u