基于单片机的单词记忆器设计_第1页
基于单片机的单词记忆器设计_第2页
基于单片机的单词记忆器设计_第3页
基于单片机的单词记忆器设计_第4页
基于单片机的单词记忆器设计_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、扬州大学能源与动力工程学院课程设计报告题 目: 单词记忆测试器程序设计 课 程: 单片机原理及应用课程设计 专 业: 电气工程及其自动化 班 级: 电气1102 姓 名: 学 号: 第 一 部 分任务书单片机原理及应用课程设计任务书一、课题名称单词记忆测试器程序设计二、课程设计目的课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。单片机原理及应用是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。单片机原理及应用课程设计的目的是

2、让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。三、课程设计内容设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的

3、软硬件调试。1. 系统方案设计:综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。2. 硬件电路设计:对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。3. 软件设计:根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。4. 调试:在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。四、课程设计要求设计一个以单片机为核心的单词记忆测试器:1、实现单词的录入(为使程序具有可演示性,单词不少于10个)。2、单词用按键控

4、制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个。3、单词背完后给出正确率。五、进度安排序号内容天数1布置任务,熟悉课题要求0.52总体方案确定,硬件电路设计1.53软件编程1.54Proteus仿真,或在周立功实验箱上调试25总结,撰写课程设计报告1.5七、课程设计报告内容:总结设计过程,写出设计报告,设计报告具体内容要求如下:1课程设计的目和设计的内容。2课程设计的要求。3控制系统总框图及系统工作原理。4控制系统的硬件电路连接图,电路的原理。 5软件设计流程图及其说明。6电路设计,软件编程、调试中遇到的问题及分析解决方法。7实验结果及其分析。8体会。第 二 部 分

5、课程设计报告目 录 1 课题简介71.1 课题名称:71.2 课题目的72 单词记忆测试器方案设计72.1 设计思路72.2 系统流程图83 单词记忆测试器硬件电路设计93.1 系统整体框图93.2 AT89C51单片机引脚图103.3 单片机外围时钟电路图113.4 单片机外围复位电路图123.5 LCD显示器电路133.6 电路设计原理图164 单词记忆测试器软件编程设计164.1 程序设计思路164.2 键盘扫描164.2 检查状态是否忙174.3 写控制字184.4 LCD液晶初始化184.5 LCD显示函数195 实验与结果分析205.1 软件仿真调试205.2 实验用仿真软件205

6、.3 实验结果分析206 小结与体会22参 考 文 献23附 录241 课题简介 1.1 课题名称:单词记忆测试器程序设计1.2 课题目的课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。单片机原理及应用是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的

7、理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。本次课程设计,我的课题是单词记忆测试器程序设计,实用性强,针对性强。目的在于提高我本人以及团队的单片机应用能力和对单片机工作原理的理解分析能力。课题任务及要求设计一个以单片机为核心的单词记忆测试器:实现单词的录入(为使程序具有可

8、演示性,单词不少于10个)。单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个。单词背完后给出正确率。2 单词记忆测试器方案设计2.1 设计思路本题目实质上是一个具有一定复杂程度键盘扫描程序,可将单词存储在一个二维数组中,按“确定”键开始程序后,次显示0行的数组,即第一个单词。之后按下“向上”按键,显示上一行数组,即上一个单词; 按下“向下”按键,显示下一行数组,即下一个单词。当显示的行数超过9时,程序结束,并通过按“确认”的次数,计算出正确率。根据课题要求,使用C51进行编程,建立字符型数组存放单词,通过LCD1602显示所存放的单词。通过对简易键盘的扫描

9、确定按下了那个按键,对单词做以下四种处理:(1) 确认:表示对当前单词认识,使显示下一个单词,并置计数数组的对应位为1;(2) 不认识:表示对当前单词不认识,使显示下一个单词,并置计数数组的对应位为0;(3) 上一个:不对当前单词做任何处理,使显示上一个单词,计数数组对应位不变;(4) 下一个:不对当前单词做任何处理,使显示下一个单词,计数数组对应位不变;没显示一个单词,在LCD显示已经显示单词的认识个数,如“1/10”,当10个单词显示完毕,最后给出单词认识率,如“70%”。此时,按下任何按键,系统自动回到初始状态。 开始2.2 系统流程图单片机初始化单词指针指向下有一个任意按键按下LCD模

