基于S3C44BOX的电子词典软件设计与实现

合集下载

基于人工智能的智能电子词典设计与实现

基于人工智能的智能电子词典设计与实现

基于人工智能的智能电子词典设计与实现近年来,随着人工智能技术的不断发展和普及,各种人工智能产品的应用不断扩大,其中智能电子词典也由于其便携、实用的特点而越来越受到人们的追捧。

当前市面上的智能电子词典由于其机能其他不尽人意,面对越来越多的用户需求,本文旨在提出一种基于人工智能的智能电子词典设计,并探讨其实现的方法与技术。

一、智能电子词典的需求与市场智能电子词典是一款便携、实用的翻译工具,其具有词汇量大、海量例句、音频口语、手写输入等实用功能,这使得它成为众多学生、翻译人员和旅游者们不可或缺的一部分。

智能电子词典通过固定词汇的基础上,加入了大量的实用功能,并将其装载进一个便于携带的电子设备中,使人们在学习语言过程中更加高效便利。

据统计,智能电子词典在中国市场占据了极高的份额。

其中以英语智能电子词典的销售量最为突出,二者的销售量占了智能电子词典市场销售总量的八成以上。

由此可见,目前市场对智能电子词典品牌的词汇量和机能的要求已经超出了基础翻译需求,而如何提高其便捷性、准确性、人性化和速度,成为了市面上各种智能电子词典所需要解决的问题。

二、智能电子词典的设计原则与实现思路要实现人工智能的智能电子词典,需从以下几个方面考虑:1. 词汇库的构建词汇库是智能电子词典的基础,在构建智能电子词典的时候,可以通过如今人工智能的语言处理技术来进行词汇库的建立。

通过爬虫技术,可以从不同的网站上获取最新的语言数据,并通过人工智能技术筛选出一些更加权威、更有价值的语言材料,来构筑更加完备、丰富的词汇库。

2. 人性化的交互方式智能电子词典必须注重人性化的交互过程,采用用户友好的界面设计,实现人机交互的舒适度和效率。

在语音输入方面,可以通过语音智能识别技术来实现对人声的识别;在手写输入方面,可以通过对人手写需要进行高精度的识别,从而更方便用户进行输入;在感知需求方面,可以通过智能人机交互技术,特别是视觉、触觉和语言交互,使智能电子词典更智能化、更个性化,从而让用户更舒适地使用。

基于S3C44BOX的电子词典软件设计与实现(DOC)

基于S3C44BOX的电子词典软件设计与实现(DOC)

基于S3C44BOX的电子词典软件设计与实现1 概述此次基于ARM7的电子词典系统开发作业,由我们小组4人合作完成,其中我主要负责软件方面的开发,所做的方面有英译汉软件功能的实现,输入值软件识别功能的实现以及看门狗定时器的实现。

由于不怎么熟悉arm的开发,基本是看着书做,设计思路和方法、功能实现也都是书上怎么来,自己就怎么实现,希望傅老师谅解,这块的基础确实薄弱。

2 S3C44BOX处理器介绍2.1 S3C44BOX简介S3C44BOX微处理器片类集成ARM7TDMI核,采用0.25μm CMOS工艺制造,并在ARM7TDMI核的基础上集成了丰富的外围功能模块,便于低成本设计嵌入式系统应用系统。

片上集成的主要功能如下:➢在ARM7TDMI基础上增加至8KB的Cache。

➢外部扩充存储器控制器(FP/EDO/SDRAM控制,片选逻辑)。

➢LCD控制器(最大支持256色的DSTN),并带有一个LCD专用DMA通道。

➢2个通用DMA通道2个带外部请求引脚的DMA通道。

➢2个带有握手协议的UART,1个SIO。

➢1个多主的I2C总线控制器。

➢1个I2S总线控制器。

➢5个PWM定时器及1个内部定时器。

➢看门狗定时器。

➢71个通用可编程I/O口,8个外部中断源。

➢功耗控制模式:正常,低速,休眠和停止。

➢8路10位ADC。

➢具有日历功能的RTC(实时时钟)。

➢PLL时钟发生器。

2.2 S3C44BOX特点2.2.1 S3C44BOX体系结构➢S3C44BOX是基ARM7TDMI体系结构的SOC。

➢集成了手持设备和通用嵌入式系统应用的解决方案;➢16/32位RISC体系结构和ARM7TDMI处理器内核强大的指令体系;➢Thumb代码压缩机,最大化代码密度同时保持了32位指令的性能;➢基于JTAG的片上集成ICE调试支持解决方案;➢32×8位硬件乘法器;➢实现低功耗SAMBA II(三星ARM处理器嵌入式微控制器总线体系结构)的新型总线结构。

电子词典系统的设计与实现5.0

电子词典系统的设计与实现5.0
1.1 前言......................................................................................................................................... 1 1.2 设计目的................................................................................................................................. 1 1.3 相关技术................................................................................................................................. 1
第三章 数据库设计..................................................................................................... 16
3.1 数据库系统设计................................................................................................................... 16 3.2 电子词典系统数据表结构................................................................................................... 16

电子词典设计与实现

电子词典设计与实现

电子词典设计与实现
电子词典的设计与实现可以分为以下几个步骤:
1.需求分析:根据用户需求确定电子词典的功能和特性,例如支持多
种语言、提供联想、显示单词释义、提供例句等。

2.数据收集:收集词典所需的词汇数据,可以通过有关的词典书籍、
在线词典API或者其他途径获取。

3.数据处理:对收集到的词汇数据进行处理和整理,包括建立索引、
分词等操作,以便于后续的查询和展示。

4.用户界面设计:设计电子词典的用户界面,包括框、按钮、显示结
果的区域等元素,要求界面简洁、直观,方便用户使用。

