单词记忆测试器程序的设计说明
java记忆测试系统课程设计

《程序语言综合课程设计》设计报告学院:专业班级:学号:姓名:指导老师:完成时间:目录记忆测试系统 (1)1 题目简介 (1)2 设计的内容、要求和目标 (2)3 总体设计 (3)4 详细设计及实现 (5)4.1 操作界面设计 (5)4.2 类成员变量及方法设计 (6)4.3* 数据库设计 (7)4.4 源代码分析 (8)5 系统部署及使用说明 (14)记忆测试系统1题目简介记忆测试系统通过回忆法测试记忆能力,测试手段分为初级,中级,高级,三个级别2设计的内容、要求和目标我设计的记忆测试系统,除了要编写的6个java文件所给的类外,还需在添加一些功能,如添加图标,改进测试条件,添加音乐功能,使程序有翻开相同的图标是播放一段音乐,不同时播放另一段音乐等。
列出菜单,有选择级别,选择图标,成绩记忆榜;在菜单下有M*N个图标随机分布,当点击一个图标,被保存下来,点击下一个图标时与上一个图标比较,图标相同而方块不同则success 加1,反之则不变,当点击六个相同的图标时记录所需的时间,保存在成绩记忆排行榜中;点击成绩排行榜,可登陆成绩,且会给成绩排行,由高到低。
设计要求:(1)单击“选择级别”菜单可以选择初级,中级,高级。
(2)单击“查看排行榜”菜单可以查看记忆榜,通过记忆榜存储每个级别的成绩(3)选择级别后,将出项相应级别的测试区。
测试区由M*N个方块组成程序通过设置M和N的值来确定相应的测试级别,例如,对于初级级别,M=5,N=6.每个方块上都有一个图标,但该图标默认不可见。
用鼠标当即测试区中的任何一个方块,则计时器开始启动,同时该方块上的图标将显示出来。
(4) M*N个方块组成的测试区中有M个图标,每个图标重复出现N次,并且随机分布在测试区中的M*N个方块上。
用户必须用鼠标连续单击出N个图标相同的方块,也就是说,如果用户已经用鼠标连续单击出P个图标相同的方块,当再单击另一个方块时,如果该方块的图标和上一个的相同,那么该方块的图标和前P次单击出的方块的图标仍然可见;否则前P次单击出的方块的图标全都变得不可见,只有当前单击的方块的图标可见。
JAVA课程设计记忆测试系统附源程序

响应时间:系统处理用户请求所需的时 间
吞吐量:系统在单位时间内处理的请求 数量
资源利用率:系统对硬件资源的使用情 况
可靠性:系统在运行过程中出现故障的 概率
可扩展性:系统在增加用户数量或请求 数量时的表现
安全性:系统对恶意攻击的防护能力
提高系统性能: 优化算法,减 少内存占用, 提高响应速度
增强用户体验: 优化界面设计, 提高用户操作
交互设计:易于理解和操作,提高 用户体验
采用K-means算法进行数据聚类
利用神经网络进行特征提取和分类
添加标题
添加标题
使用决策树进行分类预测
添加标题
添加标题
采用遗传算法进行参数优化和模型 选择
数据库类型:MySQL
数据库表结构:用户表、题目表、答案 表、成绩表等
数据库操作:增删改查等基本操作
03
数据库:使用MySQL或Oracle等数据库存储数据
05
安全性:采用加密技术、身份验证和访问控制等技术 保证系统安全
02
后端:使用Java语言实现业务逻辑和数据处理
04
架构模式:采用MVC(Model-View-Controller) 模式进行开发,实现代码解耦和模块化开发
06
可扩展性:采用模块化设计,便于系统功能的扩展和 升级
源程序查看:用户可以查看源 程序,了解系统的实现原理
用户需求:记 忆测试系统
功能需求:用 性能需求:系
户注册、登录、 统响应速度快,
测试、查看结
稳定性高
果、修改密码
等
安全性需求: 用户数据加密 存储,防止数
据泄露
可用性需求: 界面友好,操 作简单,易于
上手
扩展性需求: 支持多种测试 类型,如单词、 句子、段落等
基于单片机的单词记忆器设计

基于单片机的单词记忆器设计单片机单词记忆器设计可以通过以下步骤实现:1. 硬件设计:选择适合的单片机开发板或芯片,例如Arduino、Raspberry Pi等。
根据需求,设计并连接合适的输入和输出设备,如按钮、显示屏和喇叭等。
2. 单词库准备:将需要记忆的单词以文本文件的形式存储在单片机的存储器中,可以使用SD卡、SPI Flash或EEPROM等。
3.用户界面设计:使用按钮和显示屏实现用户与记忆器的交互界面。
例如,通过按下按钮来选择单词,并在显示屏上显示相应的单词和释义等信息。
4.单词显示和播放:根据用户选择的单词,在显示屏上显示该单词的释义,并通过喇叭或耳机输出单词的发音。
可以使用相应的语音合成库或芯片实现发音功能。
5.记忆训练模式:设计相应的记忆训练模式,例如根据顺序或随机选择单词进行测试和复习。
可以通过按下不同的按钮或在界面上选择相应的模式。
6.学习记录和进度统计:设计记忆器可以记录用户的学习历史和进度,例如已经学习的单词数量、学习时间等信息。
可以通过单片机的存储器或在外部存储设备中保存这些信息。
7.能源管理:考虑使用低功耗设计,例如增加电源管理模块,以延长记忆器的电池寿命。
添加睡眠模式,当记忆器长时间不使用时,自动进入低功耗状态。
8.软件运行控制:根据硬件设计、用户界面和功能要求,编写相应的单片机代码。
包括读取单词库文件、界面交互、单词显示和发音等功能的实现。
9.调试和测试:将代码烧录到单片机上,并通过调试和测试验证各个功能的正确性和稳定性。
根据测试结果进行适当的优化和改进。
最后,对于特定需求和设计约束,可能需要根据实际情况进行适当的调整和修改。
基于Python的英文单词记忆

