单词记忆测试器程序的设计说明
- 格式:doc
- 大小:214.50 KB
- 文档页数:33
单词记忆计数器课程设计一、课程目标知识目标:1. 学生能掌握本节课所学的英语单词及其基本用法;2. 学生能理解单词记忆计数器的基本原理及其在英语学习中的应用;3. 学生了解如何运用计数器进行有效的单词记忆。
技能目标:1. 学生掌握使用单词记忆计数器进行单词记忆的方法;2. 学生能够运用所学单词进行简单的句子编写;3. 学生通过计数器提高英语单词记忆速度和效果。
情感态度价值观目标:1. 培养学生主动参与英语学习的兴趣,提高学习积极性;2. 培养学生良好的团队协作精神,学会与同学分享和交流;3. 增强学生对英语学习的自信心,激发学习潜力。
分析课程性质、学生特点和教学要求:本课程针对小学三年级学生,结合英语学科特点,以单词记忆为核心,设计实用性的单词记忆计数器课程。
此阶段学生好奇心强,求知欲旺盛,但注意力容易分散。
因此,课程目标需具体、明确且易于实现。
通过分解目标为具体学习成果,有助于激发学生的学习兴趣,提高学习效果。
后续教学设计和评估将围绕以上课程目标展开,确保学生在知识、技能和情感态度价值观方面取得全面发展。
二、教学内容本节课教学内容以人教版小学英语三年级上册教材为基础,结合课程目标,选择以下内容:1. 单词学习:挑选与日常生活紧密相关的高频单词,如动物、水果、颜色等类别,共计20个单词。
2. 单词记忆计数器原理:介绍单词记忆计数器的基本原理,让学生了解如何通过计数器提高单词记忆效率。
3. 教学大纲:(1)第一课时:导入单词学习,让学生初步了解计数器原理,学会使用计数器进行单词记忆。
(2)第二课时:深入讲解单词记忆技巧,运用计数器进行实际操作,提高单词记忆效果。
(3)第三课时:通过小组合作,让学生运用所学单词进行句子编写,巩固所学知识。
(4)第四课时:总结课程内容,进行单词记忆竞赛,检验学生的学习成果。
教学内容安排和进度:- 第一周:完成第一、二课时,学习20个单词,掌握计数器基本原理。
- 第二周:完成第三课时,运用所学单词进行句子编写。
基于单片机的单词记忆器设计单片机单词记忆器设计可以通过以下步骤实现:1. 硬件设计:选择适合的单片机开发板或芯片,例如Arduino、Raspberry Pi等。
根据需求,设计并连接合适的输入和输出设备,如按钮、显示屏和喇叭等。
2. 单词库准备:将需要记忆的单词以文本文件的形式存储在单片机的存储器中,可以使用SD卡、SPI Flash或EEPROM等。
3.用户界面设计:使用按钮和显示屏实现用户与记忆器的交互界面。
例如,通过按下按钮来选择单词,并在显示屏上显示相应的单词和释义等信息。
4.单词显示和播放:根据用户选择的单词,在显示屏上显示该单词的释义,并通过喇叭或耳机输出单词的发音。
可以使用相应的语音合成库或芯片实现发音功能。
5.记忆训练模式:设计相应的记忆训练模式,例如根据顺序或随机选择单词进行测试和复习。
可以通过按下不同的按钮或在界面上选择相应的模式。
6.学习记录和进度统计:设计记忆器可以记录用户的学习历史和进度,例如已经学习的单词数量、学习时间等信息。
可以通过单片机的存储器或在外部存储设备中保存这些信息。
7.能源管理:考虑使用低功耗设计,例如增加电源管理模块,以延长记忆器的电池寿命。
添加睡眠模式,当记忆器长时间不使用时,自动进入低功耗状态。
8.软件运行控制:根据硬件设计、用户界面和功能要求,编写相应的单片机代码。
包括读取单词库文件、界面交互、单词显示和发音等功能的实现。
9.调试和测试:将代码烧录到单片机上,并通过调试和测试验证各个功能的正确性和稳定性。
根据测试结果进行适当的优化和改进。
最后,对于特定需求和设计约束,可能需要根据实际情况进行适当的调整和修改。
案例综合记忆测试软件系统设计◆图形界面编程◆I/O文件流编程◆多线程编程◆常用API编程◆面向对象基础2011-11目录题目一记忆测试系统 (3)题目简介 (3)1.1设计要求 (3)1.2总体设计 (4)1.2.1 MemoryGame.java(主类) (5)1.2.2 MemoryTestArea.java (6)1.2.3 Block.java (6)1.2.4 Record.java (6)1.2.5 ShowRecordDialog.java (6)1.2.6 People.java (7)1.3详细设计及实现 (7)1.3.1 MemoryGame类 (7)1.3.2 MemoryTestArea类 (11)1.3.3 Block类 (17)1.3.4 ShowRecordDialog类 (18)1.3.5 People类 (20)1.3.6 Record类 (21)记忆测试系统题目简介本游戏是通过由用户点击图片显示出图片后,如果是相同的,便保持图形,如果用户点开的是不同的图片则先前点击的图片被清空。
当用户同时点击出规定数目的图片后,弹出保存成绩框。
主要内容:◆设计要求◆总体设计◆详细设计◆代码调试◆软件开发◆课程设计题目软件效果图记忆测试系统软件的运行效果图如下所示:图1.0 记忆系测试统软件的运行效果1.1设计要求记忆测试系统是通过回忆法测试记忆能力,测试手段分为初级、中级、高级三个级别。
(一)记忆测试系统设计内容、要求:(1)单击“选择级别”菜单可以选择初级、中级或高级。
(2)单击“查看排行榜”菜单可以查看初级记忆榜、中级记忆榜或高级记忆榜,通过记忆榜存储每个级别的成绩。
(3)选择级别后,将出现相应级别的测试区。
测试区由m*n个方块组成,程序通过设置m和n的值来确定相应的测试级别,例如,对于初级级别,m=5,n=6。
每个方块上都有一个图标,但该图标默认不可见。
用鼠标单击测试区中的任何一个方块,则计时器开始启动动,同时该方块上的图标将显示出来。
单词记忆测试器 Prepared on 22 November 2020摘要随着现代社会的发展,电子技术的进步我们有目共睹,计算机是现代电子技术的成果。
在现实生活中、科学研究中计算机起着越来越重要的作用。
微型计算机原理这门课程是对计算机进一步的了解与接触,微型计算机原理是一门培养计算机应用能力的技术基础课程。
本课程主要介绍了有关微型计算机的硬件基础知识、基本原理,掌握汇编语言的指令以及编程应用。
本课程设计是基于微机原理与接口技术的简单应用。
本设计以8086cpu为处理器,利用8255处理芯片的复位功能来实现对于单词的录入,读取。
以12854点阵液晶屏为显示器件,并使用5×6距阵键盘为输入设备,实现了功能全面的人机界面和高速的数据处理功能,,可储存10-20个英文单词,作为记忆测试用。
关键词:8086cpu;8255处理芯片;12854点阵液晶屏 5*6矩阵键盘目录1绪论 (1)基本内容 (1)用途及特点 (1)2方案选择及论证 (2)设计方案 (2) (2) (2)方案论证 (2)3硬件系统说明 (4)硬件设计思路 (4)中央处理模块 (4)显示模块的硬件部分介绍 (4)矩阵键盘 (7)系统构成框图 (8)芯片选择 (9)8086CPU内部结构及其各引脚 (9)8255A处理芯片 (10)电路原理图设计 (13)存储空间与I/O地址分配 (14)4 软件系统说明 (15)软件设计思路 (15) (15) (16) (18)矩阵键盘输入模块 (19)LCD12864显示模块 (19)显示字模码的提取模块 (20)源程序清单 (20)5所选芯片清单 (28)总结 (29)致谢 (30)参考文献 (31)1绪论随着现代社会的发展,电子技术的进步我们有目共睹,计算机是现代电子技术的成果。
在现实生活中、科学研究中计算机起着越来越重要的作用。
多媒体技术、网络技术、智能信息处理技术、自适用控制技术、数据挖掘与处理技术等都离不开计算机。
1.目的和意义目前英语地位日趋重要,单词的词汇量是一个人英语能力及水平极大的重要体现, 而背单词依旧是困扰许多人的地方,原因如下:英语单词多而繁杂,面对整整一本的单词词典人们总是望而却步,不从何入手。
开始记忆以后没有安排恰当计划,零散的记忆,效率低下,久而久之看不见成果,便缺乏动力。
根据双重遗忘理论,人们不仅仅是忘记了单词本身,还会忘记了今天自己该复习什么单词双重遗忘让我们错失了将单词从短期记忆转化成长期记忆的机会。
背单词的行为本身涉及到两个概念“记忆”和“遗忘”。
记忆是将需要记忆的元素在大脑中形成一种记忆的链结。
它是学习的过程。
艾宾浩斯曾提出,记忆可以分为瞬时记忆、短时记忆和长期记忆[2]。
遗忘是指记忆元素之间的链结弱化甚至消失,导致人们对某个记忆元素不再回忆起来。
记忆和遗忘相互制衡并存,但它们是有规律的,这就是著名的“艾宾浩斯遗忘原理”也就是“记忆曲线”或者“遗忘曲线”。
众所周知,要记住一样东西必须反复的复习重复,才能达到牢记状态,而艾宾浩斯遗忘原理告诉我们遵循记忆与遗忘的规律进行复习,将会事半功倍。
鉴于以上种种原因,本次项目设计了基于艾宾浩斯记忆曲线的单词记忆的系统,通过它,可以解决人们背单词的困扰,系统能够每天提供新增单词交由用户记忆,可以动态的根据“记忆曲线”将你最该复习的单词呈现给你,将极大的提高人们记忆效率。
2. 开发目标该系统将主要实现以下几个目标与功能:1.帮助用户实现信息化管理自己记忆单词的日程安排。
2.提供友好的界面供用户复习浏览单词3.根据艾宾浩斯记忆曲线原理生成用户记忆曲线。
4.根据用户操作动态修正用户记忆曲线参数。
5.根据用户记忆曲线动态调整复习计划。
6.根据用户复习计划初始化任务列表。
7.实现任务单词推送次序调整动态更新。
系统通过实现以上几个核心功能,达到提高用户记忆效率的效果。
3. 系统总体结构图单词记忆系统由词库模块、复习计划维护模块、复习模块、浏览模块、用户模块等子模块构成。
课程设计课程名称:管理信息系统课程设计题目:学生背单词系统设计(C语言)学生姓名:学号:班级:专业:信息管理与信息系统指导教师:目录1系统的背景分析 (3)1.1 课程设计的目的 (3)1.2 对课程设计的基本要求 (3)2学生背单词系统的设计过程 (3)2.1 变量和结构体说明 (3)2.2 概要设计 (4)2.3 树形结构模型图 (5)2.4 课程流程图 (5)2.5 背单词系统的操作演示 (6)3总结和心得体会 (10)附录课程详细代码............................................................................... 错误!未定义书签。
学生背单词系统设计(C语言)1 系统的背景分析该系统是帮助单词背诵单词的软件,要求用户可以选择背诵的词库,并可以编辑自己的词库,系统可以给出中文,让单词输入其英文意思,也可输出英文让单词输入中文意思,并判定词义是否正确,如不正确给出提示并要求用户重新输入,如正确给以鼓励,还应有词语预览功能。
它的基本功能如下:词库的维护,课程预览,显示中文用户输入英文的背诵方法,显示英文用户输入中文的背诵方法,背诵成绩的记录。
1.1 课程设计的目的:综合训练单词用C语言编程解决问题和处理问题的能力,巩固其对C语言课程内容和知识的掌握。
1.2 对课程设计的基本要求:1 尽量多的应用C语言中所学到的知识和语句;2 课程设计前应书写开题报告主要内容包括(对题目分析和该课程设计的概要设计);3 课程设计后应交《课程设计报告》,和软件原代码及编译后的应用软件;4 课程设计最后一次上机实验时检查题目的完成情况;5 课程设计中必须用到的内容为:(1) 文件的存取;(2) 结构体的使用;(3) 数组的使用;(4) 指针操作;2 学生背单词系统的设计过程2.1变量和结构体说明(1) 单词信息的结构体如下:typedef struct word//单词的结构体{char en[MAX_CHAR]; // 英文形式char no[MAX_CHAR]; //中文形式}word;(2) 存放单词的信息的变量如下:word s[MAX_NUM]; //单词数组int num; //单词个数2.2 概要设计(1) 定义结构体数组用来存放单词的信息(2) 单词信息存放在data.txt中,文件格式如下:单词个数—长度为4个字节第1个单词的信息-----长度为sizeof(word)第2个单词的信息-----长度为sizeof(word)第3个单词的信息-----长度为sizeof(word)第4个单词的信息-----长度为sizeof(word)第5个单词的信息-----长度为sizeof(word)第6个单词的信息-----长度为sizeof(word)第7个单词的信息-----长度为sizeof(word)第8个单词的信息-----长度为sizeof(word)。
单词记忆测试器程序设计课程设计
本次课程设计项目为单词记忆测试器程序设计,旨在设计一个可以帮
助人们更好地掌握英语单词的程序。
本程序主要包含以下几个模块:用户
信息管理模块、单词库管理模块、测试模块、统计分析模块等。
用户信息管理模块
本模块旨在提供用户信息的管理功能,包括用户的注册、登录、修改
信息等。
用户可以通过该模块完成注册,并设置用于登录的账号和密码。
同时,用户也可以在此模块中修改个人信息、修改密码等操作。
单词库管理模块
测试模块
本模块用于进行单词测试,包括单词听力测试、单词拼写测试等。
用户可以在此模块中选择自己想要进行的测试类型,然后根据测试内
容进行测试。
测试结果将会在测试完成后显示出来,用户可以查看自己的
测试成绩。
统计分析模块
本模块用于对用户测试结果进行统计分析。
管理员可以通过该模块查看用户的测试记录、测试成绩等信息,并对
用户测试数据进行统计分析,以便更好地了解用户在单词学习方面的表现。
总结
本项目设计旨在帮助用户更好地掌握英语单词,提供了用户信息管理、单词库管理、测试及统计分析等功能。
通过该项目的实现,用户可以方便
地进行单词学习和测试,提升英语单词水平。
实现一个简单的单词测试程序如何实现一个简单的单词测试程序单词测试是英语学习的重要环节之一。
一个简单的单词测试程序可以帮助我们检验自己的英语词汇量和记忆能力,提高学习效果。
在这篇文章中,我将介绍如何实现一个简单的单词测试程序。
1. 确定测试方式和范围在开发一个单词测试程序之前,我们需要确定测试方式和测试范围。
测试方式可以是听力、阅读、写作等方式之一。
测试范围可以是某个主题下的单词、某个等级的单词、一定数量的随机单词等。
在确定测试方式和测试范围之后,我们就可以开始编写程序了。
2. 收集单词库接下来,我们需要收集一个单词库。
单词库可以来源于专业的语言学习网站、词汇书籍、在线词典等。
我们可以将单词库保存在文本文件中,每个单词占一行。
对于每个单词,我们还可以加入其中文解释、音标等信息,方便用户学习和回忆。
3. 设计程序界面在设计程序界面时,我们需要考虑用户友好性和易用性。
程序界面可以采用图形界面或命令行界面,具体取决于编程技术和用户需求。
一个简单的程序界面可以包括如下几个部分:- 欢迎界面:包括程序名称、作者、版本号等信息;- 测试方式选择界面:选择听力、阅读还是写作方式;- 测试范围选择界面:选择测试单词的主题、等级、数量等;- 测试界面:展示测试单词、接收用户输入、给出测试结果等;- 退出界面:感谢用户使用程序,提供反馈信息、退出程序等选项。
4. 编写程序代码在设计完程序界面后,我们需要编写程序代码。
程序代码可以采用任何喜欢的编程语言来实现。
一个简单的单词测试程序的主要代码逻辑如下:```1. 读取单词库文件;2. 根据用户选择确定测试单词的范围;3. 将测试单词按某种方式随机排序;4. 进入测试界面,依次展示单词并接收用户输入;5. 每输入一个单词,就给出对错结果并记录测试结果;6. 完成测试后,展示测试结果和对错情况;7. 提供反馈信息和退出程序选项。
```5. 测试程序功能和性能在编写完程序代码后,我们需要测试程序的功能和性能。
附件9:武汉长江工商学院本科毕业论文(设计)任务书论文名称:基于单片机的单词记忆测试器设计系、专业:电子信息工程学生姓名:指导教师:下达时间:2011-12一、论文(设计)的选题意义随着经济的发展,科技的突飞猛进,芯片技术也取得了飞速发展,使单片机技术在各种民用和工业测控等领域得到了更为广泛的应用。
单片机凭借其低成本、高性能的不可替代优势,已经成为微电脑控制的主力军。
据统计,我国的单片机年需求量已达2亿片以上,且每年以大约15%的速度增长,发展迅速的单片机行业有着广阔的前景。
相比于发展迅猛的单片机行业,国内的单片机设计开发从业人员缺口很大。
据统计,到2015年,我国单片机开发从业人员将达350万人,而目前的从业者大约只有一百五十万人,两百万的人才缺口正驱动着大量的人员加入这个庞大的群体。
目前,一个学习与应用单片机的高潮正在工厂、学校及企事业单位大规模地兴起。
学习单片机的最有效方法就是理论与实践并重,因此通过单片机对单词记忆测试器的设计和研究,对于切实掌握单片机相关知识具有重要的理论和实际意义。
现在,社会越来越多重视英语的学习,单词的记忆很大程度上决定了英语成绩的好坏。
因此,很多家长会给自己的孩子购买一个记忆单词的工具,目前这类产品在市场上层出不穷。
这些产品都有一个共同的特点:都是以单片机为基础演变开发而来。
因此,以单片机为基础设计单词记忆测试器很基础,同时对切实掌握单片机相关知识具有重要的理论和实际意义。
二、论文(设计)的任务和基本要求(1)实现单词的录入(为使程序具有可演示性,单词不少于10个);(2)单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个;(3)单词背完后给出正确率;(4)使用Proteus软件仿真电路原理图;(5)使用Keil软件编译程序。
三、论文(设计)的进程安排2011.12.10~2012.2.29 明确设计题目的任务要求,并完成开题报告2012.3.1~2012.3.10 熟悉课题背景,查阅和学习相关资料2012.3.10~2012.3.31 完成主要工序要求的程序顺序功能图2012.4.1~2012.4.20 实际调试,测试仿真过程中可能存在的问题,并查找书籍并及时与指导老师沟通解决相关问题。
单片机单词记忆测试器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 ************************************/。
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'选择是否继续,不需按回车键确认,其它按键无效。
基于单片机的单词记忆测试器目录第一章单词记忆测试器的设计 (2)1.1 硬件模块设计 (2)1.1.1中央处理模块 (2)1.1.2 显示模块的硬件部分介绍 (3)1.1.3 矩阵键盘 (6)1.2 电路原理图设计 (6)1.3 软件程序设计 (8)1.3.1 程序设计思路 (8)1.3.2矩阵键盘的程序设计 (8)1.3.3 LCD12864显示模块的驱动程序 (9)1.3.4 显示字模码的提取 (11)1.3 系统软件主程序结构及其函数 (12)1.4 软件的仿真 (17)第二章结语 (19)附录单片机单词记忆测试器C程序源代码基于单片机的单词记忆测试器摘要本论文的研究对象是基于单片机的单词记忆测试器的设计,此单词记忆测试器可以实现单词的输入并判断输入的单词是否正确,单词背完后给出正确率。
该单片机单词记忆测试器为在现实生活中有着广泛的应用,特别是对学习英语方面有很大的作用。
本设计以STC89C52单片机为处理器,以12854点阵液晶屏为显示器件,并使用5×6距阵键盘为输入设备,实现了功能全面的人机界面和高速的数据处理功能,利用单片机片上FLASH ROM,可储存10-20个英文单词和汉字,作为记忆测试用。
关键词:单片机单词记忆测试器 AT89C52 12864液晶屏第一章 单词记忆测试器的设计1.1 硬件模块设计本单词记忆测试器系统硬件部分分为三个模块:中央处理模块、显示模块、键盘输入模块。
系统模型图如下:图4 系统硬件模块图1.1.1中央处理模块中央处理模块选用STC89C52单片机系统组成,电路包括:STC89C52单片机、复位电路、时钟振荡电路。
STC89C52单片机需在复位电路和时钟振荡电路组成的最小系统下工作,单片机引脚图如图5,外围电路如图6和图7所示,时钟电路采用频率采用为12MHZ 的晶振,C1、C2与晶振构成了外部振荡电路。
复位电路采用电解电容与电阻串联,当系统上电时,由于电容充电,在RST 端会产生一个高电平,高电平持续的时间由电容和电阻的值决定,当RESET 信号为低电平时,系统为工作状态。
(北京)计算机语言课程设计——背单词院 系:地球物理与信息工程学院 专业: 自动化09小组成员:常润秀、覃丹丹、周衍彤陈建龙、黄冬完成日期: 2011年7月14 日小组设计成绩:评阅: 1. 程序运行情况: 2. 答辩情况: 3. 平时表现:4. 设计报告:一、设计目的:综合运用面向对象开发工具,设计Windows风格的软件。
通过此次程序设计题目,使学生熟练掌握Windows应用程序的开发过程,为以后专业课的学习奠定基础。
二、所选编程语言:Visual Basic 6.0三、系统总体设计思路:背单词软件是英语学习类软件的分支,是专门针对用户背诵英语单词,掌握词汇量而制作的辅助学习软件。
由于媒介为个人电脑,所以背单词软件有着其它背单词工具无法达到的智能化与互动性,但相对应的,过于依赖电脑和较差的便携性成为其缺陷。
所以作为背单词的软件的设计思路应该简单为原则。
用户操作必须简单、方便为原则。
(1)本题目共提供了“大学英语四级词汇”和“大学英语六级词汇”两个词库文件(分别是grade4.txt和grade6.txt),通过“词库设置”中的“词库”组合框可以选择想要的词库。
默认的词库是“大学英语四级词汇”。
(2)为了便于用户使用,程序允许选择想要记忆的单词范围。
默认的单词范围是“A至Z”,即全部单词。
如果选择的范围是“A至C”,那么程序只显示以A、B和C字母开头的单词。
程序应保证“起始字母”在“终止字母”之前,即不会出现类似于“C至A”的情况。
(3)据需要选择“随机”或“循环”复选框。
如果不选择“随机”,则显示单词时是以单词在词库中的顺序(即字母的顺序)显示的,否则以随机顺序显示。
如果不选择“循环”复选框,单词显示一遍之后自动停止回到起始状态。
如果选择了“循环”复选框,显示一遍之后会自动从头开始显示。
在随机方式之下,循环是没有意义的,所以当“随机”复选框选定时,“循环”复选框应变为无效且呈现未选定状态。
(4)毕后,单击“开始”按钮,窗口最上方显示区域从右向左以字幕方式动态显示所选的单词,包括词性和词义。
基于Proteus 和Keil C51的单词记忆测试仪设计宁亮程(衡阳市第八中学,湖南 衡阳 421001)摘 要:为了检测单词记忆效果,设计了一款新型单词测试仪。
该测试仪由AT89C52单片机、12864 液晶显示模块、矩阵键盘和出错发光提示二极管组成,具有价格低廉、携带方便等特点。
在Proteus 软件平台上构建单词测试仪电路,再将调试成功的Keil C51源程序可烧录文件加载到单片机处理器中,然后进行仿真测试。
实验结果表明,该仪器具有删除输入字母、显示测试结果、出错发光提示和统计单词测试正确率等功能,能满足实际需求。
关键词:单词记忆测试仪;Proteus 平台;12864 LCM;矩阵键盘中图分类号:TP391.9 文献标识码:A 文章编号:1003-7241(2018)10-0143-04Design of Word Memory Instrument Based onProteus and Keil C51NING Liang-cheng( Hengyang No.8 High School, Hengyang 421001 China )Abstract: A kind of new word memory instrument is designed in order to detect word memory effect. The instrument ismade up of AT89C52 single chip microcomputer (SCM), 12864 liquid crystal module (LCM), matrix keyboard and error luminous cue. The instrument has the advantages with low price, easy to carry and so on. The circuits of word memory instrument are constructed on the Proteus software platform. The recordable file is loaded into microcontroller unit (MCU) after source program successfully debugged. Then simulation testing is adopted. Experimental results demonstrate that the instrument can delete input letter, display test result, carry on error luminous cue and count correct rate of word test, it can satisfy practical needs.key words: word memory instrument; Proteus platform; 12864 LCM; matrix keyboard收稿日期:2018-01-121 引言记忆单词对英语学习至关重要,单词记忆测试仪能较好地测试单词的记忆效果。
单词记忆测试器程序设计<i>微机原理</i>STACK ***** STACKDB 50 DUP(0)STACK ENDSDATA *****WORD1 DB 300 DUP(0)WORD2 DB 20 DUP(0)MSG0 DB 'THE NUMBER OF WORD YOU HAVE *****ED : $' MSG1 DB 'THE NUMBER OF WORD YOU HAVE NOT ***** :$ ' MSG2 DB 'PLEASE INPUT WORDS,END WITH END.PRESS ENTER TOEND INPUT AND START TEST!',0AH,0DH,'$'MSG3 DB 'THE WORD YOU HAVE NOT *****ED:$'MSG4 DB 'THE SOURCE WORD:$'STR1 DB 0AH,'PERSS K OR U TO JUDGE IF YOU KNOW THIS WORD!YOU CAN PRESS N OR L TO ***** THE NEXT WORD!',0AH,'$'STR2 DB 0AH,'PERSS N OR L TO CHOOSE THE NEXT WORD,PERSS OIS JUMP OUT THE GAME!',0AH,'$'RATE0 DB 'THE RIGHT RATE IS:$'DATA ENDSCODE *****ASSUME CS:CODE , DS:DATA, SS:STACKSTART: MOV AX,DATA ;取数据段地址MOV DS,AXMOV CX,0MOV DI,OFFSET WORD2PUSH DIMOV DX,OFFSET MSG2 ;调用中断显示字符串MOV AH,09HINT 21HLEA SI,WORD1INPUT: INC SIMOV AH,01H ;输入单词MOV DL,0FFHINT 21HMOV [SI],ALCMP AL,0DHJZ FIRSTJMP INPUTFIRST: CALL CLEAR<i>微机原理</i>LEA BX ,WORD1 ;准备显示第一个单词SHOW: MOV DL,[BX+1]CMP DL ,20H ;判断是否显示完一个单词(是否空格)JZ KU CMP DL,0DH ;判断是否测试完毕JZ HPMOV AH,02HINT 21HINC BXJMP SHOWHP: JMP STOPKU: MOV DX,OFFSET STR1MOV AH,09HINT 21HMOV AH,07H ;从键盘输入字符选择是否认识或者直接选择显示哪个单词INT 21HCMP AL,'K'JZ KNOWCMP AL,'U'JZ UNKNOWCMP AL,'N'JZ NEXTCMP AL,'L'JZ LASTJMP KUNL: MOV DX,OFFSET STR2MOV AH,09HINT 21HMOV AH,07H ;从键盘输入字符选择下个一或者上一个或者跳出程序INT 21HCMP AL,'N'JZ NEXTCMP AL,'L'JZ LASTCMP AL,'O'JZ STOPJMP NLLAST: CALL CLEAR ; 清屏<i>微机原理</i>CALL SET_*****N ; 置光标位置DEC BXMOV DL,[BX]CMP DL,20HJZ LAST1JMP LASTLAST1: DEC BXMOV DL ,[BX]CMP DL,20HJZ SHOWJMP LAST1NEXT: CALL CLEARCALL SET_*****NINC BXMOV DL,[BX]CMP DL,20HJZ SHOWJMP NEXTKNOW: CALL CLEARCALL SET_*****NINC CH ;统计记忆单词个数JMP NLUNKNOW: CALL CLEARCALL SET_*****NPUSH BX*****: DEC BXMOV DL,[BX]CMP DL,20HJZ SAVEJMP **********: POP BXINC CL ;统计未记忆单词个数JMP NLSAVE: MOV [DI],BX ;记录未记忆单词的偏移地址ADD DI,2JMP *****STOP: CALL CLEARKS: MOV AH,02 ;调用中断置光标位置MOV BX,0MOV DX,0500HINT 10H<i>微机原理</i>MOV DX,OFFSET MSG0 ; 显示记忆单词个数MOV AH,09H INT 21HMOV BL,CH ;调用过程实现数据转换和显示CALL ZH US: MOV AH ,02H ; 显示未记忆单词个数MOV BX,0MOV DX,0600HINT 10HMOV DX,OFFSET MSG1MOV AH,09HINT 21HMOV BL,CLCALL ZHRATE: MOV AH ,02H ;显示正确率MOV BX,0MOV DX,0700HINT 10HMOV DX,OFFSET RATE0MOV AH,09HINT 21HMOV BL,CHCALL ZHMOV DL,'/'MOV AH,02HINT 21HADD CL,CHMOV BL,CLCALL ZHMOV AH ,02H ; 置光标位置MOV BX,0MOV DX,0900HINT 10HU0: LEA DX,MSG3 ;显示未记忆单词MOV AH,09H INT 21HPOP DIU1: MOV BX,[DI]<i>微机原理</i>CMP BX,0JZ OVERU2: MOV DL,[BX+1]MOV AH,02HINT 21HINC BXCMP DL,20HJZ U3JMP U2U3: ADD DI,02HJMP U1OVER: JMP OVERMOV AX,4C00H INT 21HZH PROCPUSH CXMOV AL,00HADD AL,BLMOV BL,ALH: AND AL,0F0HCMP AL,00HJZ LMOV CL,04HSHR AL,CLADD AL,30HMOV DL,ALMOV AH,02HINT 21HL: MOV AL,BLAND AL,0FHADD AL,30HMOV DL,ALMOV AH,02HINT 21HPOP CXRETZH ENDPCLEAR PROC PUSH CXPUSH DX ;调用dos中断,返回系统;子程序清屏<i>微机原理</i>PUSH BXMOV AX,0600H MOV CX,0000H MOV DX,184FH MOV BH,07H INT 10HPOP BXPOP DXPOP CXCLEAR ENDPSET_*****N PROC PUSH BX PUSH DX MOV BH,0MOV DX,0808H MOV AH,02H INT 10H POP DX POP BX RETSET_*****N ENDPCODE ENDSEND START 子程序置光标位置;。
目录第一章单词记忆测试器的设计 (1)1.1 硬件模块设计 (2)1.1.1中央处理模块 (2)1.1.2 显示模块的硬件部分介绍 (4)1.1.3 矩阵键盘 (8)1.2 电路原理图设计 (8)1.3 软件程序设计 (11)1.3.1 程序设计思路 (11)1.3.2矩阵键盘的程序设计 (12)1.3.3 LCD12864显示模块的驱动程序 (13)1.3.4 显示字模码的提取 (16)1.3 系统软件主程序结构及其函数 (17)1.4 软件的仿真 (22)第二章结语 (24)附录单片机单词记忆测试器C程序摘要本论文的研究对象是基于单片机的单词记忆测试器的设计,此单词记忆测试器可以实现单词的输入并判断输入的单词是否正确,单词背完后给出正确率。
该单片机单词记忆测试器为在现实生活中有着广泛的应用,特别是对学习英语方面有很大的作用。
本设计以STC89C52单片机为处理器,以12854点阵液晶屏为显示器件,并使用5×6距阵键盘为输入设备,实现了功能全面的人机界面和高速的数据处理功能,利用单片机片上FLASH ROM,可储存10-20个英文单词和汉字,作为记忆测试用。
关键词:单片机单词记忆测试器 STC12C5A60S2 12864液晶屏第一章 单词记忆测试器的设计1.1 硬件模块设计本单词记忆测试器系统硬件部分分为三个模块:中央处理模块、显示模块、键盘输入模块。
系统模型图如下:图1 系统硬件模块图1.1.1中央处理模块中央处理模块选用STC12C5A60S2单片机系统组成,电路包括:STC12C5A60S2单片机、复位电路、时钟振荡电路。
STC12C5A60S2单片机需在复位电路和时钟振荡电路组成的最小系统下工作,单片机引脚图如图2,外围电路如图3和图4所示,时钟电路采用频率采用为12MHZ 的晶振,C1、C2与晶振构成了外部振荡电路。
复位电路采用电解电容与电阻串联,当系统上电时,由于电容充电,在RST 端会产生一个高电平,高电平持续的时间由电容和电阻的值决定,当RESET 信号为低电平时,系统为工作状态。
扬州大学水利与能源动力工程学院课程设计报告题目:单词记忆测试器程序设计课程:单片机原理及应用课程设计专业:电气工程及其自动化班级:电气1202姓名:倪勇学号:121704214第一部分任务书《单片机原理及应用》课程设计任务书一、课题名称单词记忆测试器程序设计二、课程设计目的课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。
《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。
单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。
为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。
通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。
三、课程设计内容设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。
1. 系统方案设计:综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。
2. 硬件电路设计:对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。
3. 软件设计:根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。
4. 调试:在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。
四、课程设计要求设计一个以单片机为核心的单词记忆测试器:1、实现单词的录入(为使程序具有可演示性,单词不少于10个)。
2、单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个。
3、单词背完后给出正确率。
4单词五、进度安排七、课程设计报告内容:总结设计过程,写出设计报告,设计报告具体内容要求如下:1.课程设计的目和设计的内容。
2.课程设计的要求。
3.控制系统总框图及系统工作原理。
4.控制系统的硬件电路连接图,电路的原理。
5.软件设计流程图及其说明。
6.电路设计,软件编程、调试中遇到的问题及分析解决方法。
7.实验结果及其分析。
8.体会。
第二部分课程设计报告目录1 课题简介 (6)2 单词记忆测试器程序设计方案设计 (7)3单词记忆测试器硬件电路设计硬件电路设计 (8)4 单词记忆测试器软件编程设计 (11)5 实验与结果分析 (19)6 小结与体会 (20)7 参考文献 (21)8 附录 (22)1 课题简介1.1 课题的目的课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。
《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。
单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。
为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。
通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。
1.2课题的任务要求设计一个以单片机为核心的单词记忆测试器:1、实现单词的录入(为使程序具有可演示性,单词不少于10个)。
2、单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个。
实现所有单词的循环显示。
3、单词背完后给出正确率。
(实时显示正确率,且对同一个单词确定不会重复增加正确率)4、不认识时,警示灯亮。
5、按键时喇叭不响,松开时喇叭播放音乐。
2、方案设计2.1系统的总体介绍系统主要模块如下:1、时钟脉冲,复位控制:外部时钟方式使用现成的外部振荡器产生脉冲信号,同时通过开关对单片机的复位进行控制。
2、单词存取模块。
将单词存在二位数组中,通过读二维数组,送往显示。
3、单词正确率判断模块4、M L016L 16*2LCD液晶屏显示模块该模块是将单片机送来的数据进行显示。
5、错误提示模块当不认识单词时,发出警示信号。
6、按键时喇叭不响,松开时喇叭播放音乐。
2.2 系统硬件模块图2.3系统的工作原理单片机启动后,不停地读取P1口低四位的状态,P1口的低四位读取单词显示的,其中P1.0为sure , P1.1为unknown ,P1.2为up ,P1.3为down 。
按键部分,sure 键按下时,P1.0被拉低,当单片机读到P1.0为低时,位置为i 加以,将下一个单词送去显示。
如时该单词的标志位满足,正确率改变。
当unknown 按下时,i 加一,同时给指示灯送一,(此前指示灯已被置0)。
当up 按下时i 减一,显示上一个单词.。
当unknown 按下时,i 加一,显示下一个单词。
显示模块是通过re ,rw ,的置位来选择数据和指令的输入,配合使能位E 。
8位数据数据控制引脚分时复用,从而实现显示。
字符的显示:用LCD 显示一个字符时比较复杂,因为一个字符由6×8或8×8点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM 区的8字节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。
这样一来就组成某个字符。
但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD 上开始显示的行列号及每行的列数找出显示RAM 对应的地址,设立光标,在此送上该字符对应的代码即可。
3 、硬件电路设计3.1总电路系统3.2时钟脉冲和单片机复位模块晶振是晶体振荡器的简称在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络电工学上这个网络有两个谐振点以频率的高低分其中较低的频率是串联谐振较高的频率是并联谐振由于晶体自身的特性致使这两个频率的距离相当的接近在这个极窄的频率范围内晶振等效为一个电感所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路由于晶振等效为电感的频率范围很窄所以即使其他元件的参数变化很大这个振荡器的频率也不会有很大的变化。
3.3单片机模块8051 单片机内部结构,一个完整的计算机应该由运算器、控制器、存储器(ROM 及RAM)、数据总线和I/O 接口组成。
一般微处理器(如8086)就只包括运算器和控制器两部分。
和一般微处理器相比,8051 增加了四个8 位I/O 口、一个串行口、4KB ROM、128BRAM、很多工作寄存器及特殊功能寄存器(SFR),所以单片机具有比微处理器更强大的控制功能,单片机是专为进行控制设计的,而常见的微处理器是用于运算功能的。
3.4键盘模块(1*4)4个按键依次接在P1.0,P1.1,P1.2,P1.3。
其中P1.0为sure,P1.1为unknown,P1.2为up,P1.3为down。
均接地,未按键时,口为高电平。
通按键后,口为低电平。
通过对P口低四位扫描,程序中用if,while,switch等语句,其{}中放入相应的控制变量,控制变量变化,从而能够读取相应的单词存储二维数组。
正确率也得以输出。
在按键按下sure时,单词认识,当up到该单词时再按sure,单词正确率不会发生变化。
这正是该部分的难点,在程序部分会说明。
3.5喇叭模块(4*7)喇叭的工作原理是当输入的信号的频率不同是,喇叭发出的音调也不同。
通过读取在数组中的各个音符的频率以及节拍,再通过定时器中断加以实现,最终就能让喇叭发出一首歌的全部音调了。
3.6显示模块显示屏为一块LCD1602液晶屏,2*16(2行,16字符/行)读状态输入RS=L,R/W=H,E=H 输出D0—D7=状态字写指令输入RS=L,R/W=L,D0—D7=指令码,E=输出无高脉冲读数据输入RS=H,R/W=H,E=H 输出D0—D7=数据输出无写数据输入RS=H,R/W=L,D0—D7=数据,E=高脉冲表3-1 LCD1602时序表如下编号符号引脚说明编号符号引脚说明1 VSS 电源地9 D2 数据2 VDD 电源正极10 D3 数据3 VL 液晶显示偏压11 D4 数据4 RS 数据/命令选择12 D5 数据5 R/W 读/写选择13 D6 数据6 E 使能信号14 D7 数据7 D0 数据15 BLA 背光源正极8 D1 数据16 BLK 背光源负极表3-2 引脚接口说明表——引脚功能第1脚:VSS为地电源。
第2脚:VDD接5V正电源。
第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W 共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:D0~D7为8位双向数据线。
第15脚:背光源正极。
第16脚:背光源负极。
P0口与8位数据/指令复用线连接,P2.0连RS,P2.1连RW,P2.3连使能位E。
这三位为控制信号。
可以控制写入的是指令还是数据,具体操作见表3-1。
E为使能信号,下降沿时,写入数据或指令。
其次第一行首个字符的显示地址为0x80H,第二行的首个字符显示地址为0xc0H。
通过写入不同的显示位置,可以控制字符显示位置。
3.7报警模块该模块最简单,一个LED接在P2.0口,在unknown,uph和down时闪烁。
在switch 的case语句中加入P2.0置1的指令,其后清0。