5.查询功能实现:根据用户输入的关键词,在词汇数据中进行查询,
找到对应的词条和释义,并将结果展示给用户。

6.功能扩展:根据需求,可以添加一些附加功能,如联想、生词本管理、发音播放等。

7. 测试与调试:对设计与实现的电子词典进行测试,确保词典的功
能正常运行,没有bug和错误。

8.上线部署:将电子词典部署到服务器或者移动设备上,供用户使用。

9. 后续维护与更新:随着用户使用的反馈和需求变化,持续对电子
词典进行维护和更新,修复bug,添加新功能,提升用户体验。

以上是电子词典设计与实现的一般步骤,具体实现过程可能还会有其
他细节和技术选择,根据具体需求和技术条件进行调整。

电子词典系统设计实验报告

电子词典系统设计实验报告

电子词典系统设计实验报告12121583 曹连强周四6-8一、项目要求:1、在实验板上设计实现一个无操作系统的简易电子词典2、设计友好的人机交互界面3、:字符输入、功能选择、英汉翻译。

二、电子词典系统实现具体功能:1.能够通过键盘输入英文。

键盘作为本系统中最主要的输入设备,需要完成26个英文字母的输入,并且需要上翻页,下翻页,上一行,下一行,翻译,退格等功能。

要求键盘至少要有16个按键,每个按键都可以被处理器及时,准确地读入。

2.提供友好的人机界面,将输入的内容和翻译的结果显示在LCD的相应区域内。

3. 对输入的单词即时翻译。

4.可以记忆3个已经查询过的的单词。

在无操作系统的电子词典系统中,由于是单任务环境,因此此时系统的各个功能模块均按照顺序执行。

初始化后,即进入翻译待机状态,等待用户的输入操作。

当用户输入操作发生后,系统调用键盘或触摸屏中断进行键值读取,将键值传给主函数中的系统功能实现模块,该模块按不同的输入键值进行相应的功能选择,最后将此次操作的结果输出到LCD上。

三、程序设计可将电子词典的软件设计分为如下几个主要模块:键值处理、翻译、词库设计和LCD 显示。

1、键值处理电子词典的输入设备为键盘和触摸屏,要完成的功能为:(1)键盘:10个英文字母和6个功能键输入(2)触摸屏:6各功能键的输入2、翻译:3、词库设计翻译功能中通过将输入单词和词库中相应的单词进行比较得到要显示的翻译结果,因此,词库可采用结构体实现,此结构中包括4项:英文单词、词性、汉语释意、英文例句。

4、LCD显示功能翻页、选行及翻页结果的输出都可以归到LCD显示功能中,这些功能都可以通过调用LCD 实验中的相关函数完成。

