收藏 分销(赏)

单词记忆系统.doc

上传人:精**** 文档编号:2669682 上传时间:2024-06-04 格式:DOC 页数:32 大小:392.51KB
下载 相关 举报
单词记忆系统.doc_第1页
第1页 / 共32页
单词记忆系统.doc_第2页
第2页 / 共32页
单词记忆系统.doc_第3页
第3页 / 共32页
单词记忆系统.doc_第4页
第4页 / 共32页
单词记忆系统.doc_第5页
第5页 / 共32页
点击查看更多>>
资源描述

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

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

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

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

5、。7实验结果及其分析。8体会。第 二 部 分课程设计报告目 录1 课题简介 6 2 单词记忆测试器程序设计方案设计.73 单词记忆测试器硬件电路设计硬件电路设计.84 单词记忆测试器软件编程设计115 实验与结果分析196 小结与体会.207 参考文献.218 附录.22 1 课题简介1.1 课题的目的课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。单片机原理及应用是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。单片机原理

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

7、、实现单词的录入(为使程序具有可演示性,单词不少于10个)。2、单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个。实现所有单词的循环显示。3、单词背完后给出正确率。(笔者是实时显示正确率,且对同一个单词确定不会重复增加正确率)4、不认识时,警示灯亮。5、笔者增加一个4*7的键盘,可以在LCD上显示a到z26个字母。 2、方案设计2.1系统的总体介绍系统主要模块如下:1、 时钟脉冲,复位控制:外部时钟方式使用现成的外部振荡器产生脉冲信号,同时通过开关对单片机的复位进行控制。2、 单词存取模块。 将单词存在二位数组中,通过读二维数组,送往显示。3、 单词正确率

8、判断模块4、 英文字母输入模块通过键扫描程序读键盘,在通过键值读取单词,送往显示。5、 ML016L 16*2LCD液晶屏显示模块该模块是将单片机送来的数据进行显示。6、 错误提示模块当不认识单词时,发出警示信号。 2.2 系统硬件模块图 7*4键盘LM016LLCD2*16液晶显示模块1*4键盘单片机中央处理模块2.3系统的工作原理单片机启动后,不停地读取P1口低四位的状态,P1口的低四位读取单词显示的,其中P1.0为sure, P1.1为unknown,P1.2为up,P1.3为down。按键部分,sure键按下时,P1.0被拉高,当单片机读到P1.0为高时,位置为i加以,将下一个单词送去

9、显示。如时该单词的标志位满足,正确率改变。当unknown按下时,i加一,同时给指示灯送一,(此前指示灯已被置0)。当up按下时i减一,显示上一个单词.。 当unknown按下时,i加一,显示下一个单词。通过对4*7键盘的扫描,输出到P3口(每次只有一个低电平),读取P1口高四位的数据。通过switch case语句来判断键值,来查取字母表,送往显示。显示模块是通过re,rw,的置位来选择数据和指令的输入,配合使能位E。8位数据数据控制引脚分时复用,从而实现显示。字符的显示:用LCD显示一个字符时比较复杂,因为一个字符由68或88点阵组成,既要找到和显示屏幕上某几个位置对应的显示RAM区的8字

10、节,还要使每字节的不同位为“1”,其它的为“0”,为“1”的点亮,为“0”的不亮。这样一来就组成某个字符。但由于内带字符发生器的控制器来说,显示字符就比较简单了,可以让控制器工作在文本方式,根据在LCD上开始显示的行列号及每行的列数找出显示RAM对应的地址,设立光标,在此送上该字符对应的代码即可。3 、硬件电路设计3.1总电路系统3.2时钟脉冲和单片机复位模块 晶振是晶体振荡器的简称 在电气上它可以等效成一个电容和一个电阻并联再串联一个电容的二端网络 电工学上这个网络有两个谐振点 以频率的高低分其中较低的频率是串联谐振 较高的频率是并联谐振 由于晶体自身的特性致使这两个频率的距离相当的接近 在

11、这个极窄的频率范围内 晶振等效为一个电感 所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路 这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路 由于晶振等效为电感的频率范围很窄 所以即使其他元件的参数变化很大 这个振荡器的频率也不会有很大的变化。3.3单片机模块8051 单片机内部结构,一个完整的计算机应该由运算器、控制器、存储器(ROM 及RAM)、数据总线和IO 接口组成。一般微处理器(如8086)就只包括运算器和控制器两部分。和一般微处理器相比,8051 增加了四个8 位IO 口、一个串行口、4KB ROM、128BRAM、很多工作寄存器及特殊功能寄存器(SFR),所以

