单词记忆测试器程序设计.docx

上传人:b****6 文档编号:14230280 上传时间:2023-06-21 格式:DOCX 页数:49 大小:119.59KB
下载 相关 举报
单词记忆测试器程序设计.docx_第1页
第1页 / 共49页
单词记忆测试器程序设计.docx_第2页
第2页 / 共49页
单词记忆测试器程序设计.docx_第3页
第3页 / 共49页
单词记忆测试器程序设计.docx_第4页
第4页 / 共49页
单词记忆测试器程序设计.docx_第5页
第5页 / 共49页
单词记忆测试器程序设计.docx_第6页
第6页 / 共49页
单词记忆测试器程序设计.docx_第7页
第7页 / 共49页
单词记忆测试器程序设计.docx_第8页
第8页 / 共49页
单词记忆测试器程序设计.docx_第9页
第9页 / 共49页
单词记忆测试器程序设计.docx_第10页
第10页 / 共49页
单词记忆测试器程序设计.docx_第11页
第11页 / 共49页
单词记忆测试器程序设计.docx_第12页
第12页 / 共49页
单词记忆测试器程序设计.docx_第13页
第13页 / 共49页
单词记忆测试器程序设计.docx_第14页
第14页 / 共49页
单词记忆测试器程序设计.docx_第15页
第15页 / 共49页
单词记忆测试器程序设计.docx_第16页
第16页 / 共49页
单词记忆测试器程序设计.docx_第17页
第17页 / 共49页
单词记忆测试器程序设计.docx_第18页
第18页 / 共49页
单词记忆测试器程序设计.docx_第19页
第19页 / 共49页
单词记忆测试器程序设计.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单词记忆测试器程序设计.docx

《单词记忆测试器程序设计.docx》由会员分享,可在线阅读,更多相关《单词记忆测试器程序设计.docx(49页珍藏版)》请在冰点文库上搜索。

单词记忆测试器程序设计.docx

单词记忆测试器程序设计

 

扬州大学水利与能源动力工程学院

课程设计报告

 

题目:

单词记忆测试器程序设计

课程:

单片机原理及应用课程设计

 

第一部分

 

 

《单片机原理及应用》课程设计任务书

一、课题名称

单词记忆测试器程序设计

二、课程设计目的

课程设计是课程教学中的一项重要内容,是达到教学目标的重要环节,是综合性较强的实践教学环节,它对帮助学生全面牢固地掌握课堂教学内容、培养学生的实践和实际动手能力、提高学生全面素质具有很重要的意义。

《单片机原理及应用》是一门理论性、实用性和实践性都很强的课程,课程设计环节应占有更加重要的地位。

单片机原理及应用课程设计的目的是让学生在理论学习的基础上,通过完成一个涉及MCS-51单片机多种资源应用并具有综合功能的小系统目标板的设计与编程应用,使学生不但能将课堂上学到的理论知识与实际应用结合起来,而且能进一步加深对电子电路、电子元器件等知识的认识与理解,同时在软件编程、排错调试、相关软件和仪器设备的使用技能等方面得到较全面的锻炼和提高。

为今后能够独立进行某些单片机应用系统的开发设计工作打下一定的基础。

通过单片机硬件和软件设计、调试、整理资料等环节的培训,使学生初步掌握工程设计方法和组织实践的基本技能,逐步熟悉开展科学实践的程序和方法。

三、课程设计内容

设计以89C51单片机和外围元器件构成的单片机应用系统,并完成相应的软硬件调试。

1.系统方案设计:

综合运用单片机课程中所学到的理论知识,学生根据所选课题的任务、要求和条件进行总体方案的设计。

2.硬件电路设计:

对方案中以单片机为核心的电路进行设计计算,包括元器件的选择和电路参数的计算,并画出总体电路图。

3.软件设计:

根据已设计出的软件系统框图,用汇编语言或C51编制出各功能模块的子程序和整机软件系统的主程序。

4.调试:

在单片机EDA仿真软件环境Proteus下进行仿真设计并调试;或在单片机周立功实验箱上进行相关设计并调试。

四、课程设计要求

设计一个以单片机为核心的单词记忆测试器:

1、实现单词的录入(为使程序具有可演示性,单词不少于10个)。

2、单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个。

3、单词背完后给出正确率。

4单词

五、进度安排

序号

内容

天数

1

布置任务,熟悉课题要求,学习proteus

0.5

2

总体方案确定,硬件电路设计

1.5

3

软件编程

1.5

4

Proteus仿真,调试

2

5

总结,撰写课程设计报告

1.5

七、课程设计报告内容:

总结设计过程,写出设计报告,设计报告具体内容要求如下:

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、ML016L16*2LCD液晶屏显示模块

该模块是将单片机送来的数据进行显示。

5、错误提示模块

当不认识单词时,发出警示信号。

6、按键时喇叭不响,松开时喇叭播放音乐。

 

2.2系统硬件模块图

1*4键盘

LM016L

LCD2*16

液晶显示模块

单片机中央处理模块

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口、一个串行口、4KBROM、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-1LCD1602时序表如下

编号

符号

引脚说明

编号

符号

引脚说明

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。

即可实现。

主要注意单片机复位时,各口都是1,要先置0。

才能开始时灭。

 

4、软件编程设计

4.1程序设计框图

因本系统为模块化设计,为方便软件编写和移植,程序设计采用C语言,程序流程图如下:

4.2主程序函数

voidmain(void)