10、块初始化显示单词扫描按键有按键命令?NoYes执行按键命令下一个上一个不认识确认C不变C不变C置零C置一当前单词为第10个?NoYes显示正确率程序流程图说明:程序流程图是程序分析中最基本、最重要的分析技术,它是进行流程程序分析过程中最基本的工具。程序流程图是人们对解决问题的方法、思路或算法的一种描述。流程图的优点:(a)采用简单规范的符号,画法简单;(b)结构清晰,逻辑性强;(c)便于描述,容易理解。3 单词记忆测试器硬件电路设计3.1 系统整体框图中央处理模块选用AT89C51单片机系统组成,电路包括:AT89C51单片机、复位电路、时钟振荡电路。AT89C51单片机需在复位电路和时钟振荡

11、电路组成的最小系统下工作,单片机引脚图如图5,外围电路如图6和图7所示,时钟电路采用频率采用为12MHZ的晶振,C1、C2与晶振构成了外部振荡电路。复位电路采用电解电容与电阻串联,当系统上电时,由于电容充电,在RST端会产生一个高电平,高电平持续的时间由电容和电阻的值决定,当RESET信号为低电平时,系统为工作状态。 AT89C51具有ISP的功能,可以通过串行口直接将程序下载到单片机内。在下载程序状态下,RESET信号被拉高,系统进行程序下载,待程序下载完毕后,RESET重新拉低。用户可以通过切断电源进行手动复位,或者通过重新下载新的程序进行复位。单片机中央处理模块(晶振+复位电路模块)4个

12、键盘输入模块LCD1602液晶显示模块图4 系统硬件模块图3.2 AT89C51单片机引脚图 图5 AT89C51的引脚排列图VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的低八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须接上拉电阻。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,

13、P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为低八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和

14、控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口,如下: P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) P3.3 /INT1(外部中断1) P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和

15、编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无

16、效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。3.3 单片机外围时钟电路图 图6 时钟电路图 单片机晶振的必要

17、性:简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。个机器周期包括12个时钟周期。如果一个单片机选择了12MHZ晶振,它的时钟周期是112us,它的一个机器周期是12(112)us,也就是1us。MCS51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较馒,得要2个机器周期,还有两条指令要4个机器周期才行。为了衡量指令执行时间的长短,又引入一个新的概念:指令周期。所谓指令周期就是指执行一条指令的

18、时间。例如,当需要计算DJNZ指令完成所需要的时间时,首先必须要知道晶振的频率,设所用晶振为12MHZ,则一个机器周期就是1us。而DJNZ指令是双周期指令,所以执行一次要2us。如果该指令需要执行500次,正好1000us,也就是1ms。机器周期不仅对于指令执打有着重要的意义,而且机器周期也是单片机定时器和计数器的时间基准。例如一个单片机选择了12MHZ晶振,那么当定时器的数值加1时,实际经过的时间就是1us,这就是单片机的定时原理。单片机晶振的作用:单片机晶振的作用是为系统提供基本的时钟信号。通常一个系统共用一个晶振,便于各部分保持同步。有些通讯系统的基频和射频使用不同的晶振,而通过电子调

19、整频率的方法保持同步。晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。高级的精度更高。有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。3.4 单片机外围复位电路图图7 复位电路图 上电复位时序:在单片机及其应用电路每次上电的过程中,由于电源回路中通常存在一些容量大小不等的滤波电容,使得单片机芯片在其电源引脚VCC和VSS之间所感受到的电源电

20、压值VDD,是从低到高逐渐上升的。该过程所持续的时间一般为1100ms(记作taddrise)。上电延时taddrise的定义是电源电压从10%VDD上升到90%VDD所需的时间。在单片机电源电压上升到适合内部振荡电路运行的范围并且稳定下来之后,时钟振荡器开始了启动过程(具体包括偏置、起振、锁定和稳定几个过程)。该过程所持续的时间一般为150ms(记作tosc)。起振延时tosc的定义是时钟振荡器输出信号的高电平达到Vih1所需的时间。从一些实际测量图中也可以看得很清楚。这里的Vih1是单片机电气特性中的一个普通参数,代表XTAL1和RST引脚上的输入逻辑高电平。例如,对于常见的单片机型号AT