12、单片机具有比微处理器更强大的控制功能,单片机是专为进行控制设计的,而常见的微处理器是用于运算功能的。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语句,其中放入相应的控制变量,控制变量变化,从而能够读取相应的单词存储二维数组。正确率也得以输出。在按键按下sure时,单词认识,当up到该单词时再按sure,单词正确率不会发生变化。这正是该部分的难点,在程序部分会说明。3.5键盘模块(

13、4*7) 4*7个按键按图连好,形成4行7列,每行左端相连,每列右端相连。7列分别连在P3口的第7位,做输入用。4行连在P1口的高四位,做输出用。P3口依次给0,其他给1。读出P1高四位(与0xf0相与)。之后用switch case 语句来从而读出键值,利用键值来查表。在用键值配合表内数据。调用显示子程序,可以实现单词输入和和显示。3.6显示模块 显示屏为一块LCD1602液晶屏,2*16(2行,16字符/行)读状态输入RS=L,R/W=H,E=H输出D0D7=状态字写指令输入RS=L,R/W=L,D0D7=指令码,E=高脉冲输出无读数据输入RS=H,R/W=H,E=H输出D0D7=数据写数

14、据输入RS=H,R/W=L,D0D7=数据,E=高脉冲输出无表3-1 LCD1602时序表如下编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极表3-2 引脚接口说明表引脚功能第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS

15、为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。P0口与8位数据/指令复用线连接,P2.0连RS,P2.1连RW,P2.3连使能位E。这三位为控制信号。可以控制写入的是指令还是数据,具体操作见表3-1。E为使能信号,下降沿时

16、,写入数据或指令。 其次第一行首个字符的显示地址为0x80H,第二行的首个字符显示地址为0xc0H。通过写入不同的显示位置,可以控制字符显示位置。3.7报警模块该模块最简单,一个LED接在P2.4口,在unknown时,闪烁。在unknown的if语句中加入P2.4置1的指令,其后清0。即可实现。主要注意单片机复位时,各口都是1,要先置0。才能开始时灭。4、软件编程设计4.1 程序设计框图因本系统为模块化设计,为方便软件编写和移植,程序设计采用C语言,程序流程图如下:LCD1602初始化始化键盘扫描输入4*1键盘按下单片机初始化4*7键盘按下No确定正确率下一个下一个上一个不认识报警查询key

17、值显示字码开始YesNo Yes4.2主程序函数void main(void) unsigned char i;unsigned char k;unsigned char count;unsigned char a;unsigned char j;unsigned int key , temp; /定义字符变量lcd_init();/ 初始化LCDdelay(10); /调用延时i=1;while(1) /无限循环 delay(60); /提供显示时间lcd_wcmd(0x01);/清屏指令,防止单词由长到短时出现乱码.delay(1);P1=0x00; j=0; /由于单片机复位时,各个IO

18、口是高电平,先置0,以便后面查询。lcd_pos(0x01);/设置显示位置为第一行第二个字符if(P1!=0) /有键按下switch(P1) /通过检测P1口case (0x01): /sure键if(bzwi=2) count+; bzwi=bzwi-1; /标志位,每个单词只能使count加1. if(bzwi10) count=10;lcd_pos(0x48);while(dis3countk!= 0)lcd_wdat(dis3countk);/ 正确率,并且设置了标志位,使得不会重复。k+;k=0; /1*4键盘扫描到此结束。P3=0xfe;P1=0XF0; /4*7键盘扫描程序

19、, 1111 1110 扫描第一列 temp=P1&0xf0; /取P1高四位。 if(temp!=0xf0) delay(1); temp=P1&0xf0; if(temp!=0xf0) /消抖 while(P1&0xf0)!=0xf0) ; switch(temp) case 0xe0: key=0;break; 第一行 case 0xd0: key=1;break; 第二行 case 0xb0: key=2;break; 第三行 case 0x70: key=3;break; 第四行 P3=0xfd;P1=0XF0; /1111 1101扫描第2列 temp=P1&0xf0; if(te

20、mp!=0xf0) delay(1); temp=P1&0xf0; if(temp!=0xf0) while(P1&0xf0)!=0xf0) ; switch(temp) case 0xe0: key=4;break; 第一行 case 0xd0: key=5;break; 第二行 case 0xb0: key=6;break; 第三行 case 0x70: key=7;break; 第四行 P3=0xfb;P1=0XF0; /1111 1011扫描第3列 temp=P1&0xf0; if(temp!=0xf0) delay(1); temp=P1&0xf0; if(temp!=0xf0) w