四.设计程序////////////////////////////////////////////////////////////#include "Ts_sep.h"#include <string.h>///////////////////////////////////////////////////////////#include "def.h"#include "2410lib.h"#include "option.h"#include "2410addr.h"#include "interrupt.h"#include "lcdlib.h"//#define STN_LCD#define TFT_8_0/////////////////8888888////////////////////////////#define LOOP 1#define ADCPRS 39#define TS_JUSTIFY_LEFTTOP 1#define TS_JUSTIFY_RIGHTBOT 2#define TS_START 3///////////////////8888888888888888//////////////////////void Lcd_Disp_Char(void);void Lcd_Disp_Grap(void);void Frame(void);//设置背景框架void Clearscreen(void);//清屏//void Key_init(void);//初始化键盘void Cursor(int flag);void CursorCl(int flag);void delay( int count );void disp();void translate(int num);static int x=0,y=0,letter=0,flag=0,wei=0,prev[5],i,j;//函数里有调用我换成全局变量int which[20];//此时满足罗列单词int word,w;int m,n;////////////////////////////////////////////////int ts_status = TS_JUSTIFY_LEFTTOP;int ts_lefttop_x, ts_lefttop_y, ts_rightbot_x, ts_rightbot_y;int ts_lcd_x, ts_lcd_y;///////////////////////////////////////////////typedef struct{int w; //单词对应的值int o;int r;int d;int s;char c[20]; //英文单词char e[20]; //翻译}str_word;str_word dictionary[20]={{1,3,5,0,0,"ACE","王牌"},{2,5,5,0,0,"BEE","蜜蜂"},{1,4,4,0,0,"ADD","增加,计算"},{2,1,4,0,0,"BAD","坏的"},{4,5,3,1,4,"DECAD","十;十数"}};////////////////////////////////////////////////////////void Adc_or_TsSep() __attribute__ ((interrupt("IRQ")));void Adc_or_TsSep(void){int i;U32 Ptx[6], Pty[6];rINTSUBMSK |= (BIT_SUB_ADC|BIT_SUB_TC); // Mask sub interrupt (ADC and TC)// TC(Touch screen Control) Interruptif(rADCTSC & 0x100){PRINTF("\nStylus Up!!\n");rADCTSC &= 0xff; // Set stylus down interrupt}else{PRINTF("\nStylus Down!!\n");// <X-Position Read>rADCTSC=(0<<8)|(0<<7)|(1<<6)|(1<<5)|(0<<4)|(1<<3)|(0<<2)|(1);// Down,Hi-Z,AIN5,GND,Ext vlt,Pullup Dis,Normal,X-positionfor(i=0;i<LOOP;i++); //delay to set up the next channelfor(i=0;i<5;i++){rADCCON|=0x1; // Start X-position conversionwhile(rADCCON & 0x1); // Check if Enable_start is lowwhile(!(0x8000&rADCCON)); // Check ECFLGPtx[i]=(0x3ff&rADCDAT0);}Ptx[5]=(Ptx[0]+Ptx[1]+Ptx[2]+Ptx[3]+Ptx[4])/5;// <Y-Position Read>rADCTSC=(0<<8)|(0<<7)|(1<<6)|(1<<5)|(0<<4)|(1<<3)|(0<<2)|(2);// Down,GND,Ext vlt,Hi-Z,AIN7,Pullup Dis,Normal,Y-positionfor(i=0;i<LOOP;i++); //delay to set up the next channelfor(i=0;i<5;i++){rADCCON|=0x1; // Start X-position conversionwhile(rADCCON & 0x1); // Check if Enable_start is lowwhile(!(0x8000&rADCCON)); // Check ECFLGPty[i]=(0x3ff&rADCDAT1);}Pty[5]=(Pty[0]+Pty[1]+Pty[2]+Pty[3]+Pty[4])/5;rADCTSC=(1<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);// Up,GND,AIN,Hi-z,AIN,Pullup En,Normal,Waiting modePRINTF("TOUCH Position = (%04d, %04d) ", Ptx[5], Pty[5]);m=Ptx[5];n=Pty[5];if(ts_status == TS_JUSTIFY_LEFTTOP){ts_lefttop_x = Ptx[5];ts_lefttop_y = Pty[5];ts_status = TS_JUSTIFY_RIGHTBOT;PRINTF("\nLeft top (0, 0) -> (%04d, %04d)\n", ts_lefttop_x, ts_lefttop_y);PRINTF(" 请触摸屏幕右下角位置\n");}else if(ts_status == TS_JUSTIFY_RIGHTBOT){ts_rightbot_x = Ptx[5];ts_rightbot_y = Pty[5];ts_status = TS_START;PRINTF("\nRight bottom (319, 239) -> (%04d, %04d)\n", ts_rightbot_x, ts_rightbot_y);PRINTF("[2] 请点击触摸屏\n");}else{/* ts_lcd_x = 320 - (Ptx[5] - ts_rightbot_x) * 1.0 / (ts_lefttop_x - ts_rightbot_x) * 320.0 ;ts_lcd_y = (Pty[5] - ts_lefttop_y) * 1.0 / (ts_rightbot_y - ts_lefttop_y) * 240.0 ;if(ts_lcd_x > 319) ts_lcd_x = 319;if(ts_lcd_x < 0) ts_lcd_x = 0;if(ts_lcd_y > 239) ts_lcd_x = 239;if(ts_lcd_y < 0) ts_lcd_x = 0;PRINTF("LCD Position = (%04d, %04d)\n", ts_lcd_x, ts_lcd_y);*/}}rSUBSRCPND |= BIT_SUB_TC;rINTSUBMSK =~ (BIT_SUB_TC); // Unmask sub interrupt (TC)ClearPending(BIT_ADC);}void Ts_Sep(void){PRINTF("------触摸屏测试------\n");PRINTF("[1] 触摸屏校准\n 请触摸屏幕左上角位置\n");ts_status = TS_JUSTIFY_LEFTTOP;rADCDLY = (50000); // ADC Start or Interval DelayrADCCON = (1<<14)|(ADCPRS<<6)|(0<<3)|(0<<2)|(0<<1)|(0);// Enable Prescaler,Prescaler,AIN7/5 fix,Normal,Disable read start,No operationrADCTSC = (0<<8)|(1<<7)|(1<<6)|(0<<5)|(1<<4)|(0<<3)|(0<<2)|(3);// Down,YM:GND,YP:AIN5,XM:Hi-z,XP:AIN7,XP pullup En,Normal,Waiting for interrupt modepISR_ADC = (unsigned)Adc_or_TsSep;rINTMSK &=~(BIT_ADC);rINTSUBMSK =~(BIT_SUB_TC);// while(1);delay(200);// rINTSUBMSK |= BIT_SUB_TC;//rINTMSK |= BIT_ADC;// PRINTF("----触摸屏测试结束----\n");}//////////////////////////////////////////////////////void Main(void){unsigned char ch='1';/* 配置系统时钟 */ChangeClockDivider(1,1); // 1:2:4ChangeMPllValue(0xa1,0x3,0x1); // FCLK=202.8MHz/* 初始化端口 */Port_Init();/* 初始化串口 */Uart_Init(0,115200);Uart_Select(0);/* 打印提示信息 */PRINTF("\n---LCD测试程序---\n");PRINTF("\n请将UART0与PC串口进行连接,然后启动超级终端程序(115200, 8, N, 1)\n");/* LCD初始化 */Lcd_Port_Init();#ifdef STN_LCDLcd_Init(MODE_CSTN_8BIT);Glib_Init(MODE_CSTN_8BIT);Lcd_CstnOnOff(1);Glib_ClearScr(0xff, MODE_CSTN_8BIT);#else#ifdef TFT_8_0rGPCCON &= ~(3<<8);rGPCCON |= (2<<8);Lcd_Init(MODE_TFT_16BIT_640480);Glib_Init(MODE_TFT_16BIT_640480);Glib_ClearScr(0xffff, MODE_TFT_16BIT_640480);Lcd_PowerEnable(0, 1);Lcd_EnvidOnOff(1);#elseLcd_Init(MODE_TFT_16BIT_240320);Glib_Init(MODE_TFT_16BIT_240320);Glib_ClearScr(0xffff, MODE_TFT_16BIT_240320);Lcd_PowerEnable(0, 1);Lcd_EnvidOnOff(1);#endif#endif#define LCD_DISP_CHAR#ifdef LCD_DISP_CHARLcd_Disp_Grap();#endif//布局Glib_FilledRectangle(0,0,640,240,0xffff); //白底// Glib_Rectangle(60,80,620,110,0x0000);//首字母框Glib_Rectangle(60,80,620,440,0x0000);//主框Glib_Line(290,110,290,410,0x0000);//分割线1Glib_Line(60,110,620,110,0x0000);//分割线2Glib_Line(60,410,620,410,0x0000);//分割线3Glib_Line(172,410,172,440,0x0000);//分割线4Glib_Line(284,410,284,440,0x0000);//分割线5Glib_Line(396,410,396,440,0x0000);//分割线6Glib_Line(508,410,508,440,0x0000);//分割线7// Glib_Rectangle(520,80,620,120,0x0000);//upGlib_disp_hzk16(110,420,"上", 0x0000);// Glib_Rectangle(520,140,620,180,0x0000);//downGlib_disp_hzk16(222,420,"下", 0x0000);// Glib_Rectangle(520,200,620,240,0x0000);//DelGlib_disp_hzk16(334,420,"清屏", 0x0000);// Glib_Rectangle(520,260,620,300,0x0000);//EnterGlib_disp_hzk16(446,420,"查询", 0x0000);// Glib_Rectangle(520,320,620,360,0x0000);//CancelGlib_disp_hzk16(558,420,"返回", 0x0000);Ts_Sep();while(1)//大循环等键按下{Cursor(flag);ch = Key_GetKeyPoll();/////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////if((m>=145&&m<237)&&(n>395&&n<540))ch='E';//qingpinif((m>=145&&m<237)&&(n>678&&n<830))ch='C';//Shangif((m>=145&&m<237)&&(n>540&&n<678))ch='D';//Xiaif((m>=145&&m<237)&&(n>57&&n<219))ch='B';///shanchuif((m>=145&&m<237)&&(n>219&&n<395))ch='F';//quedingm=n=0;/////////////////////////////////////////////////////////////////////////////// /////////////////////////////switch(ch){case '1'://aGlib_FilledRectangle(65,120,280,400,0xffff);//先清罗列单词区letter=1;//1表示输入字母为1Glib_disp_hzk16(90+wei*20,90,"A", 0x0000);//显示界面显示aprev[wei]=1;//存放disp();//显示单词区的单词wei++;//下一个放字母位置if(wei>=5){Glib_disp_hzk16(340,90,"已满", 0x0000);//单词字母小于等于四个delay(1000);Glib_disp_hzk16(340,90,"已满", 0xffff);//清掉"已经满了"};//超出错误,只能查四位break;case '2'://bGlib_FilledRectangle(65,120,280,400,0xffff);//先清罗列单词区letter=2;//1表示输入字母为1Glib_disp_hzk16(90+wei*20,90,"B", 0x0000);//显示界面显示aprev[wei]=2;//存放disp();//显示单词区的单词wei++;//下一个放字母位置if(wei>=5){Glib_disp_hzk16(340,90,"已满", 0x0000);//单词字母小于等于四个delay(1000);Glib_disp_hzk16(340,90,"已满", 0xffff);//清掉"已经满了"};//超出错误,只能查四位break;case '3'://cGlib_FilledRectangle(65,120,280,400,0xffff);//先清罗列单词区letter=3;//1表示输入字母为1Glib_disp_hzk16(90+wei*20,90,"B", 0x0000);//显示界面显示aprev[wei]=3;//存放disp();//显示单词区的单词wei++;//下一个放字母位置if(wei>=5){Glib_disp_hzk16(340,90,"已满", 0x0000);//单词字母小于等于四个delay(1000);Glib_disp_hzk16(340,90,"已满", 0xffff);//清掉"已经满了"};//超出错误,只能查四位break;case '4'://dGlib_FilledRectangle(65,120,280,400,0xffff);//先清罗列单词区letter=4;//1表示输入字母为1Glib_disp_hzk16(90+wei*20,90,"D", 0x0000);//显示界面显示aprev[wei]=4;//存放disp();//显示单词区的单词wei++;//下一个放字母位置if(wei>=5){Glib_disp_hzk16(340,90,"已满", 0x0000);//单词字母小于等于四个delay(1000);Glib_disp_hzk16(340,90,"已满", 0xffff);//清掉"已经满了"};//超出错误,只能查四位break;case '5'://eGlib_FilledRectangle(65,120,280,400,0xffff);//先清罗列单词区letter=5;//1表示输入字母为1Glib_disp_hzk16(80+wei*20,90,"E", 0x0000);//显示界面显示aprev[wei]=5;//存放disp();//显示单词区的单词wei++;//下一个放字母位置if(wei>=5){Glib_disp_hzk16(340,90,"已满", 0x0000);//单词字母小于等于四个delay(1000);Glib_disp_hzk16(340,90,"已满", 0xffff);//清掉"已经满了"};//超出错误,只能查四位break;case '6'://fbreak;case '7'://gbreak;case '8'://hbreak;case '9'://ibreak;case '0'://jbreak;case 'A'://kletter=11;break;case 'C'://上flag--;if(flag>=0&&flag<=3){Cursor(flag);//单词列表选中变色CursorCl(flag+1);}//再上恢复刚才那条的背景色else flag=0;break;case 'D'://下flag++;if(flag>=0&&flag<=3){Cursor(flag);CursorCl(flag-1);}else flag=3;break;case 'E'://cancel清屏Glib_FilledRectangle(70,90,339,109,0xffff);//先清单词区Glib_FilledRectangle(65,120,280,400,0xffff);//先清罗列单词区Glib_FilledRectangle(300,120,610,400,0xffff);//清翻译区for(j=0;j<=10;j++){which[j]=0;};letter=0;wei=0;for(j=0;j<=5;j++){prev[j]=0;};break;case 'F'://enter确定Glib_FilledRectangle(300,120,610,400,0xffff);//主翻译区if(flag>=0&&flag<=3)translate(which[flag]);//显示结果break;case 'B'://del删除Glib_FilledRectangle(70,120,280,400,0xffff);//先清罗列单词区letter=0;wei--;prev[wei]=0;//上一位变0Glib_FilledRectangle(70+wei*30,90,70+wei*30+20,109,0xffff);//消掉一个字母wei--;disp();wei++;break;default:Glib_disp_hzk16(500,90,"←请输入单词", 0x0000);break;}}}void disp(){y=0;//初始单词显示位置for(i=0;i<=20;i++){if((dictionary[i].w==prev[0])&&(wei==0)){//第一个字母正which[y]=i;//存放哪几个单词显示了Glib_disp_hzk16(80,120+32*y,dictionary[i].c, 0x0000);//显示单词y++;//位置改变}if((dictionary[i].w==prev[0])&&(dictionary[i].o==prev[1])&&(wei==1)){//前两个字母正确which[y]=i;//存放哪几个单词显示了Glib_disp_hzk16(80,120+32*y,dictionary[i].c, 0x0000);//显示单词y++;//位置改变}if((dictionary[i].w==prev[0])&&(dictionary[i].o==prev[1])&&(dictionary[i].r==pr ev[2])&&(wei==2)){//前3个字母正确which[y]=i;//存放哪几个单词显示了Glib_disp_hzk16(80,120+32*y,dictionary[i].c, 0x0000);//显示单词y++;//位置改变}if((dictionary[i].w==prev[0])&&(dictionary[i].o==prev[1])&&(dictionary[i].r ==prev[2])&&(dictionary[i].d==prev[3])&&(wei==3)){//前4个字母正确which[y]=i;//存放哪几个单词显示了Glib_disp_hzk16(80,120+32*y,dictionary[i].c, 0x0000);//显示单词y++;//位置改变}}}void translate(int num){//显示单词选项3个Glib_disp_hzk16(300,120,dictionary[num].e, 0x0000);}//void Clearscreen(void) //清屏//{// Glib_FilledRectangle(65,81,499,99,0xffff);// Glib_FilledRectangle(65,121,499,439,0xffff);// Glib_Line(240,120,240,440,0x0000);//}void Cursor(int flag){Glib_FilledRectangle(65,121+flag*32,75,153+flag*32,0x55);}void CursorCl(int flag){Glib_FilledRectangle(65,121+flag*32,75,153+flag*32,0xffff);}void Lcd_Disp_Grap(void){int i,j;for(j=0;j<240;j++)for(i=0;i<320;i++) //RRRGGGBBPutPixel(i,j,((i/40)<<5)+((j/30)<<2)+(((j/15)%2)<<1)+((i/20)%2)); }void delay( int count ){int cnt;for( count = count; count>0; count--)for( cnt = 0; cnt < 100; cnt++);}。