21、89C51和AT89S51,厂家给出的Vih1值为0.7VDDVDD+0.5V。从理论上讲,单片机每次上电复位所需的最短延时应该不小于treset。这里,treset等于上电延时taddrise与起振延时tosc之和。从实际上讲,延迟一个treset往往还不够,不能够保障单片机有一个良好的工作开端。在单片机每次初始加电时,首先投入工作的功能部件是复位电路。复位电路把单片机锁定在复位状态上并且维持一个延时(记作TRST),以便给予电源电压从上升到稳定的一个等待时间;在电源电压稳定之后,再插入一个延时,给予时钟振荡器从起振到稳定的一个等待时间;在单片机开始进入运行状态之前,还要至少推迟2个机器周期

22、的延时。3.5 LCD显示器电路图8 LCD显示器接线图字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下:图9 LCD显示器尺寸图1602LCD主要技术参数:显示容量:162个字符芯片工作电压:4.55.5V工作电流:2.0mA(5.0V)模块最佳工作电压:5.0V字符尺寸:2.954.35(WH)mm引脚功能说明:1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,

23、各引脚接口说明如表10-13所示:编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极1602LCD的指令说明及时序1602液晶模块内部的控制器共有11条控制指令,如表10-14所示:序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001

24、S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写的数据内容11从CGRAM或DDRAM读数11读出的数据内容控制命令表1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效

25、,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命

26、令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无1602LCD的RAM地址映射及标准字库表液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图10-57是1602的内部显示地址。图10 1602LCD内部显示地

27、址3.6 电路设计原理图电路原理图设计使用集原理图设计、PCB设计、电路仿真功能为一体的PROTUES软件。以该软件设计的电路原理图图11。电路设计参数:(1) C1 C2 为20-30PF瓷片电容,与12M晶振组成时钟振荡电路;(2) 复位电路使用R1为10K电阻、C3为10uF电解电容;(3) 1602液晶模块与单片机P0口连接,因P0口为真正的三态门结构,因些作数据总线使用时要外接上拉电阻,可使用10K的排阻;(4) 电路的供电为5V直流电源;(5) D1为输入错误的状态指示灯,加220欧限流电阻连到VCC,因为STC89C51单片机IO的电流灌入能力要强于电流输出能力,因此一般使IO为

28、低电平时点亮LED灯。图11 1602LCD系统设计原理图4 单词记忆测试器软件编程设计4.1 程序设计思路因本系统为模块化设计,为方便软件编写和移植,程序设计采用C语言。流程图前文已经给出。4.2 键盘扫描a=P1&0x0f; /读取按键switch(a) case 0x00:b=0;break; /没有按下按键case 0x01:czhii=1; /用数组记录当前单词是认识的i+;/指向下一个单词b=0;/指示灯不亮while(sure!=0); /按键松手检测 break; /确定,下一个case 0x02:czhii=0; /记录当前单词是不认识的,c认识单词个数不变i+; /下一个单

29、词b=1; /指示灯亮while(unknown!=0); break; /不认识,下一个case 0x04:b=1;i-; while(up!=0);/松手检测break; /直接上一个case 0x08:b=1;i+; while(down!=0);/松手检测break; /直接下一个P1=0;4.2 检查状态是否忙bit test() /读忙信号bitbusy;RS=0;RW=1;E=1;_nop_();_nop_();_nop_();_nop_();busy=BF;E=0;returnbusy; 4.3 写控制字voidwrite_com(ucharcom) /写控制字while(te

30、st()=1);RS=0;RW=0;E=0;_nop_();_nop_();P0=com;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0; /写指令,RL=0,RW=0,E=高脉冲 4.4 LCD液晶初始化voidLCD_init(void) /液晶初始化delay(15); write_com(0x38); delay(5);write_com(0x38);delay(5);write_com(0x38);delay(5);write_com(0x0c);delay(5);write_com(0x

31、06);delay(5);write_com(0x01);delay(5);4.5 LCD显示函数voidwrite_date(uchar date) /写数据到LCD 显示出来while(test()=1); RS=1;RW=0;E=0;P0=date;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0; /写数据,RS=1,RL=0,E=高脉冲5 实验与结果分析5.1 软件仿真调试由于平时单片机课程上,我们学习的是汇编语言,在平时的简单小实验尚能应付,但不得不承认汇编语言可读性很差,加上很难移植,故

32、而本次课程设计本人选择针对51单片机的C语言来进行编程。本人自学C51,所以在编写程序已经在Keil环境中编译也出现了很多问题。一开始,编写了main函数,却发现越来越烦,为了加入功能,导致语句不断重复和复杂。于是也出现了很多错误,编译不能成功。后来,我仔细分析课题要求,画出流程图,在反复确认后,研究各个单片机外围部件,查阅资料,编写LCD1602的初始化、显示、检测是否为“忙”三个子函数,然后在main函数中调用。这样就大大缩减的编程逻辑难度和程序长度。不过,一开始没有把子函数放在main函数之前,而且忘记需要在main函数中先进行声明,导致函数调用不成功,程序不能正确编译。在小组人员的指正