21、hile(P1&0xf0)!=0xf0) ; switch(temp) case 0xe0: key=8;break; 第一行 case 0xd0: key=9;break; 第二行 case 0xb0: key=10;break; 第三行 case 0x70: key=11;break; 第四行 P3=0xf7; P1=0XF0; / 1111 0111扫描第4列temp=P1&0xf0; if(temp!=0xf0) delay(1); temp=P1&0xf0; if(temp!=0xf0) while(P1&0xf0)!=0xf0) ; switch(temp) case 0xe0:

22、key=12;break; 第一行 case 0xd0: key=13;break; 第二行 case 0xb0: key=14;break; 第三行 case 0x70: key=15;break; 第四行 P3=0xef; P1=0XF0; / 1111 0111扫描第5列temp=P1&0xf0; if(temp!=0xf0) delay(1); temp=P1&0xf0; if(temp!=0xf0) while(P1&0xf0)!=0xf0) ; switch(temp) case 0xe0: key=16;break; 第一行 case 0xd0: key=17;break; 第二

23、行 case 0xb0: key=18;break; 第三行 case 0x70: key=19;break; 第四行 P3=0xdf; P1=0XF0; / 1110 1111扫描第6列 temp=P1&0xf0; if(temp!=0xf0) delay(1); temp=P1&0xf0; if(temp!=0xf0) while(P1&0xf0)!=0xf0) ; switch(temp) case 0xe0: key=20;break; 第一行 case 0xd0: key=21;break; 第二行 case 0xb0: key=22;break; 第三行 case 0x70: ke

24、y=23;break; 第四行 P3=0xbf; P1=0XF0; / 1101 1111扫描第7列 temp=P1&0xf0; if(temp!=0xf0) delay(1); temp=P1&0xf0; if(temp!=0xf0) while(P1&0xf0)!=0xf0) ; switch(temp) case 0xe0: key=24;break; 第一行 case 0xd0: key=25;break; 第二行 case 0xb0: key=26;break; 第三行 case 0x70: key=27;break; 第四行 lcd_pos(0x07); /显示位置lcd_wdat

25、(dis4key); / 显示字母。 /while(1) /mainP1 P3x1111110x1111101x1111011x1110111x1101111x1011111x01111111110aeimquy1101bfjnrvz1011cgkosw0111dhlptxP3口输入,读取P1口高四位。sure键按下时,P1.0被拉高,当单片机读到P1.0为高时,位置为i加以,将下一个单词送去显示。如时该单词的标志位满足,正确率改变。当unknown按下时,i加一,同时给指示灯送一,(此前指示灯已被置0)。当up按下时i减一,显示上一个单词.。 当unknown按下时,i加一,显示下一个单词。

26、通过对4*7键盘的扫描,输出到P3口(每次只有一个低电平),读取P1口高四位的数据。通过switch case语句来判断键值,来查取字母表,送往显示。4.3延时子程序 delayvoid delay(unsigned char ms)unsigned char i;while(ms-)for(i = 0; i 250; i+)nop_();_nop_();_nop_();_nop_(); 通过空语句,实现1ms的延时该段语句在反汇编时为:CLR A 1个机器周期MOV R7,A 2个机器周期LOOP: INC R7 1个机器周期 NOP 1个机器周期 NOP 1个机器周期 NOP 1个机器周期

27、 CJNE R7,#250,LOOP 2个机器周期从而算出延时时间为ms*(1+2+250*(1+1+1+1+2)*1us=ms(ms).4.4 液晶屏状态读取指令表4-4:控制命令表序号指令RSR/WD7D6D5D4D3D2D1D01清显示00000000012光标返回000000001*3置输入模式00000001I/DS4显示开/关控制0000001DCB5光标或字符移位000001S/CR/L*6置功能00001DLNF*7置字符发生存贮器地址0001字符发生存贮器地址8置数据存贮器地址001显示数据存贮器地址9读忙标志或地址01BF计数器地址10写数到CGRAM或DDRAM)10要写

28、的数据内容11从CGRAM或DDRAM读数11读出的数据内容1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置 I/D:光标移动方向,高电平右移,低电平左移 S:屏幕上所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。 D:控制整体显示的开与关,高电平表示开显示,低电平表示关显示 C:控制光标的开与关,高电平表示有光标,低电平表示无光标 B:控制光标是否闪烁,高电平闪烁,低电平不闪烁。指令5:光