基于Python的英文单词记忆开题报告一、选题背景随着全球化的加速,学习英语的重要性越来越凸显。
而英语的基础是单词,掌握单词是学好英语的关键。
然而,单词的记忆工作往往非常繁琐且乏味,也容易出现遗忘现象。
为了解决这一问题,本人决定开展基于Python的英文单词记忆毕业设计。
二、研究目的本设计旨在开发一个基于Python语言的英文单词记忆系统,以帮助用户更好地学习记忆英语单词。
该系统可以通过提供各种单词记忆的方式(如闪卡、记忆游戏等)和自定义学习计划等功能,使用户能够更快、更深地掌握英语单词。
三、研究内容本设计将以Python为核心技术,结合现有的英语单词学习理论和常用的英语单词数据集,开发一个基于Python的英文单词记忆系统,主要包括以下部分:1.数据处理模块:该模块主要用于导入和处理英语单词数据集,支持多种数据格式(如Excel、CSV等)的导入和处理。
2.记忆模块:该模块是本系统的核心,提供各种单词记忆的方式,比如闪卡、记忆游戏、拼写游戏等。
3.学习计划模块:该模块提供学习计划的编辑和管理功能,用户可以自定义学习计划,以达到更系统、高效地学习英语单词的目的。
4.系统设置模块:该模块提供系统设置功能,用户可以根据自己的需求对系统进行个性化设置。
四、研究方法本研究将采用文献调研、软件开发等方法进行,主要步骤如下:1.文献调研:通过查阅相关文献,深入了解英语单词学习的理论、方法以及常用的英语单词数据集等,以为后期系统设计提供理论基础和数据支持。
2.需求分析:根据用户需求和功能要求,设计相应的需求文档和流程图,以确保系统设计满足用户需求并能够实现所要求的功能。
3.系统设计:根据需求文档和流程图,进行系统架构设计,并根据所需功能设计相应的模块和算法。
4.系统实现:采用Python等开发语言,完成系统开发及测试,并对系统进行优化。
五、预期成果本研究预期将开发一个基于Python的英文单词记忆系统,该系统不仅可以帮助用户更快、更深地掌握英语单词,还可以为英语教育领域的教育者和学习者提供一个学习、掌握英语单词的有效工具。
单词记忆软件设计方案

1.目的和意义目前英语地位日趋重要,单词的词汇量是一个人英语能力及水平极大的重要体现, 而背单词依旧是困扰许多人的地方,原因如下:英语单词多而繁杂,面对整整一本的单词词典人们总是望而却步,不从何入手。
开始记忆以后没有安排恰当计划,零散的记忆,效率低下,久而久之看不见成果,便缺乏动力。
根据双重遗忘理论,人们不仅仅是忘记了单词本身,还会忘记了今天自己该复习什么单词双重遗忘让我们错失了将单词从短期记忆转化成长期记忆的机会。
背单词的行为本身涉及到两个概念“记忆”和“遗忘”。
记忆是将需要记忆的元素在大脑中形成一种记忆的链结。
它是学习的过程。
艾宾浩斯曾提出,记忆可以分为瞬时记忆、短时记忆和长期记忆[2]。
遗忘是指记忆元素之间的链结弱化甚至消失,导致人们对某个记忆元素不再回忆起来。
记忆和遗忘相互制衡并存,但它们是有规律的,这就是著名的“艾宾浩斯遗忘原理”也就是“记忆曲线”或者“遗忘曲线”。
众所周知,要记住一样东西必须反复的复习重复,才能达到牢记状态,而艾宾浩斯遗忘原理告诉我们遵循记忆与遗忘的规律进行复习,将会事半功倍。
鉴于以上种种原因,本次项目设计了基于艾宾浩斯记忆曲线的单词记忆的系统,通过它,可以解决人们背单词的困扰,系统能够每天提供新增单词交由用户记忆,可以动态的根据“记忆曲线”将你最该复习的单词呈现给你,将极大的提高人们记忆效率。
2. 开发目标该系统将主要实现以下几个目标与功能:1.帮助用户实现信息化管理自己记忆单词的日程安排。
2.提供友好的界面供用户复习浏览单词3.根据艾宾浩斯记忆曲线原理生成用户记忆曲线。
4.根据用户操作动态修正用户记忆曲线参数。
5.根据用户记忆曲线动态调整复习计划。
6.根据用户复习计划初始化任务列表。
7.实现任务单词推送次序调整动态更新。
系统通过实现以上几个核心功能,达到提高用户记忆效率的效果。
3. 系统总体结构图单词记忆系统由词库模块、复习计划维护模块、复习模块、浏览模块、用户模块等子模块构成。
51单片机课程设计——单词记忆器的设计实现