33、后,我就把子函数放在了main函数之前,这样就可以顺利调用子函数了。5.2 实验用仿真软件Proteus软件是英国Lab Center Electronics公司出版的EDA工具软件(该软件中国总代理为广州风标电子技术有限公司)。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前比较好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整

34、设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MATLAB等多种编译器。软件的仿真使用protues环境,在画好protues原理图后,将keil环境下生成的目标文件HEX文件载入protues中,即可进行软件仿真。5.3 实验结果分析加电初始化:当开启Proteus电源,加载了HEX文件的AT89C5

35、1单片机就会执行程序,下图为LCD显示器的显示效果。图12 加电后LCD显示开始显示单词后,我们可以按动四个按键,分别表示“确认”、“不认识”、“上一个”、“下一个”,在显示单词的同时,LCD还显示从开始到目前用户按下“确认”按键的次数以及当前为第几个单词,即用户认识单词的个数和已经看过的单词的个数,最后当十个单词显示完毕,会在LCD上显示出用户对当前单词认识的正确率。 图13 实时显示正确的个数 图14 有不认识的单词 图15 十个单词结束后的正确率 图16 看过的单词可以回看 图13 向我们表明在单片机仿真运行时,当用户按下“确认”键,则实时更新用户所认识单词的个数。其中,LCD正显示第4

36、个单词,而右上角显示“3/10”,表明十个单词中,用户目前认识了三个单词。图14 表明用户正在看的是第10个单词,而前9个单词只认识6个,应为当用户不认识某个单词的时候,用户可以按下“不认识”按键,则对应单词就不会被标记认识,故不会被算在认识的单词之列,所以认识的单词数量和所显示当前的单词所在位置不同。图15 LCD显示“Accuracy:”是应为在图14的基础上,用户按下“确认”键表示认识该单词,则十个单词显示完毕,最后得出正确率。此时,当按下四个按键中的任意一个,LCD显示器将会重新从第一个单词开始显示,重复过程。图16 图中,当前显示单词为第3个,但是右上角却显示用户已经至少看到过6个单

37、词并认识,表明该程序提供返回查看功能。当用户按下“上一个”按键时,若当前单词不是第1个,则LCD显示前一个单词,而对已经浏览过的单词是否认识不做处理,保留当前已经认识单词的书目。而当用户按下“下一个”按键时,LCD同样会显示下一个单词,若当前单词为第10个,就直接显示正确率,第10个单词默认为不认识。6 小结与体会由于本人对单片机的认识有限,在设计过程中遇到不少困难。在设计程序方面出现不少问题,所以用了比较简单的程序运算。虽然花了好几天的时间尽力把课程设计业做好,但由于本人能力的原因,整个系统做的并不理想,但是在整个设计的过程中我积累了不少的经验,学会一些系统的应用。我一直认为课程设计重在过程

38、。确实是这样的。这个课程设计的过程,其实也就是我不断学习的过程。课程设计开始第一天,老师将我们分成两两一组,两个人做同一个课题。我一直都持着无所谓的态度,因为无论怎么分组,我都觉得我们在合作的基础上都要坚持独立思考,一个人做自己想做的,把自己的想法反映到课程设计中来,而不能依赖别人。事实上,我就是这么做的。我和平良川同学一组,同做“单词记忆测试器设计”这个课题,但从头到尾,我们之沟通了对课题的理解以及双方的思路,而在Proteus中绘制电路仿真图以及编写C语言程序的过程中,我们都是独自完成的,这样让我能够将自己的想法、习惯体现在整个程序中,而最终的结果也透露这我个人对这个课题的理解。这样就让我

39、对单片机有了更深的认识,同时对在课堂还是那个没学习过的C51也有了一定程度的掌握。在编写程序到和Proteus联调,这个过程对我来说算是比较漫长的了。5月28号一整天我都在找编写好的程序的逻辑漏洞,却把程序越改越麻烦,算法改到最后我都快看不懂了。于是我果断停了下来。晚上一个人的时候,我拿出纸张,在脑海里模拟着各种各样的程序运行情形,把关键的指令和逻辑环节在纸上写了下来,然后对照编写好的程序一点一点改,一遍一遍调试。终于我抛弃了一整天的混乱的逻辑,用一个数组来标记用户对每个单词的认识或者不认识,而不是之前的对一个数的加或者减。然后,一运行果然就成功了。我想,这就是一个提高的过程。所以,在整个课程