c语言课程设计电子词典

c语言课程设计电子词典

c语言课程设计电子词典随着科技的不断进步和发展,计算机技术也在不断的发展和完善。

计算机编程语言也应运而生,其中c语言成为了最为流行和广泛应用的一种编程语言。

为了更好地学习和掌握c语言,我们需要不断地进行练习和实践。

而课程设计电子词典就是一个非常好的实践项目。

本文将对c语言课程设计电子词典进行详细的介绍和分析。

一、电子词典简介电子词典是一种类似于纸质词典的电子设备。

电子词典将词典内容数字化存储在内部芯片中,通过一个屏幕显示出来。

电子词典拥有很多优点,比如存储空间更大、功能更强大、可搜索性更高等等。

今天,电子词典是很多人学习和工作必不可少的工具之一。

二、c语言课程设计电子词典的设计思路c语言课程设计电子词典是一种将词典内容和c程序功能相结合的设计项目。

他的设计思路如下:1.定义词典内容结构体在程序中需要定义一个结构体,用来存储词典内容。

结构体的成员包括单词、单词的释义、音标等。

typedef struct word{ char name[30]; // 单词名称char symbol[30]; // 单词音标charmean[400]; // 单词含义}word;2.构建词典数据将词典中的单词、释义、音标等内容保存到结构体中。

并将多个结构体数据包含在一个数组中。

word dictionary[] = { { "apple", "[ˈæpl]", "a round fruit with smooth red or yellow skin and firm white flesh" }, { "banana", "[bəˈnɑː.nə]", "a long curved fruit with a yellow skin" }, { "cat", "[kæt]", "a small animal with fur, four legs, a tail, and claws" }, { "dog", "[dɒɡ]", "a common animal with four legs, fur, and a tail" }, { "elephant", "[ˈel.ɪ.fənt]", "a very large grey animal with a long nose called a trunk" }};3.实现单词查询功能在程序中,我们需要实现一个单词查询的功能。

基于WinCE的电子词典的设计与实现的开题报告

基于WinCE的电子词典的设计与实现的开题报告

基于WinCE的电子词典的设计与实现的开题报告一、选题背景:随着人们生活水平的提高,英语学习已经成为了越来越多人的追求。

尤其是在高校英语学习中,电子词典已经成为了一种重要的辅助工具。

然而,普通的电子词典无法满足学生和教师的需求,需要一种更为功能强大的词典。

本课题基于 WinCE 平台开发一款电子词典,来满足用户需求。

二、主要内容:本课题主要涉及以下方面的内容:1.需求分析:通过分析用户需求,明确电子词典的主要功能、特点和优点。

通过分析市场情况,确定本电子词典在设计上所要满足的独特需求。

2. 系统架构设计:本系统基于WinCE平台,需要确定系统的架构、模块划分及各模块之间的交互方式等。

3. 数据库设计:对于一个电子词典系统,必须有一个强大而且稳定的数据库系统。

本系统数据库采用MySQL数据库,需要设计词汇以及相关属性的表格,以满足词典查询和管理。

4. 界面设计:采用视觉化模块,以确保该电子词典的操作界面友好、美观、易于使用。

5. 功能实现:本系统应用了一些基本的查询算法,如模糊查询、联想查询、相似词查询等,并可支持听读模式,可以在线发音。

同时,还考虑实现用户自定义词典、背单词等较为高级的功能。

6. 测试与评估:采用合适的测试方法,对电子词典进行测试,发现存在的问题并及时改进,以确保该系统的稳定性、高效性以及可靠性。

三、研究目标与意义:本课题开发的电子词典系统,主要研究基于WinCE平台的系统设计和实现方案,以及一些重要的算法开发实践。

该词典系统具有功能强大、易于使用的特点。

其通过该系统可有效提升学生和教师在英语学习方面的体验和效率,同时也可以作为WinCE系统开发方案的一个经典的案例。

四、研究方法:本课题主要采用以下方法进行研究:1. 调查方法:调查目标群体的需求和反馈,并据此进行需求分析和功能设计。

2. 数据库设计方法:采用MySQL数据库,通过设计表格实现数据存储与检索。

3. 软件开发方法:根据需求分析结果,采用面向对象的设计思想、UML建模工具进行系统的设计,并使用VC++进行软件开发。

英汉电子词典设计报告设计C语言C语言程序设计

英汉电子词典设计报告设计C语言C语言程序设计

英汉电子词典设计报告设计C语言C语言程序设计设计报告:英汉电子词典设计目标:本次设计的目标是开发一个基于C语言的英汉电子词典,实现用户通过输入英文单词或汉字查询其对应的中文释义或英文翻译。

同时,用户还可以对查询结果进行添加、修改、删除操作,方便用户自定义个性化词库。

设计思路:1.使用C语言实现用户界面,包括菜单选项和用户输入功能;2.使用文件管理系统进行词库的存储和读取,并实现对词库的增删改查功能;3.使用字符串匹配算法进行单词或汉字的查询,保证查询的精确性;4.使用二叉查找树(BST)作为数据结构,实现词库的快速查找和插入功能。

模块设计:1.用户界面模块:-显示菜单选项,包括查询、添加、修改、删除和退出;-提示用户输入相应选项,并获取用户输入;2.文件管理模块:-创建存储词库的文件,并检查文件是否存在;-实现读取文件内容到内存和将内存内容写入文件的功能;3.数据结构模块:-设计结构体,包含英文单词和中文释义;-使用二叉查找树作为词库的数据结构,实现快速查找和插入功能;4.查询模块:-根据用户输入的英文单词或汉字,进行查询;-使用字符串匹配算法进行匹配,找到对应的词条并显示;5.添加模块:-接受用户输入的英文单词和中文释义,并将其插入词库中;6.修改模块:-接受用户输入的英文单词和新的中文释义,并替换原有词条的中文释义;7.删除模块:-根据用户输入的英文单词或汉字,从词库中删除对应的词条;测试计划:-对每个模块进行单元测试,确保其功能正常;-集成测试,检查各个模块之间的交互是否正常;-进行用户测试,验证整个电子词典系统的可用性和稳定性。

总结:通过以上的设计,我们可以实现一个基于C语言的英汉电子词典,能够方便用户进行英文单词和汉字的查询,并支持用户对词库进行个性化操作。

该电子词典设计简洁,功能完备,并且具有较好的扩展性,适用于不同平台和系统的实际应用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于S3C44BOX的电子词典软件设计与实现1 概述此次基于ARM7的电子词典系统开发作业,由我们小组4人合作完成,其中我主要负责软件方面的开发,所做的方面有英译汉软件功能的实现,输入值软件识别功能的实现以及看门狗定时器的实现。

由于不怎么熟悉arm的开发,基本是看着书做,设计思路和方法、功能实现也都是书上怎么来,自己就怎么实现,希望傅老师谅解,这块的基础确实薄弱。

2 S3C44BOX处理器介绍2.1 S3C44BOX简介S3C44BOX微处理器片类集成ARM7TDMI核,采用0.25μm CMOS工艺制造,并在ARM7TDMI核的基础上集成了丰富的外围功能模块,便于低成本设计嵌入式系统应用系统。

片上集成的主要功能如下:在ARM7TDMI基础上增加至8KB的Cache。

外部扩充存储器控制器(FP/EDO/SDRAM控制,片选逻辑)。

LCD控制器(最大支持256色的DSTN),并带有一个LCD专用DMA通道。

2个通用DMA通道2个带外部请求引脚的DMA通道。

2个带有握手协议的UART,1个SIO。

1个多主的I2C总线控制器。

1个I2S总线控制器。

5个PWM定时器及1个内部定时器。

看门狗定时器。

71个通用可编程I/O口,8个外部中断源。

功耗控制模式:正常,低速,休眠和停止。

8路10位ADC。

具有日历功能的RTC(实时时钟)。

PLL时钟发生器。

2.2 S3C44BOX特点2.2.1 S3C44BOX体系结构S3C44BOX是基ARM7TDMI体系结构的SOC。

集成了手持设备和通用嵌入式系统应用的解决方案;16/32位RISC体系结构和ARM7TDMI处理器内核强大的指令体系;Thumb代码压缩机,最大化代码密度同时保持了32位指令的性能;基于JTAG的片上集成ICE调试支持解决方案;32×8位硬件乘法器;实现低功耗SAMBA II(三星ARM处理器嵌入式微控制器总线体系结构)的新型总线结构。

2.2.2 系统(存储)管理支持大/小端方式;寻址空间:每bank32M字节(共256M字节);支持每bank可编程的8/16/32位数据总线宽度;7个bank具有固定的bank起始地址和可编程的bank大小;1个bank具有可编程的bank起始地址和bank大小;8个存储器bank:-6个ROM,SRAM存储器bank;-2个ROM/SRAM/DRAM(快速页面,EDO和同步DRAM);所有的存储器bank具有可编程的操作周期;支持外部等待信号延长总线周期;支持掉电时DRAM/SDRAM的自刷新模式;支持均匀/非均匀的DRAM地址。

2.2.3 Cache存储器和内部SRAM4路组相联统一的8KB指令/数据Cache;未用的Cache空间用来作为4/8 KB Cache存储空间可作为片内的SRAM使用;支持LRU(近期最少使用)替换算法采用保持主存储器与cache内容一致性的“写穿式”策略写存储器具有4级深度当缓冲区出错时,采用“请求数据优首先填充”技术2.2.4 时钟和电源管理低功耗片上PLL使MCU工作时钟最大达到75MHz可以通过软件设置各功能模块的输入时钟电源模式:正常,慢速,空闲和停止模式;◆正常模式正常工作模式;◆低速模式不加PLL的低时钟频率模式;◆休眠模式只停止CPU的时钟;◆SL空闲模式 LCD控制器工作◆停止模式停止所有的时钟;通过EINT[7:0]或RTC报警中断从停止模式唤醒2.2.5 中断控制器30个中断源(看门狗定时器,6个定时器,6个UART,8个外部中断,4个DMA,2个RTC,1个ADC,1个I2C,1个SIO)采用向量化的IRQ中断模式以减少中断的延迟可选的电平/边沿模式触发外部中断电平/边沿模式具有可编程的优先级支持FIQ为紧急的中断请求进行服务2.2.6 定时器和PWM(脉宽调制)5通道16位具有PWM功能的定时器,1通道16位内部定时器(可进行基于DMA或中断的操作)可编程的占空比周期,频率,和优先级能产生死区支持外部时钟源2. 2.7 RTC(实时时钟)充分的时钟特性:毫秒,秒,分钟,小时,日,星期,月,年32.768KHz时钟;定时警报,可用于唤醒CPU;可产生时钟节拍中断2.2.8 通用I/O口8个外部中断口71个多功能输入/输出口2.2.9 UART(异步串行通讯)2通道UART,可进行基于DMA或中断的操作支持5位,6位,7位或8位串行数据传输/接收支持在发送/接收期间的H/W握手功能可编程的波特率支持IrDA 1.0(115.2Kbps)支持用于测试的回馈模式每个通道具有2个内部32字节的FIFO分别用于输入和输出2.2.10 DMA(直接存储器操作)控制器2通道通用DMA(直接存储器操作)控制器,不需要CPU干预2通道DMA桥(外设DMA)控制器支持I/O到存储器,存储器到I/O,I/O到I/O的6种DMA请求:软件,4个内部功能模块(UART,SIO,定时器,IIS),和外部引脚。

在同时发生的多个DMA之间具有可编程的优先级顺序;采用猝发式的传输模式以提高FPDRAM, EDODRAM和SDRAM的数据传输速率;支持在外部设备到存储器和存储器到外部设备之间采用fly-by模式2.2.11 A/D转换器8通道的ADC最大500k SPS/10-bit2.2.12 LCD 控制器支持彩色/黑白/灰度LCD屏支持单路扫描和双路扫描支持虚拟显示屏功能系统存储器用来作为显示缓存用专门的DMA来从系统存储器中获得图象数据可编程的屏幕大小灰度等级:16级灰度;最多256种颜色2.2.13 看门狗定时器16位的看门狗定时器在定时器溢出时发出中断请求或系统复位2.2.14 I2C总线接口1通道多主I2C总线,可进行基于中断的操作模式可进行串行,8位,双向数据传输,标准模式速度达到100Kbit/S,快速模式达到400Kbit/s2.2.15 I2S总线接口1通道音频I2S总线接口,可进行基于DMA的操作串行,每通道8/16位数据传输支持MSB-justified数据格式2.2.16 SIO(同步串行I/O)1通道SIO,可进行基于DMA或中断的操作可编程的波特率支持8位串行数据的传输和接收操作2.2.17 工作电压范围内核2.5V, I/O口:3.0V到3.6V2.2.18 工作频率最大75MHz2.2.19 封装160LQFP/160FBGA2.3 S3C44BOX功能结构框图图1 S3C44BOX功能结构框图2.4 S3C44BOX芯片引脚定义图2 S3C44BOX芯片引脚定义图3 基于S3C44BOX电子词典开发嵌入式系统以其体积小,性能好,功耗低,可靠性高以及面向行业应用的特点已被广泛应用与各个领域。

其中电子词典是嵌入式系统消费电子领域典型的应用实例,它具有完整的输入/输出设备。

3.1 电子词典系统定义与需求分析电子词典系统应具备以下功能要求:(1)能够通过键盘、触摸屏输入英文a~z:实现字母输入;Page up/down:显示上/下一个被查询过的单词;Line up/down:光标移至上/下一行,在单词输入过程中,在单词翻译区会有拼写相近单词显示,用Line up/down按键可以上下选择这些单词;Enter:翻译,将当前单词与词库中的内容相比较,如有一致则显示其内容,否则给出提示;Back space:退格,删除单词最末尾的字母并将光标前移一位;提供触摸屏输入六个功能键。

(2)提供友好的人机界面,将输入的内容和翻译的结果显示在LCD的相应区域内。

(3)对输入的单词即时翻译。

(4)可以记忆3个已经查询过的单词。

图3-1 查询界面3.2 电子词典方案设计为实现电子词典功能需求,结合嵌入式系统软硬件协同技术设计,采取以下设计方案。

3.2.1硬件设计依据ARM芯片的选择原则,此处选择集成了丰富的外围功能模块,便于低成本设计嵌入式应用系统的S3C44BOX处理器作为系统的主控制器。

利用其内置的LCD控制器实现LCD控制接口;利用I²C总线控制器实现键盘控制接口;利用A/D转换器实现触摸屏控制接口;利用UART实现调试接口;利用GPIO连接LED灯显示有关状态。

以上5个硬件部分的开发中,其中第1,2,3,5本组其他同学完成,第4个部分UART实现调试接口的开发与应用,在本文档中重点说明,由本人单独完成。

3.2.2软件设计本电子词典软件只要完成键盘操作,菜单操作及LCD显示功能。

根据软件模块化设计方法将系统软件分为3个模块;词库编写,功能控制软件设计,人机交互接口功能设计。

我负责软件的总体设计图,实现其基本功能。

其中按键分别具有如下功能:a~z:实现字母输入;Page up/down:显示上/下一个被查询过的单词;Line up/down:光标移至上/下一行,在单词输入过程中,在单词翻译区会有拼写相近单词显示,用Line up/down按键可以上下选择这些单词;Enter:翻译,将当前单词与词库中内如相比较,若一致则显示其内容,否则给出提示;Back space:退格,删除单词最末尾的字母并将光标前移一位。

本电子词典系统还需要提供触摸输入,在触摸屏上划分出6个区域,分别对应键盘上的6个功能键。

4 开发环境电子词典硬件模块测试软件和无操作系统电子词典应用软件的开发采用了相同的交叉开发环境。

宿主机PC机上运行ARM公司为方便用户在基于ARM 内核处理器上进行软件开发而推出的集成开发工具ARMADS(ARM Developer Suite)最新版本 1.2在Codewarrior IDE(Integrate Development Environment)集成开发环境中编辑电子词典软件程序,通过交叉编译器和交叉链接器对软件进行编译,链接。

最终生成可执行文件,通过在线仿真器Multi-ICE将此可真行文件下载到目标板运行。

在线仿真器通过并口链接宿主机,通过JTAG接口链接目标机。

串口线直接链接宿主机和目标板,在宿主机PC机上显示吊饰信息。

为加快软件开发的进度,在电子词典硬件平台未建立起来以前先使用Embest EDUKIT 实验板作为目标本吊饰各功能模块软件。

5 开发功能说明和代码5.1英译汉功能软件由于要查的英文单词有两种输入方式:一种是通过在输入框中输入字母;另一种是通过上一行/下一行键在选择框里显示的单词中进行选择,所以用参数Position表示输入方式(TRUE:输入框,FALSE:选择框查找)。

具体实现流程如图所示:/************************************************************ name: translate* func: Translation function implementation program* para: none* ret: none* modify:* comment*************************************************************/ U8 transate(S8* word,U8 Position,U8 No){U8 k=0;Trans_Clear();Dis_Chinese(20,55,Gui_WHITE,”正在查找,请等待!”);if(!Position){strcpy(word,vocab[No].c);Disp_String(word,English_area.x0+5,English_area.y0+2);}for(k=0;k<ALL_WNo;k++){if(strcmp(word,vocab[k].c)==0){Trans_Clear();Disp_String(vocab[k].d,20,55);Disp_chinese(20,75,GUI_WHITE,vocab[k].e);Disp_String(vocab[k].f,20,95);Return k;}}Trans_Clear()’Dis_Chinese(20,55,GUI_WHITE,”查无此词!”);return (k=ALL_WNo);}/******************************************************************** * 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 bitchar pbyte[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){case 0:num=1;break;case 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: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;word[wordIndex]='\0';wordIndex--;break;/*if(n==0){word[20]=0;wordIndex=0;Lcd_Draw_HLine(10, 310,85, WHITE, 160);}break;*/case 13:word[wordIndex]='\0';wordIndex=0;for(i=0;i<20;i++){if(strcmp(word,vocab[i].c)==0){j=0;k=i;break;}elsej=1;}if(j==0){//#ifdef Eng_vLcd_DspAscII8x16(15,40,BLUE,vocab[k].c);Lcd_DspAscII8x16(15,60,BLUE,vocab[k].d);Lcd_DspAscII8x16(15,80,BLUE,vocab[k].f);//#elseLcd_DspHz16(15,100,BLUE,vocab[k].e);//#endif}else{Lcd_DspHz16(15,120,BLUE,"未找到相应的单词"); DelayMs(600);Lcd_DspHz16(15,120,WHITE,"未找到相应的单词"); }break;case 14:word[wordIndex]='\0';wordIndex=0;for(i=0;i<20;i++){if(strcmp(word,vocab[i].c)==0){j=0;k=i;break;}elsej=1;}if(j==0){//#ifdef Eng_vLcd_DspAscII8x16(15,40,BLUE,vocab[k].c);Lcd_DspAscII8x16(15,60,BLUE,vocab[k].d);Lcd_DspAscII8x16(15,80,BLUE,vocab[k].f);//#elseLcd_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++;}elsex=15;//Lcd_DspAscII8x16(15,45,BLUE,word);for(i = 0; i < 20; i++)word[i]='\0';}break;case 15://Lcd_Draw_Box(10,40,310,80,GREEN);break;}if(num!=0&&counter!=0){switch(3*(num-1)+counter-1){case 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';break;case 11:bbyte='l';break;case 12:bbyte='m';break;case 13:bbyte='n';break;case 14:bbyte='o';break;case 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:bbyte='y';break;case 25:bbyte='z';break;}num=0;counter=0;if(m==0){word[wordIndex]=bbyte;wordIndex++;//n+=10;}}Lcd_DspAscII8x16(15,210,BLUE,word); // Uart_Printf("Key is:%x \r",input_char);}}5.2输入键值识别功能软件本电子词典设计中共有26个字母键和6个功能键。

相关文档
最新文档