29、标或显示移位 S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令 DL:高电平时为4位总线,低电平时为8位总线 N:低电平时为单行显示,高电平时双行显示 F: 低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。指令7:字符发生器RAM地址设置。指令8:DDRAM地址设置。指令9:读忙信号和光标地址 BF:为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。bit lcd_bz()bit result; /result为0或1.rs = 0; / 读状态 输入 RS=L,R/W=H,E=H 。(查表3-

30、1知)rw = 1;ep = 1;_nop_();_nop_();_nop_();_nop_();result = (bit)(P0 & 0x80); /输出D0D7=状态字 ,只看输出的第8位。ep = 0;return result; /返回result,如果是1,则忙。是0,则空闲,可以操作。4.5写指令子程序void lcd_wcmd(unsigned char cmd) /写指令while(lcd_bz();/ 判断LCD是否忙碌,如果忙执行控制令 ; ,不忙则跳过。rs = 0; rw = 0; /RS=0,RW=0;E为正脉冲。 (查表3-1知)ep = 0; /E置0_nop_

31、();_nop_();P0 = cmd; /挂上指令_nop_();_nop_();_nop_();_nop_();ep = 1; _nop_();_nop_();_nop_();_nop_();ep = 0; /一个下跳沿,此时指令写入。4.6 字符显示位置指令void lcd_pos(unsigned char pos) /显示位置转换程序lcd_wcmd(pos | 0x80); /显示第一行的地址是0x80,第二行的是0xc0。调用了写指令子程序,查表4-4可得控制指令。4.5写数据指令void lcd_wdat(unsigned char dat) /写数据while(lcd_bz(

32、); / 判断LCD是否忙碌。rs = 1; / 读状态 输入 RS=H,R/W=L,E为正脉冲。(查表3-1知)。rw = 0;ep = 0;P0 = dat; / 挂上数据 。 _nop_();_nop_();_nop_();_nop_();ep = 1;_nop_();_nop_();_nop_();_nop_();ep = 0; /高脉冲写入4.6初始化LCD指令void lcd_init() /初始化lcdlcd_wcmd(0x38); /双行显示。 指令5delay(1);lcd_wcmd(0x0c); /开显示,无光标。 指令4delay(1);lcd_wcmd(0x06); /

33、光标向右移. 指令3delay(1);lcd_wcmd(0x01); /清屏 指令1delay(1); 5、实验与结果分析5.1初始化屏幕显示 图 5.1.1初始化时,由于个变量的初值都是0,所以开始时显示第一个字符串,也就是第一个单词。屏,并显示正确率。由于单词key值初始化为0,所以显示字符串的第一个字母。为“a”。“rate”显示一直不变。 笔者没有采用联调,直接用keil生成.hex文件,再在proteus单片机元件直接加在.hex文件,进行运行。结果再直接运行。5.2 sure键显示 图 5.2.1 图 5.2.2按下sure键时,显示效果由图5.2.2变为5.2.3。二位数组dis

34、1ik其中k值加1;所以查询下一个字符串,及下一个单词进行显示,同时正确率增加。同时每个单词都设置了一个标志位,初始值是2。按下sure键时,标志位被减为1。以后通过if语句,把该单词的标志位控制在1。语句判断标志位为2时正确率变量才会改变。所以每个单词只能改变正确率一次。5.3其他键的情况显示 图 5.3.1 图 5.3.2按下up down 键时,只会改变aik中k的值,不会对其他标志位产生影响。如图5.3.1按下unknown键时,警示灯亮起,如图5.3.2所示。单显示到最后一个单词时按sure unknown down键都会跳到第一个单词实现循环显示。但显示到第一个单词时按up键会跳到

35、最后一个单词显示。5.4键盘录入字母显示(7*4) 图5.4.1 图5.4.2按下键时,将扫描到的键值送往显示P1 P3x1111110x1111101x1111011x1110111x1101111x1011111x01111111110a eimquy1101bfjnrvz1011cgkosw0111dhlptxP3口输入,读取P1口高四位。第8位未用。6 小结与体会本学期的单片机综合课程设计也在一周内完成了。说起课程设计,我认为最重要的就是做好设计的预习,认真的研究老师给的题目,选一个自己有兴趣的题目。其次,老师对实验的讲解要一丝不苟的去听去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。软件的编程也要我们不断的调试,最终一个能完成课程设计的劳动成果出来了,很高兴它能按着设计的思想与要求运动起来。当然,这其中也有很多问题,由于对课本理论的不熟悉导致编程出现错误。是在学习态度上,这次课设是对我的学习态度的一次检验。对于这次单片机综合课程实习,我的第一大心得体会就是作为一名工程技术人员,要求具备的首要素质绝对应该是严谨。我们这次实习所遇到的多半问题多数都是由于我们不够严谨。我认识到,无论做

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服