40、设计过程中我学到了许多新的知识,能力也真真切切提高了不少。这些收获给我带来的喜悦远远超过了完成毕业设计时给我带来的喜悦,让我对单片机的热爱也逐渐加深,对研究它的兴趣更加浓厚了。我相信,以后再做这些设计的时候一定还可以做得更好。参 考 文 献1 张毅刚主编,单片机原理及应用,北京:高等教育出版社,20042 陈涛编著,单片机应用及C51程序设计,北京:机械工业出版社,20083 周润景主编,PROTEUS入门实用教程,北京:机械工业出版社,20074 皮大能主编,单片机课程设计指导书,北京:北京理工大学出版社,20105 楼然苗主编, 单片机实验与课程设计(Proteus仿真版),浙江:浙江大学

41、出版社, 2010 7 何立民主编. MCS-51系列单片机应用系统设计.北京:北京航空航天大学出版社20018 刘庆江 张晓光. 一种实用的集成芯片测试仪的设计. 中国矿业大学信息与电气工程学院, 20059 何立民主编. 单片机应用文集. 北京:北京航空航天大学出版社,199410 王福瑞主编. 单片微机测控系统设计大全. 北京:北京航空航天大学出版社,199911 夏继强 沈德金主编. 单片机实验与实践教程. 北京:北京航空航天大学出版社,2002附 录#include#include#define uint unsigned int#define uchar unsigned char

42、sbit RS=P20 ;sbit RW=P21 ;sbit E=P22 ;sbit BF=P07 ;sbit error=P24;sbit sure=P10;sbit unknown=P11;sbit up=P12;sbit down=P13;uchar code string =( Vocabulary);uchar code string00 =(Designed by Jxl);uchar code string01016=Word01: ,Word02: ,Word03: ,Word04: ,Word05: , Word06: ,Word07: ,Word08: ,Word09: ,

43、Word10: ;uchar code string11016=Beautiful,King,Vampire,Chinese,American, English,Franch,German,Canada,Japan;uchar code string210=(0123456789);uchar code string3 =Accuracy: ;uchar code string4 =%; unsigned int czhi11=0,0,0,0,0,0,0,0,0,0,0;void delay1ms()/延时1ms子函数unsigned char i,j;for(i=0;i10;i+)for(j

44、=0;j33;j+);void delay(uint n) /延时n ms子函数uint i;for(i=0;in;i+)delay1ms();bit test() /读忙信号bitbusy;RS=0;RW=1;E=1;_nop_();_nop_();_nop_();_nop_();busy=BF;E=0;returnbusy; voidwrite_com(ucharcom) /写控制字while(test()=1);RS=0;RW=0;E=0;_nop_();_nop_();P0=com;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();

45、_nop_();_nop_();E=0; /写指令,RL=0,RW=0,E=高脉冲 voidwrite_address(ucharx) /写数据存放地址 write_com(x|0x80); voidwrite_date(uchar date) /写数据到LCD 显示出来while(test()=1);RS=1;RW=0;E=0;P0=date;_nop_();_nop_();_nop_();_nop_();E=1;_nop_();_nop_();_nop_();_nop_();E=0; /写数据,RS=1,RL=0,E=高脉冲 voidLCD_init(void) /液晶初始化delay(1

46、5); write_com(0x38); delay(5);write_com(0x38);delay(5);write_com(0x38);delay(5);write_com(0x0c);delay(5);write_com(0x06);delay(5);write_com(0x01);delay(5);voidmain(void)unsigned char a,c,i,j,k,p,q/*,key*/;bit b;LCD_init(); /液晶初始化子程序delay(10); /延时10ms子程序p=0;q=0;c=0;i=0;write_com(0x01); /写控制字delay(5); /延时5mswrite_address(0x00); /写LCD第一行开头地址delay(5);j=0;while(stringj != 0)write_date(stringj);j+;delay(10);write_address(0x40); /写LCD第一行开头地址delay(5);j=0;while(string00j != 0)write_date(string00j);j+;delay(50);delay(200);delay(200);delay(200);while(1) LCD_init(); /液晶初始化子程序delay(10); /延时10ms子程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论