{

unsignedchara,c,i,j,k,p,q/*,key*/;

bitb;

LCD_init();//液晶初始化子程序

delay(10);//延时10ms子程序

p=0;

q=0;

c=0;

i=0;

write_com(0x01);//写控制字

delay(5);//延时5ms

write_address(0x00);//写LCD第一行开头地址

delay(5);

j=0;

while(string[j]!

='\0')

{

write_date(string[j]);

j++;

delay(10);

}

write_address(0x40);//写LCD第一行开头地址

delay(5);

j=0;

while(string00[j]!

='\0')

{

write_date(string00[j]);

j++;

delay(50);

}

delay(200);

delay(200);

delay(200);

delay(200);

delay(200);

delay(200);

delay(200);

delay(200);

delay(200);

delay(200);

while

(1)

{

LCD_init();//液晶初始化子程序

delay(10);//延时10ms子程序

write_address(0x00);//写LCD第一行开头地址

delay(5);

while(i<10)

{

write_address(0x00);//写LCD第一行开头地址

delay(5);

j=0;

while(string0[i][j]!

='\0')

{

write_date(string0[i][j]);

j++;

delay(10);

}//显示Word

write_address(0x40);//第二行开头地址

delay(5);

k=0;

while(string0[i][k]!

='\0')

{

write_date(string1[i][k]);

k++;

delay(10);//显示单词

}

write_address(0x09);

delay(5);

c=0;

for(j=0;j<=10;j++)

c+=czhi[j];

write_date(string2[c]);

write_address(0x0b);

delay(5);

write_date('/');

write_address(0x0d);

write_date('1');

write_address(0x0e);

write_date('0');

a=P1&0x0f;//读取按键

/*------------------------------------------------

音乐函数

------------------------------------------------*/

while(a==0x0f)

{

unsignedchark,i;

TMOD|=0x01;//置定时器0工作方式1

EA=1;//打开全局中断

ET0=1;//打开定时0中断

while(a==0x0f)

{

i=0;

while(i<100)//音乐数组长度,唱完从头再来

{a=P1&0x0f;

if(a!

=0x0f)

break;

k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据

Timer0_H=FREQH[k];

Timer0_L=FREQL[k];

Time=MUSIC[i+2];//节拍时长

i=i+3;

Song();

}

a=P1&0x0f;

}

break;

}

switch(a)

{

case0x0f:

b=0;break;//没有按下按键

case0x0e:

{

czhi[i]=1;//用数组记录当前单词是认识的

i++;//指向下一个单词

b=0;//指示灯不亮

while(sure!

=1);//按键松手检测

}break;//确定,下一个

case0x0d:

{

czhi[i]=0;//记录当前单词是不认识的,c认识单词个数不变

i++;//下一个单词

b=1;//指示灯亮

while(unknown!

=1);

}break;//不认识,下一个

case0x0b:

{

b=1;

i--;

while(up!

=1);//松手检测

}break;//上一个

case0x07:

{

b=1;

i++;

while(down!

=1);//松手检测

}break;//下一个

}

P1=0x0f;

error=b;

delay(200);//如果错误,灯亮

error=0;

}

c=0;

for(j=0;j<=10;j++)

c+=czhi[j];//就算认识单词的个数

for(j=0;j<=10;j++)

czhi[j]=0;//清空数组

LCD_init();//液晶初始化子程序

delay(10);//延时10ms子程序

//以下的显示正确率

while(i==10)

{

write_address(0x00);//第二行开头地址

delay(5);

q=0;

while(string3[q]!

='\0')

{

write_date(string3[q]);//显示正确率

q++;delay(10);

}

write_address(0x40);//第二行开头地址

delay(5);

k=c;//保存当前c值

c=c*10;

if(c<100&&c!

=0)//c不等于0,小于100

{

c=c/10;

write_date(string2[c]);

delay(10);

write_date(string2[0]);

delay(10);

}

elseif(c==100)//全部认识

{

write_date(string2[1]);

delay(10);

write_date(string2[0]);

delay(10);

write_date(string2[0]);

delay(10);

}

else//c=0,都不认识

{

write_date(string2[0]);

delay(10);

}

write_date(string4[0]);//显示百分号%

delay(100);//延时100ms

q=0;

a=P1&0x0f;//检测有没有按键按下

if(a==0x0e||a==0x0d||a==0x0b||a==0x07)

{

i=0;

c=0;

}//有键按下,重新显示第一个单词

else

c=k;//没有键按下,循环显示正确率

while(a==0x0f)

{

unsignedchark,i;

TMOD|=0x01;//置定时器0工作方式1

EA=1;//打开全局中断

ET0=1;//打开定时0中断

while(a==0x0f)

{

i=0;

while(i<100)//音乐数组长度,唱完从头再来

{a=P1&0x0f;

if(a!

=0x0f)

break;

k=MUSIC[i]+7*MUSIC[i+1]-1;//去音符振荡频率所需数据

Timer0_H=FREQH[k];

Timer0_L=FREQL[k];

Time=MUSIC[i+2];//节拍时长

i=i+3;

Song();

}

a=P1&0x0f;

}

break;

}

delay(100);

}

delay(200);

delay(200);

delay(200);

delay(200);

delay(200);

}

}

4.3延时子程序delay

voidDelayMs(unsignedchart)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}

/*------------------------------------------------

节拍延时函数

各调1/4节拍时间:

调4/4125ms

调2/4250ms

调3/4187ms

------------------------------------------------*/

voiddelayN(unsignedchart)

{

unsignedchari;

for(i=0;i

DelayMs(250);

TR0=0;

}

4.4液晶屏状态读取指令

表4-4:

控制命令表

序号

指令

RS

R/W

D7

D6

D5

D4

D3

D2

D1

D0

1

清显示

0

0

0

0

0

0

0

0

0

1

2

光标返回

0

0

0

0

0

0

0

0

1

*

3

置输入模

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2