字符的显示:用LCD显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示 屏幕上某几个位置对应的显示RAM区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1” 的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符 就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示 RAM对应的地址,设立光标,在此送上该字符对应的代码即可。
三、系统程序流程图
CHAPTER
02
硬件电路设计
一、总电路系统
二、时钟脉冲和单片机复位模块
晶振是晶体振荡器的简称 在电气上它可以等效成一 个电容和一个电阻并联再串联一个电容的二端网络 电工学上这个网络有两个谐振点 以频率的高低分其 中较低的频率是串联谐振 较高的频率是并联谐振 由 于晶体自身的特性致使这两个频率的距离相当的接近 在这个极窄的频率范围内 晶振等效为一个电感 所以 只要晶振的两端并联上合适的电容它就会组成并联谐 振电路 这个并联谐振电路加到一个负反馈电路中就 可以构成正弦波振荡电路 由于晶振等效为电感的频 率范围很窄 所以即使其他元件的参数变化很大 这个 振荡器的频率也不会有很大的变化。
g
k
o
s
w
0111 d
h
l
p
t
x
CHAPTER
04
课设实现
模拟仿真软件测试
单词记忆测试器程序设计课程设计
单词记忆测试器程序设计课程设计
本次课程设计项目为单词记忆测试器程序设计,旨在设计一个可以帮
助人们更好地掌握英语单词的程序。
本程序主要包含以下几个模块:用户
信息管理模块、单词库管理模块、测试模块、统计分析模块等。
用户信息管理模块
本模块旨在提供用户信息的管理功能,包括用户的注册、登录、修改
信息等。
用户可以通过该模块完成注册,并设置用于登录的账号和密码。
同时,用户也可以在此模块中修改个人信息、修改密码等操作。
单词库管理模块
测试模块
本模块用于进行单词测试,包括单词听力测试、单词拼写测试等。
用户可以在此模块中选择自己想要进行的测试类型,然后根据测试内
容进行测试。
测试结果将会在测试完成后显示出来,用户可以查看自己的
测试成绩。
统计分析模块
本模块用于对用户测试结果进行统计分析。
管理员可以通过该模块查看用户的测试记录、测试成绩等信息,并对
用户测试数据进行统计分析,以便更好地了解用户在单词学习方面的表现。
总结
本项目设计旨在帮助用户更好地掌握英语单词,提供了用户信息管理、单词库管理、测试及统计分析等功能。
通过该项目的实现,用户可以方便
地进行单词学习和测试,提升英语单词水平。
实现一个简单的单词测试程序
实现一个简单的单词测试程序如何实现一个简单的单词测试程序单词测试是英语学习的重要环节之一。
一个简单的单词测试程序可以帮助我们检验自己的英语词汇量和记忆能力,提高学习效果。
在这篇文章中,我将介绍如何实现一个简单的单词测试程序。
1. 确定测试方式和范围在开发一个单词测试程序之前,我们需要确定测试方式和测试范围。
测试方式可以是听力、阅读、写作等方式之一。
测试范围可以是某个主题下的单词、某个等级的单词、一定数量的随机单词等。
在确定测试方式和测试范围之后,我们就可以开始编写程序了。
2. 收集单词库接下来,我们需要收集一个单词库。
单词库可以来源于专业的语言学习网站、词汇书籍、在线词典等。
我们可以将单词库保存在文本文件中,每个单词占一行。
对于每个单词,我们还可以加入其中文解释、音标等信息,方便用户学习和回忆。
3. 设计程序界面在设计程序界面时,我们需要考虑用户友好性和易用性。
程序界面可以采用图形界面或命令行界面,具体取决于编程技术和用户需求。
一个简单的程序界面可以包括如下几个部分:- 欢迎界面:包括程序名称、作者、版本号等信息;- 测试方式选择界面:选择听力、阅读还是写作方式;- 测试范围选择界面:选择测试单词的主题、等级、数量等;- 测试界面:展示测试单词、接收用户输入、给出测试结果等;- 退出界面:感谢用户使用程序,提供反馈信息、退出程序等选项。
4. 编写程序代码在设计完程序界面后,我们需要编写程序代码。
程序代码可以采用任何喜欢的编程语言来实现。
一个简单的单词测试程序的主要代码逻辑如下:```1. 读取单词库文件;2. 根据用户选择确定测试单词的范围;3. 将测试单词按某种方式随机排序;4. 进入测试界面,依次展示单词并接收用户输入;5. 每输入一个单词,就给出对错结果并记录测试结果;6. 完成测试后,展示测试结果和对错情况;7. 提供反馈信息和退出程序选项。
```5. 测试程序功能和性能在编写完程序代码后,我们需要测试程序的功能和性能。
单词记忆测试器C程序源代码(单片机)
单片机单词记忆测试器C程序源代码/************************************************************************ /**单片机单词测试程序/**设计一个以单片机为核心的单词记忆测试器;/** 实现单词的录入(为使程序具有可演示性,单词不少于10个);/**单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,/**也可以直接进入下一个或者上一个;/**单词背完后给出正确率。
/*************************************************************************/ #define uchar unsigned char#define uint unsigned int#include <reg52.h>#include "asc.h" //ASCII字模表#include "12864.h" //12864液晶屏底层驱动程序bit ERROR=1; //输入字符错误标志位bit result=0; //输入结果对错的标志位,为0是正确bit verify=1; //已按了确认键后清零sbit ERR=P2^7;uchar correctNUM; //统计测试正确的单词数,即得分/*****************************************/** 存储要测试的单词,放在ROM中/****************************************/uchar code S[10][5]={ "left ", //左"bird ", //鸟"book ", //书"tree ", //树"water ", //水"go ", //去"come ", //来"rain ", //雨"fly ", //飞"eat ", //吃} ;uchar code SL[10]={4,4,5,3,2,4,4,3,4,3};//存储各测试单词的长度uchar KeyNum[8]; //储存输入的单词/*****************************************/** 存储键盘的字母值,放在ROM中/****************************************/uchar code tab1[6][5]={{'a','b','c','d','e'},{'f','g','h','i','j'},{'k','l','m','n','o'},{'p','q','r','s','t'},{'u','v','w','x','y'},{'z',1,2,3,4}};//最后的1234 键盘值为功能键,1表示确定键,2表示不认识,3表示上一个,4表示下一个/*************************************************** 键盘扫描程序*************************************************/unsigned char kbscan() //键盘扫描{uchar hang,lie,key; //P1连行,P3连列if(P1!=0xFF||P3!=0){switch(P1&0xFF) //P1 扫行{case 0xFE:hang=5;break;//P1.0为第6行case 0xFD:hang=4;break;//P1.1为第5行case 0xFB:hang=3;break;//P1.2为第4行case 0xF7:hang=2;break;//P1.3为第3行case 0xEF:hang=1;break;//P1.4为第2行case 0xDF:hang=0;break;//P1.5为第1行}P1=0; //P1全低电平P3=0xFF;//P3全高电平switch(P3&0xFF){case 0xFE:lie=4;break; //P1.0为第5列case 0xFD:lie=3;break; //P0.5为第4列case 0xFB:lie=2;break; //P0.6为第3列case 0xF7:lie=1;break; //P0.7为第2列case 0xEF:lie=0;break; //P0.7为第1列}P1=0xFF; //P1全高电平P3=0; //P3全低电平while(P1!=0xFF||P3!=0); //按键松开后才返回值key=tab1[hang][lie];}elsekey='_';return (key);}/************************************************************************/** 主函数/**/**/*************************************************************************/void main(void){uchar hz_Num; //用于计当前测试的是第几个词,第一个为0 uchar temp[8]; //用于送液晶屏显示的临时变量uchar iword=0,Nword=0; //输入单词字母下一个计数LCD12864_init(); //LCD12864初始化ClearLCD(); //清屏en_disp(2,1,11,Asc,"INPUT WORD:",1); //在第2行第1列en_disp(4,1,1,Asc,">",1); //在第5行,第2列开始显示en_disp(6,0,8,Asc,"correct:",1); //在第7行,第1列开始显示en_disp(6,80,5,Asc,"00/10",1); //在第7行第81列P1=0xFF; //P1全高电平P3=0; //P3全低电平while(1){KeyNum[iword]=kbscan(); //扫描键盘的输入值,没按下时返回下横线hz_disp(0,48,1,hz1+hz_Num*32,1); //在第1行,第49列开始显示测试的汉字temp[0]=(hz_Num+1)/10+0x30; //将十进制数转换为ASCII字符temp[1]=(hz_Num+1)%10+0x30; //算出测试汉字的序号的第一位和第二位en_disp(0,20,1,Asc,":",1); //在第1行第21列en_disp(0,4,2,Asc,temp,1); //在第1行第5列显示测试序号if(KeyNum[iword]!='_') //键盘有按键按下{if(KeyNum[iword]==1) //如果按下了确定键{if(SL[hz_Num]==iword&&verify) //输入长度等于测试单词的长度,则正确,verify 表示按下了确认后有效一次{correctNUM+=1;if(correctNUM>10){correctNUM=10; //最多10个正确的}verify=0; //标志位清零hz_Num++; //测试下一个单词if(hz_Num==10) hz_Num=0; //最多设10个单词temp[0]=(correctNUM)/10+0x30; //将十进制数转换为ASCII字符temp[1]=(correctNUM)%10+0x30; //算出测试汉字的序号的第一位和第二位en_disp(6,80,2,Asc,temp,1); //在第7行第81列iword=0;Nword=0;en_disp(4,16,8,Asc," ",1); //在第5行,第17列开始显示}}else if(KeyNum[iword]==2||KeyNum[iword]==4)//如果按下了“不认识”或“下一个”键,直接跳到下一个单词{result=0; //跳下一个时错误灯灭ERROR=0;hz_Num++; //测试下一个单词if(hz_Num==10) hz_Num=0; //最多设10个单词iword=0;Nword=0;en_disp(4,16,8,Asc," ",1); //在第5行,第17列开始显示}else if(KeyNum[iword]==3) //如果按下了“上一个”键,直接跳到上一个单词{result=0; //跳下一个时错误灯灭ERROR=0;//测试下一个单词if(hz_Num==0) hz_Num=10; //最多设10个单词hz_Num--;iword=0;Nword=0;en_disp(4,16,8,Asc," ",1); //在第4行,第16列开始显示}else if(S[hz_Num][iword]==KeyNum[iword]) //输入的字符与测试的标准字符比较{ temp[0]=KeyNum[iword];ERROR=0; //正确就标志位置0en_disp(4,Nword+16,1,Asc,temp,1); //在第5行,第17列开始显示iword++;if(iword==8) iword=0;Nword=iword*8;verify=1;}else{ temp[0]=KeyNum[iword];ERROR=1; //错误就置1en_disp(4,Nword+16,1,Asc,temp,1); //在第5行,第17列开始显示iword++;if(iword==8) iword=0;Nword=iword*8;}result=ERROR|result; //0表示结果正确}ERR=!result; //错误指示灯}}/***********************************************************/* ASCII字模的数据表/* 码表从0x20~0x7e 即ASCII的32-127/* 纵向取模下高位8x16/*********************************************************/ unsigned char code Asc[] = // ASCII 表{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // - -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0xFC,0xFC,0x38,0x00,0x00, // -!-0x00,0x00,0x00,0x0D,0x0D,0x00,0x00,0x00,0x00,0x0E,0x1E,0x00,0x00,0x1E,0x0E,0x00, // -"-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xF8,0xF8,0x20,0xF8,0xF8,0x20,0x00, // -#-0x02,0x0F,0x0F,0x02,0x0F,0x0F,0x02,0x00,0x38,0x7C,0x44,0x47,0x47,0xCC,0x98,0x00, // -$-0x03,0x06,0x04,0x1C,0x1C,0x07,0x03,0x00,0x30,0x30,0x00,0x80,0xC0,0x60,0x30,0x00, // -%-0x0C,0x06,0x03,0x01,0x00,0x0C,0x0C,0x00,0x80,0xD8,0x7C,0xE4,0xBC,0xD8,0x40,0x00, // -&-0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00,0x00,0x10,0x1E,0x0E,0x00,0x00,0x00,0x00, // -'-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xF0,0xF8,0x0C,0x04,0x00,0x00, // -(-0x00,0x00,0x03,0x07,0x0C,0x08,0x00,0x00,0x00,0x00,0x04,0x0C,0xF8,0xF0,0x00,0x00, // -)-0x00,0x00,0x08,0x0C,0x07,0x03,0x00,0x00,0x80,0xA0,0xE0,0xC0,0xC0,0xE0,0xA0,0x80, // -*-0x00,0x02,0x03,0x01,0x01,0x03,0x02,0x00,0x00,0x80,0x80,0xE0,0xE0,0x80,0x80,0x00, // -+-0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -,-0x00,0x00,0x10,0x1E,0x0E,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00, // ---0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -.-0x00,0x00,0x00,0x0C,0x0C,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x00, // -/-0x0C,0x06,0x03,0x01,0x00,0x00,0x00,0x00,0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00, // -0- 0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00,0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00, // -1- 0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00, // -2- 0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00, // -3- 0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00, // -4- 0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x7C,0x7C,0x44,0x44,0xC4,0xC4,0x84,0x00, // -5- 0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00, // -6- 0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00, // -7- 0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00, // -8- 0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00, // -9- 0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, // -:-0x00,0x00,0x00,0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00, // -;-0x00,0x00,0x08,0x0E,0x06,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x18,0x08,0x00, // -<- 0x00,0x00,0x01,0x03,0x06,0x0C,0x08,0x00,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, // -=- 0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x08,0x18,0x30,0x60,0xC0,0x80,0x00, // ->- 0x00,0x08,0x0C,0x06,0x03,0x01,0x00,0x00,0x18,0x1C,0x04,0xC4,0xE4,0x3C,0x18,0x00, // -?- 0x00,0x00,0x00,0x0D,0x0D,0x00,0x00,0x00,0xF0,0xF8,0x08,0xC8,0xC8,0xF8,0xF0,0x00, // -@- 0x07,0x0F,0x08,0x0B,0x0B,0x0B,0x01,0x00,0xE0,0xF0,0x98,0x8C,0x98,0xF0,0xE0,0x00, // -A- 0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,0x04,0xFC,0xFC,0x44,0x44,0xFC,0xB8,0x00, // -B- 0x08,0x0F,0x0F,0x08,0x08,0x0F,0x07,0x00,0xF0,0xF8,0x0C,0x04,0x04,0x0C,0x18,0x00, // -C- 0x03,0x07,0x0C,0x08,0x08,0x0C,0x06,0x00,0x04,0xFC,0xFC,0x04,0x0C,0xF8,0xF0,0x00, // -D- 0x08,0x0F,0x0F,0x08,0x0C,0x07,0x03,0x00,0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00, // -E- 0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00,0x04,0xFC,0xFC,0x44,0xE4,0x0C,0x1C,0x00, // -F- 0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,0xF0,0xF8,0x0C,0x84,0x84,0x8C,0x98,0x00, // -G- 0x03,0x07,0x0C,0x08,0x08,0x07,0x0F,0x00,0xFC,0xFC,0x40,0x40,0x40,0xFC,0xFC,0x00, // -H- 0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x04,0xFC,0xFC,0x04,0x00,0x00, // -I- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x04,0x00, // -J- 0x07,0x0F,0x08,0x08,0x0F,0x07,0x00,0x00,0x04,0xFC,0xFC,0xC0,0xF0,0x3C,0x0C,0x00, // -K- 0x08,0x0F,0x0F,0x00,0x01,0x0F,0x0E,0x00,0x04,0xFC,0xFC,0x04,0x00,0x00,0x00,0x00, // -L- 0x08,0x0F,0x0F,0x08,0x08,0x0C,0x0E,0x00,0xFC,0xFC,0x38,0x70,0x38,0xFC,0xFC,0x00, // -M- 0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,0xFC,0xFC,0x38,0x70,0xE0,0xFC,0xFC,0x00, // -N- 0x0F,0x0F,0x00,0x00,0x00,0x0F,0x0F,0x00,0xF0,0xF8,0x0C,0x04,0x0C,0xF8,0xF0,0x00, // -O- 0x03,0x07,0x0C,0x08,0x0C,0x07,0x03,0x00,0x04,0xFC,0xFC,0x44,0x44,0x7C,0x38,0x00, // -P- 0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,0xF8,0xFC,0x04,0x04,0x04,0xFC,0xF8,0x00, // -Q- 0x07,0x0F,0x08,0x0E,0x3C,0x3F,0x27,0x00,0x04,0xFC,0xFC,0x44,0xC4,0xFC,0x38,0x00, // -R- 0x08,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,0x18,0x3C,0x64,0x44,0xC4,0x9C,0x18,0x00, // -S-0x06,0x0E,0x08,0x08,0x08,0x0F,0x07,0x00,0x00,0x1C,0x0C,0xFC,0xFC,0x0C,0x1C,0x00, // -T- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0xFC,0xFC,0x00,0x00,0x00,0xFC,0xFC,0x00, // -U- 0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,0xFC,0xFC,0x00,0x00,0x00,0xFC,0xFC,0x00, // -V- 0x01,0x03,0x06,0x0C,0x06,0x03,0x01,0x00,0xFC,0xFC,0x00,0x80,0x00,0xFC,0xFC,0x00, // -W- 0x03,0x0F,0x0E,0x03,0x0E,0x0F,0x03,0x00,0x0C,0x3C,0xF0,0xC0,0xF0,0x3C,0x0C,0x00, // -X- 0x0C,0x0F,0x03,0x00,0x03,0x0F,0x0C,0x00,0x00,0x3C,0x7C,0xC0,0xC0,0x7C,0x3C,0x00, // -Y- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x1C,0x0C,0x84,0xC4,0x64,0x3C,0x1C,0x00, // -Z- 0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0E,0x00,0x00,0x00,0xFC,0xFC,0x04,0x04,0x00,0x00, // -[- 0x00,0x00,0x0F,0x0F,0x08,0x08,0x00,0x00,0x38,0x70,0xE0,0xC0,0x80,0x00,0x00,0x00, // -\-0x00,0x00,0x00,0x01,0x03,0x07,0x0E,0x00,0x00,0x00,0x04,0x04,0xFC,0xFC,0x00,0x00, // -]- 0x00,0x00,0x08,0x08,0x0F,0x0F,0x00,0x00,0x08,0x0C,0x06,0x03,0x06,0x0C,0x08,0x00, // -^- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // -_-0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x00,0x00,0x03,0x07,0x04,0x00,0x00,0x00, // -`-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xA0,0xA0,0xA0,0xE0,0xC0,0x00,0x00, // -a- 0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00,0x04,0xFC,0xFC,0x20,0x60,0xC0,0x80,0x00, // -b- 0x08,0x0F,0x07,0x08,0x08,0x0F,0x07,0x00,0xC0,0xE0,0x20,0x20,0x20,0x60,0x40,0x00, // -c- 0x07,0x0F,0x08,0x08,0x08,0x0C,0x04,0x00,0x80,0xC0,0x60,0x24,0xFC,0xFC,0x00,0x00, // -d- 0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00,0xC0,0xE0,0xA0,0xA0,0xA0,0xE0,0xC0,0x00, // -e- 0x07,0x0F,0x08,0x08,0x08,0x0C,0x04,0x00,0x40,0xF8,0xFC,0x44,0x0C,0x18,0x00,0x00, // -f- 0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,0xC0,0xE0,0x20,0x20,0xC0,0xE0,0x20,0x00, // -g- 0x27,0x6F,0x48,0x48,0x7F,0x3F,0x00,0x00,0x04,0xFC,0xFC,0x40,0x20,0xE0,0xC0,0x00, // -h- 0x08,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x20,0xEC,0xEC,0x00,0x00,0x00, // -i- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0xEC,0xEC,0x00, // -j- 0x00,0x30,0x70,0x40,0x40,0x7F,0x3F,0x00,0x04,0xFC,0xFC,0x80,0xC0,0x60,0x20,0x00, // -k- 0x08,0x0F,0x0F,0x01,0x03,0x0E,0x0C,0x00,0x00,0x00,0x04,0xFC,0xFC,0x00,0x00,0x00, // -l- 0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,0x00,0xE0,0xE0,0x60,0xC0,0x60,0xE0,0xC0,0x00, // -m- 0x0F,0x0F,0x00,0x0F,0x00,0x0F,0x0F,0x00,0x20,0xE0,0xC0,0x20,0x20,0xE0,0xC0,0x00, // -n- 0x00,0x0F,0x0F,0x00,0x00,0x0F,0x0F,0x00,0xC0,0xE0,0x20,0x20,0x20,0xE0,0xC0,0x00, // -o- 0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,0x20,0xE0,0xC0,0x20,0x20,0xE0,0xC0,0x00, // -p- 0x40,0x7F,0x7F,0x48,0x08,0x0F,0x07,0x00,0xC0,0xE0,0x20,0x20,0xC0,0xE0,0x20,0x00, // -q- 0x07,0x0F,0x08,0x48,0x7F,0x7F,0x40,0x00,0x20,0xE0,0xC0,0x60,0x20,0x60,0xC0,0x00, // -r- 0x08,0x0F,0x0F,0x08,0x00,0x00,0x00,0x00,0x40,0xE0,0xA0,0x20,0x20,0x60,0x40,0x00, // -s- 0x04,0x0C,0x09,0x09,0x0B,0x0E,0x04,0x00,0x20,0x20,0xF8,0xFC,0x20,0x20,0x00,0x00, // -t-0x00,0x00,0x07,0x0F,0x08,0x0C,0x04,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00,0x00, // -u- 0x07,0x0F,0x08,0x08,0x07,0x0F,0x08,0x00,0x00,0xE0,0xE0,0x00,0x00,0xE0,0xE0,0x00, // -v- 0x00,0x03,0x07,0x0C,0x0C,0x07,0x03,0x00,0xE0,0xE0,0x00,0x00,0x00,0xE0,0xE0,0x00, // -w-0x07,0x0F,0x0C,0x07,0x0C,0x0F,0x07,0x00,0x20,0x60,0xC0,0x80,0xC0,0x60,0x20,0x00, // -x-0x08,0x0C,0x07,0x03,0x07,0x0C,0x08,0x00,0xE0,0xE0,0x00,0x00,0x00,0xE0,0xE0,0x00, // -y-0x47,0x4F,0x48,0x48,0x68,0x3F,0x1F,0x00,0x60,0x60,0x20,0xA0,0xE0,0x60,0x20,0x00, // -z-0x0C,0x0E,0x0B,0x09,0x08,0x0C,0x0C,0x00,0x00,0x40,0x40,0xF8,0xBC,0x04,0x04,0x00, // -{-0x00,0x00,0x00,0x07,0x0F,0x08,0x08,0x00,0x00,0x00,0x00,0xBC,0xBC,0x00,0x00,0x00, // -|-0x00,0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,0x04,0x04,0xBC,0xF8,0x40,0x40,0x00, // -}-0x00,0x08,0x08,0x0F,0x07,0x00,0x00,0x00,0x08,0x0C,0x04,0x0C,0x08,0x0C,0x04,0x00, // -~-0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0x60,0x30,0x60,0xC0,0x80,0x00, // -•-0x07,0x07,0x04,0x04,0x04,0x07,0x07,0x00,};/***********************************************************/* 显示汉字的字模数组存储要测试的单词中文/* 纵向取模下高位16x16/* 下一个汉字为上一个汉字在数组中位置的hz1+32/*********************************************************/unsigned char code hz1[] ={/*-- 文字: 左--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x10,0x10,0x10,0x10,0x11,0x1E,0xF0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00, 0x04,0x08,0x12,0x62,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0x02,0x02,0x00, /*-- 文字: 鸟--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x00,0x3F,0x20,0x20,0x68,0xA6,0x20,0x22,0x21,0x3E,0x00,0x00,0x00,0x00, 0x00,0x08,0x08,0xC8,0x48,0x48,0x48,0x48,0x48,0x48,0x4A,0x41,0x42,0x7C,0x00,0x00, /*-- 文字: 书--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x9F,0x40,0x20,0x00,0x00,0x00, 0x80,0x80,0x80,0x80,0x80,0x80,0xFF,0x80,0x80,0x80,0x84,0x82,0x84,0xF8,0x00,0x00,/*-- 文字: 树--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x08,0x09,0xFF,0x09,0x08,0x24,0x23,0x20,0x3F,0x00,0x09,0x08,0x08,0xFF,0x08,0x00, 0x60,0x80,0xFF,0x00,0x84,0x08,0x30,0xC0,0x38,0x00,0x00,0xC2,0x01,0xFE,0x00,0x00, /*-- 文字: 水--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x04,0x04,0x04,0x05,0x06,0x00,0xFF,0x06,0x01,0x02,0x04,0x18,0x00,0x00,0x00, 0x04,0x08,0x10,0x60,0x80,0x02,0x01,0xFE,0x00,0x80,0x40,0x20,0x10,0x08,0x08,0x00, /*-- 文字: 去--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x00,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x00,0x00,0x00, 0x80,0x80,0x82,0x86,0x8A,0x92,0xE2,0x82,0x82,0x82,0x8A,0x86,0x83,0x80,0x80,0x00, /*-- 文字: 来--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x10,0x10,0x14,0x13,0x10,0x10,0xFF,0x10,0x10,0x11,0x16,0x10,0x10,0x00,0x00, 0x84,0x84,0x88,0x88,0x90,0xA0,0xC0,0xFF,0xC0,0xA0,0x90,0x88,0x88,0x84,0x84,0x00, /*-- 文字: 雨--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x47,0x44,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x44,0x47,0x40,0x00, 0x00,0xFF,0x00,0x00,0x90,0x48,0x00,0xFE,0x00,0x90,0x48,0x02,0x01,0xFE,0x00,0x00, /*-- 文字: 飞--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x7F,0x02,0x05,0x08,0x10,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0x08,0x84,0x42,0x0F,0x00, /*-- 文字: 吃--*//*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/0x00,0x3F,0x20,0x20,0x3F,0x04,0x08,0x32,0xD2,0x12,0x12,0x12,0x13,0x10,0x10,0x00, 0x00,0xF0,0x20,0x20,0xF0,0x00,0x0C,0x12,0x22,0x42,0x42,0x82,0x02,0x02,0x0E,0x00, };/*-----------------------------------------------------------*/#define LCD_OFF 0x3E#define LCD_ON 0x3F#define Add_X 0xB8 //the start address of the page 0 ;(0~7)#define Add_Y 0x40 //the start address of the Y counter ; (0~64)#define Add_Z 0xC0 //the start address of the DDRAM ; (0~64)/*-----------------------------------------------------------*/#define LCD12864_DATA_PORT P0sbit LCD12864_EN =P2^4;sbit LCD12864_RW =P2^3; //0:write ; 1:readsbit LCD12864_RS =P2^2; //0:the command .1:the datasbit LCD12864_CS_L =P2^1; //select the left of the lcd when 1sbit LCD12864_CS_R =P2^0;sbit LCD12864_RST =P2^5;/*------------------------------------------------------------*/void delayus(unsigned int us){while(us--);}void delayms(unsigned ms){unsigned int i,j;for (i=0;i<ms;i++){for (j=0;j<1000;j++);}}/*--------------------------select the LCD--------------------*/void LCDSel(unsigned char sel){switch(sel){case 0: LCD12864_CS_L=0;LCD12864_CS_R=0;break;case 1: LCD12864_CS_L=1;LCD12864_CS_R=0;break; //leftcase 2: LCD12864_CS_L=0;LCD12864_CS_R=1;break; //rightdefault:;};}/*------------------------------------------------------------*/void WaitLCD(){unsigned char flag;LCD12864_DATA_PORT=0xFF;LCD12864_RW=1;LCD12864_RS=0;LCD12864_EN=1;LCD12864_EN=1;LCD12864_EN=0;LCD12864_DATA_PORT=0xFF; //读有效数据LCD12864_RW=1;LCD12864_RS=0;;LCD12864_EN=1;do{flag=LCD12864_DA TA_PORT;LCD12864_DATA_PORT=0xFF;} while((flag&0x80)==1); //读BUSY信号//仅当第7位为0时才可操作LCD12864_EN=0;} //*//*-------------------------------------------------------------*/void WriteDatToLCD12864(unsigned char dat){WaitLCD();LCD12864_RS=1; //the dataLCD12864_RW=0; //writeLCD12864_DATA_PORT=dat;LCD12864_EN=1;;LCD12864_EN=0;}/*-------------------------------------------------------------*/void WriteCmdToLCD12864(unsigned char cmd){WaitLCD();LCD12864_RS=0; //the commandLCD12864_RW=0; //writeLCD12864_DATA_PORT=cmd;LCD12864_EN=1;;LCD12864_EN=0;}/*-------------------------------------------------------------*/unsigned char ReadDatFromLCD12864(void){unsigned char dat;WaitLCD();LCD12864_DATA_PORT=0xFF; //读空操作LCD12864_RS=1; //the dataLCD12864_RW=1; //readLCD12864_EN=1;LCD12864_EN=1;LCD12864_EN=0;LCD12864_DATA_PORT=0xFF; //来读有效数据LCD12864_RS=1; //the dataLCD12864_RW=1; //readLCD12864_EN=1;dat=LCD12864_DATA_PORT;LCD12864_EN=0;return dat;}/*--------------------------------------------------------------*///from the chip manualvoid LCD12864_init(void){LCD12864_RST=0;delayus(50);LCD12864_RST=1;LCDSel(0); //left and rightWriteCmdToLCD12864(LCD_OFF);WriteCmdToLCD12864(LCD_ON);}//x:0~7void SetX(unsigned char x) //写入X的地址{WriteCmdToLCD12864(Add_X+x);}//y:0~127void SetY(unsigned char y){WriteCmdToLCD12864(Add_Y+y);}//z:0~63void SetZ(unsigned char z){WriteCmdToLCD12864(Add_Z+z);}void ClearLCD(){int i,j;LCDSel(0);for(j=0;j<8;j++){WriteCmdToLCD12864(LCD_ON);SetX(j);WriteCmdToLCD12864(Add_Y); //diffrent from SetY(0),SetY(64);SetZ(0);for (i=0;i<64;i++){WriteDatToLCD12864(0x00);}}}/*-------------------------显示某点------------------*///左上角第一个点为原点,向下Y为轴,向右为X轴//x:0~63~127 y:0~63//flag : 0:擦除某个点// 1:显示某个点unsigned char code Tab[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};void Dot(char x,char y,bit flag){unsigned char dat;// y=63-y; //坐标轴的移动和反转if(x<64) //如果小于64则是在左半屏,CS1片选{LCDSel(1);SetX(y/8); //set the page addressSetY(x); //set the Y adressdat=ReadDatFromLCD12864();if(flag)dat=dat|(Tab[y%8]);elsedat=dat&(~(Tab[y%8])); //擦除某个点就是在原来的数据基础上与上(要擦的位置的取反)SetY(x); //set the Y adressWriteDatToLCD12864(dat);}else if(x<128){LCDSel(2);SetX(y/8);SetY(x-64);dat=ReadDatFromLCD12864();if(flag)dat=dat|(Tab[y%8]);elsedat=dat&(~(Tab[y%8]));SetY(x-64);WriteDatToLCD12864(dat);}}//draw a line between point(x1,y1) and point(x2,y2)//flag 0:erase the line 1:draw a linevoid Line(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag){unsigned char i;unsigned char temp;float k;if(x1==x2){if(y1>y2){ temp=x1;x1=x2;x2=temp;temp=y1;y1=y2;y2=temp;}for(i=y1;i<=y2;i++){Dot(x1,i,flag);}}else{if(x1>x2){temp=x1;x1=x2;x2=temp;temp=y1;y1=y2;y2=temp;}k=(float)(y2-y1)/(float)(x2-x1);for(i=0;i<x2-x1;i++){Dot(x1+i,(unsigned char)(y1+k*i),flag);}}}/*-------------------------------------------------------------*/void Rect(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag){Line(x1,y1,x2,y1,flag);Line(x2,y1,x2,y2,flag);Line(x2,y2,x1,y2,flag);Line(x1,y2,x1,y1,flag);}/*-------------------------------------------------------------*//*void RectArea(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag) {unsigned char temp;unsigned char i;if(x1>x2){temp=x1;x1=x2;x2=temp;temp=y1;y1=y2;y2=temp;}for(i=0;i<=x2-x1;i++){Line(x1+i,y1,x1+i,y2,flag);}}//16*16//x行0~7 y列0~127//flag 0:汉字反白显示void hz_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code * hz,bit flag) {unsigned char i,j;for (j=0;j<n;j++){//显示上半个汉字for(i=0;i<16;i++){//点的位置是在左还是右if(y+16*j+i<64){LCDSel(1);WriteCmdToLCD12864(LCD_ON);SetX(x);SetZ(0);SetY(y+16*j+i);if(flag)WriteDatToLCD12864(hz[32*j+i]);elseWriteDatToLCD12864(~hz[32*j+i]);}else if(y+16*j+i<128){LCDSel(2);WriteCmdToLCD12864(LCD_ON);SetX(x);SetZ(0);SetY(y+16*j+i-64);if(flag)WriteDatToLCD12864(hz[32*j+i]);elseWriteDatToLCD12864(~hz[32*j+i]);}}//显示下半个汉字for(i=16;i<32;i++){//先判断点是在左还是在右if(y+16*j+i-16<64){ if(x+1<8) //最后一行显示上半个字{LCDSel(1);WriteCmdToLCD12864(LCD_ON);SetX(x+1);SetZ(0);SetY(y+16*j+i-16);if(flag)WriteDatToLCD12864(hz[32*j+i]);elseWriteDatToLCD12864(~hz[32*j+i]);}}else if(y+16*j+i-16<127){if(x+1<8) //最后一行{LCDSel(2);WriteCmdToLCD12864(LCD_ON);SetX(x+1);SetZ(0);SetY(y+16*j+i-16-64);if(flag)WriteDatToLCD12864(hz[32*j+i]);elseWriteDatToLCD12864(~hz[32*j+i]);}}}}}//x:行0~7//y:列0~127//asc: 指向标准交换码//string: 指向要显示的字符串//flag: 0 反白显示void en_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code *asc,unsigned char *string,bit flag){unsigned char i,j,loc;for (j=0;j<n;j++){loc=string[j]-0x20; //确定要显示的字符在asc表中的位置(乘上16),见字模ASC表,H头文件//显示上半个字母for(i=0;i<8;i++){//点的位置是在左还是右if(y+8*j+i<64){LCDSel(1);WriteCmdToLCD12864(LCD_ON);SetX(x);SetZ(0);SetY(y+8*j+i);if(flag)WriteDatToLCD12864(asc[16*loc+i]);elseWriteDatToLCD12864(~asc[16*loc+i]);}else if(y+8*j+i<128){LCDSel(2);WriteCmdToLCD12864(LCD_ON);SetX(x);SetZ(0);SetY(y+8*j+i-64);if(flag)WriteDatToLCD12864(asc[16*loc+i]);elseWriteDatToLCD12864(~asc[16*loc+i]);}}//显示下半个字母for(i=8;i<16;i++){//先判断点是在左还是在右if(y+8*j+i-8<64){if(x+1<8) //最后一行{LCDSel(1);WriteCmdToLCD12864(LCD_ON);SetX(x+1);SetZ(0);SetY(y+8*j+i-8);if(flag)WriteDatToLCD12864(asc[16*loc+i]);elseWriteDatToLCD12864(~asc[16*loc+i]);}}else if(y+8*j+i-8<128){if(x+1<8) //最后一行{LCDSel(2);WriteCmdToLCD12864(LCD_ON);SetX(x+1);SetZ(0);SetY(y+8*j+i-8-64);if(flag)WriteDatToLCD12864(asc[16*loc+i]);elseWriteDatToLCD12864(~asc[16*loc+i]);}}}}}/******************************** END ************************************/。
单词记忆测试器程序设计Word
扬州大学水利与能源动力工程学院课程设计报告题目:单词记忆测试器程序设计课程:单片机原理及应用课程设计专业:电气工程及其自动化班级:电气1202*名:**学号: *********第一部分任务书《单片机原理及应用》课程设计任务书一、课题名称单词记忆测试器程序设计二、课程设计目的课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。
《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。
单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。
为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。
通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。
三、课程设计内容设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。
1. 系统方案设计:综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。
2. 硬件电路设计:对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。
3. 软件设计:根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。
4. 调试:在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
b6 db 1000h dup('$')b9 db 'You do not know the following words , please remember them agian',0ah,0dh,'$' f1 db 'very good,congratulations to you',0ah,0dh,'$'call zi4;输出不认识的单词mov ah,02h;回车换行mov dl,0dhint 21hmov ah,02hmov dl,0ahint 21hcall zi2;将不认识的单词存到B6所指单元call zi2;将不认识的单词存到B6所指单元m2:inc dilea si,b6;将不认识的单词放到B6所指单元1111mov si,z;保留SI的地址zi4 procpush axpush bxpush cxpush dxpush sipush dilea dx,b9;输出不认识的单词mov ah,09hint 21hlea dx,b6mov ah,09hint 21hpop dipop sipop dxpop cxpop bxpop axretzi4 endp操作说明:一、输入单词:;1、提示输入单词,输入最少5个、最多255个英文单词,每个单词不超过20个字符。
2、若直接回车,则结束单词输入,进入单词测试;3、输足20个字符,自动进入下一个单词的输入;4、不足20个字符个字符,按回车键进入下一个单词的输入。
;二、单词记忆测试:1、从输入的第一个单词开始测试2、键入'y'(不分大小写)或'n',回答是否认识,不需按回车键确认,其它按键无效;3、紧接着,没有提示,可按上移键或下移键循环测试;4、按Esc键结束测试。
三、计算单词识别率并显示输出;四、提示是否进行下一组单词的输入和测试,键入'y'(不分大小写)或'n'选择是否继续,不需按回车键确认,其它按键无效。
本程序在MASMPlus 1.2集成环境下通过编译,经过调试,运行正确。
Code SegmentAssume CS:Code,DS:Code; -------------------------------------; 功能:显示指定地址(Str_Addr)的字符串; 入口:Str_Addr=字符串地址(要求在数据段); 用法: Output Str_Addr 用法举例:Output PromptStr)Output MACRO Str_Addrpush axlea dx,Str_Addrmov ah,9int 21hpop axEndM; -------------------------------------; 功能:输出一个字符; 入口:dl=要显示的字符Output_Chr proc Nearpush axmov ah,02hint 21hpop axretOutput_Chr endp; -------------------------------------; 功能:输出回车换行Output_CTLF proc Nearpush axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop axretOutput_CTLF endp; -------------------------------------; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示; 入口:AX=二进制数; 出口:在当前光标位置显示转换后的ASCII码数字Dec_ASCII Proc Nearpush dxpush bxpush dimov bx,10lea di,Temp_Save[6]mov BYTE ptr [di],'$'dec diDivide: xor dx,dxdiv bxor dl,30hmov [di],dldec ditest ax,0ffffhjnz Divideinc dipush dipop dxmov ah,9int 21hpop dipop bxpop dxretTemp_Save db 7 dup(?)Dec_ASCII EndP; -------------------------------------; 功能:键盘输入一个字符,若输入的是'y'或'n'(不分大小写),则显示并返回; 入口:无; 出口:若输入的是'y',进位标志置位;若输入的是'n',进位标志复位。
Yes_or_No proc Nearpush dxpush axInput_Chr: mov ah,7 ;不带回显的键盘输入int 21hmov dl,aland al,0dfhcmp al,'Y'jnz $+5stcjmp $+7cmp al,'N'jnz Input_Chrclcmov ah,2int 21hpop axpop dxretYes_or_No Endp; -------------------------------------Input_Words Proc Near ;输入一组单词xor cl,cl ;输入的单词数目初值lea bx,Buffer ;数据缓冲区地址mov di,bxOutput Prompt_Str1 ;提示输入单词Input_Words: cmp cl,255jz Termanate ;限定最多255个单词mov [bx.Recognise],No ;初始化识别标志mov [bx.previous],di ;前一个节点地址mov [bx.Next],Chrs+1 ;每个单词最多字符数mov di,bxlea dx,[bx.Next] ;键盘输入缓冲区地址mov ah,0ah ;输入单词int 21hmov si,dxinc silodsb ;读入实际输入的字符个数,即单词长度test al,al ;直接回车?jz Termanate ;是,结束单词输入inc cl ;累计输入的单词数目xor ah,ahadd si,axmov [si],'$' ;使之能用dos功能调用9号功能显示这个字符串(单词)inc simov [bx.Next],si ;下一个节点地址mov bx,sicall Output_CTLF ;输出一个回车、换行jmp Input_Words ;输入下一个单词Termanate: cmp cl,5jb Input_Words ;限定最少5个单词mov Words,cl ;保存单词数目lea si,Buffer ;数据缓冲区地址mov bx,[bx.previous]mov [si.previous],bx ;把第一个节点的前一个节点地址指向最后一个节点mov [bx.Next],si ;把最后一个节点的下一个节点地址指向第一个节点,形成循环链表 call Output_CTLFretInput_Words EndP; -------------------------------------Test_Words Proc Nearcall Output_CTLFcall Output_CTLFlea dx,[si.Next][2]mov ah,9int 21hcall Output_CTLFOutput Prompt_Str2 ;要求回答是否认识这个词汇,回答字母不分大小写Recognise: or [si.Recognise],Yescall Yes_or_Nojc Up_Downand [si.Recognise],NoUp_Down: xor ah,ahint 16hcmp ah,KBEscjnz $+3retcmp ah,KBUpjnz Next_KBDownmov si,[si.previous]jmp Test_WordsNext_KBDown: cmp ah,KBDownjnz Up_Downmov si,[si.Next]jmp Test_WordsTest_Words EndP; -------------------------------------Statics_Words Proc Near ;计算单词识别率mov cl,Words ;取单词数xor ch,chlea si,Buffer ;数据缓冲区地址mov bx,[si.Next]xor ax,axL0: add al,[si.Recognise] ;累加识别率mov si,[si.Next]loop L0mov bl,100mul bldiv WordsOutput Prompt_Str3 ;提示显示单词识别率call Dec_ASCII ;把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示mov dl,'%'call Output_Chr ;显示输出一个字符retStatics_Words EndP; -------------------------------------Chrs equ 20 ;单词最多字符数Yes equ 1 ;认识No equ 0 ;不认识KBEsc equ 1 ;Esc键扫描码KBUp equ 48H ;↑键扫描码KBD own equ 50H ;↓键扫描码; -------------------------------------; 定义结构类型Words_Table Struc ;单词链表Recognise db ? ;识别标志(是否认识这个单词)previous dw ? ;前一个节点地址Next dw ? ;下一个节点地址Words_Table EndS; -------------------------------------Prompt_Str1 db 'Pl ease input words:',13,10,'$' ;“请输入单词”提示信息Prompt_Str2 db 'do you know it ?(y/n):$' ;“是否认识单词”提示信息Prompt_Str3 db 7,13,10,13,10,'your answer rate is: $' ;“单词识别率”提示信息Prompt_Str4 db 7,13,10,13,10,'Do you want to test again(y/n)?$' ;“测试下一组单词?”提示信息Words db 0 ;实际输入的单词数目Press_Key db 7,13,10,13,10,'The complated. Press any key to exit...$' ;操作完成按任意键结束程序提示信息Start: push cspop dspush cspop es ;使数据段、附加段与代码段同段InputWord: call Input_Words ;输入一组单词call Test_Words ;测试识别率call Statics_Words ;计算单词识别率Output Prompt_Str4 ;再测试一组单词?call Yes_or_Nocall Output_CTLFcall Output_CTLFjc InputWord; -------------------------------------Exit_Proc: Output Press_Key ;提示操作完成,按任意键结束程序mov ah,1int 21hmov ah,4ch ;结束程序int 21hBuffer: ;数据缓冲区Code ENDSEND Start ;编译到此结束1.实现单词的录入(为使程序具有可演示性,单词不少于10个)。