单词记忆测试器Word版

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

自动化专业综合设计报告设计题目:单词记忆测试器所在实验室:数院407

指导教师:刘华东

学生姓名:陈文

班级:计112-2

学号:201163872215

成绩评定:

设计目的

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

2.通过本次单片机综合设计,使加深对C51单片机的认识,提高编程应用能力,并掌握Proteus仿真软件的使用。

一、设计要求

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

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

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

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

二、设计内容

3.1 设计思路

本题目实质上是一个具有一定复杂程度键盘扫描程序,可将单词存储在一个二维数组中,按“确定”键开始程序后,次显示0行的数组,即第一个单词。之后按下“向上”按键,显示上一行数组,即上一个单词;按下“向下”按键,显示下一行数组,即下一个单词。当显示的行数超过9时,程序结束,并通过按“确认”的次数,计算出正确率。

根据课题要求,使用C51进行编程,建立字符型数组存放单词,通过LCD1602显示所存放的单词。通过对简易键盘的扫描确定按下了那个按键,对单词做以下四种处理:(1)确认:表示对当前单词认识,使显示下一个单词,并置计数数组的对应位为1;

(2)不认识:表示对当前单词不认识,使显示下一个单词,并置计数数组的对应位为0;

(3)上一个:不对当前单词做任何处理,使显示上一个单词,计数数组对应位不变;

(4)下一个:不对当前单词做任何处理,使显示下一个单词,计数数组对应位不变;

没显示一个单词,在LCD显示已经显示单词的认识个数,如“1/10”,当10个单词显示完毕,最后给出单词认识率,如“70%”。此时,按下任何按键,系统自动回到初始状态。

3.2 电路设计原理图

电路原理图设计使用集原理图设计、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为低电平时点亮LED灯。

3.3软件编程设计

1.键盘扫描

a=P1; //读取按键

switch(a)

{ case 0xff:b=0;break; //没有按下按键

case 0xfe:{

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

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

b=0; //指示灯不亮

while(sure!=0);//按键松手检测

}

break; //确定,下一个

case 0xfd:{

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

i++; //下一个单词

b=1; //指示灯亮

while(unknown!=0);

}

break; //不认识,下一个

case 0xfb:{

b=0;

i--;

while(up!=0); //松手检测

}

break; //上一个

case 0xf7:{

b=0;

i++;

while(down!=0); //松手检测

}

break; //下一个}

2.检查状态是否忙

bit test() //读忙信号

{

bit busy;

RS=0;

RW=1;

E=1;

_nop_();

_nop_();

_nop_();

_nop_();

busy=BF;

E=0;

return busy;

}

3.写控制字

void write_com(uchar com) //写控制字

{

while(test()==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.LCD液晶初始化

void LCD_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(0x06);

delay(5);

write_com(0x01);

delay(5);

}

5.LCD显示函数

void write_date(uchar date) //写数据到LCD 显示出来

相关文档
最新文档