基于单片机的单词记忆器设计Word文档格式.docx
《基于单片机的单词记忆器设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于单片机的单词记忆器设计Word文档格式.docx(34页珍藏版)》请在冰豆网上搜索。
![基于单片机的单词记忆器设计Word文档格式.docx](https://file1.bdocx.com/fileroot1/2022-11/25/aa27e890-69f0-457f-8757-50f9b3cdc701/aa27e890-69f0-457f-8757-50f9b3cdc7011.gif)
内容
天数
1
布置任务,熟悉课题要求
0.5
2
总体方案确定,硬件电路设计
1.5
3
软件编程
4
Proteus仿真,或在周立功实验箱上调试
5
总结,撰写课程设计报告
七、课程设计报告内容:
总结设计过程,写出设计报告,设计报告具体内容要求如下:
1.课程设计的目和设计的内容。
2.课程设计的要求。
3.控制系统总框图及系统工作原理。
4.控制系统的硬件电路连接图,电路的原理。
5.软件设计流程图及其说明。
6.电路设计,软件编程、调试中遇到的问题及分析解决方法。
7.实验结果及其分析。
8.体会。
第二部分
课
程
设
计
报
告
1课题简介
1.1课题名称:
1.2课题目的
本次课程设计,我的课题是《单词记忆测试器程序设计》,实用性强,针对性强。
目的在于提高我本人以及团队的单片机应用能力和对单片机工作原理的理解分析能力。
课题任务及要求
实现单词的录入(为使程序具有可演示性,单词不少于10个)。
单词用按键控制依次在屏幕上显示,按键选择认识还是不认识,也可以直接进入下一个或者上一个。
单词背完后给出正确率。
2单词记忆测试器方案设计
2.1设计思路
本题目实质上是一个具有一定复杂程度键盘扫描程序,可将单词存储在一个二维数组中,按“确定”键开始程序后,次显示0行的数组,即第一个单词。
之后按下“向上”按键,显示上一行数组,即上一个单词;
按下“向下”按键,显示下一行数组,即下一个单词。
当显示的行数超过9时,程序结束,并通过按“确认”的次数,计算出正确率。
根据课题要求,使用C51进行编程,建立字符型数组存放单词,通过LCD1602显示所存放的单词。
通过对简易键盘的扫描确定按下了那个按键,对单词做以下四种处理:
(1)确认:
表示对当前单词认识,使显示下一个单词,并置计数数组的对应位为1;
(2)不认识:
表示对当前单词不认识,使显示下一个单词,并置计数数组的对应位为0;
(3)上一个:
不对当前单词做任何处理,使显示上一个单词,计数数组对应位不变;
(4)下一个:
不对当前单词做任何处理,使显示下一个单词,计数数组对应位不变;
没显示一个单词,在LCD显示已经显示单词的认识个数,如“1/10”,当10个单词显示完毕,最后给出单词认识率,如“70%”。
此时,按下任何按键,系统自动回到初始状态。
2.2系统流程图
程序流程图说明:
程序流程图是程序分析中最基本、最重要的分析技术,它是进行流程程序分析过程中最基本的工具。
程序流程图是人们对解决问题的方法、思路或算法的一种描述。
流程图的优点:
(a)采用简单规范的符号,画法简单;
(b)结构清晰,逻辑性强;
(c)便于描述,容易理解。
3单词记忆测试器硬件电路设计
3.1系统整体框图
中央处理模块选用AT89C51单片机系统组成,电路包括:
AT89C51单片机、复位电路、时钟振荡电路。
AT89C51单片机需在复位电路和时钟振荡电路组成的最小系统下工作,单片机引脚图如图5,外围电路如图6和图7所示,时钟电路采用频率采用为12MHZ的晶振,C1、C2与晶振构成了外部振荡电路。
复位电路采用电解电容与电阻串联,当系统上电时,由于电容充电,在RST端会产生一个高电平,高电平持续的时间由电容和电阻的值决定,当RESET信号为低电平时,系统为工作状态。
AT89C51具有ISP的功能,可以通过串行口直接将程序下载到单片机内。
在下载程序状态下,RESET信号被拉高,系统进行程序下载,待程序下载完毕后,RESET重新拉低。
用户可以通过切断电源进行手动复位,或者通过重新下载新的程序进行复位。
图4系统硬件模块图
3.2AT89C51单片机引脚图
图5AT89C51的引脚排列图
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后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为低八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下:
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;
当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.3单片机外围时钟电路图
图6时钟电路图
单片机晶振的必要性:
简单地说,没有晶振,就没有时钟周期,没有时钟周期,就无法执行程序代码,单片机就无法工作。
单片机工作时,是一条一条地从RoM中取指令,然后一步一步地执行。
单片机访问一次存储器的时间,称之为一个机器周期,这是一个时间基准。
—个机器周期包括12个时钟周期。
如果一个单片机选择了12MHZ晶振,它的时钟周期是1/12us,它的一个机器周期是12×
(1/12)us,也就是1us。
MCS—51单片机的所有指令中,有一些完成得比较快,只要一个机器周期就行了,有一些完成得比较馒,得要2个机器周期,还有两条指令要4个机器周期才行。
为了衡量指令执行时间的长短,又引入一个新的概念:
指令周期。
所谓指令周期就是指执行一条指令的时间。
例如,当需要计算DJNZ指令完成所需要的时间时,首先必须要知道晶振的频率,设所用晶振为12MHZ,则一个机器周期就是1us。
而DJNZ指令是双周期指令,所以执行一次要2us。
如果该指令需要执行500次,正好1000us,也就是1ms。
机器周期不仅对于指令执打有着重要的意义,而且机器周期也是单片机定时器和计数器的时间基准。
例如一个单片机选择了12MHZ晶振,那么当定时器的数值加1时,实际经过的时间就是1us,这就是单片机的定时原理。
单片机晶振的作用:
单片机晶振的作用是为系统提供基本的时钟信号。
通常一个系统共用一个晶振,便于各部分保持同步。
有些通讯系统的基频和射频使用不同的晶振,而通过电子调整频率的方法保持同步。
晶振通常与锁相环电路配合使用,以提供系统所需的时钟频率。
如果不同子系统需要不同频率的时钟信号,可以用与同一个晶振相连的不同锁相环来提供。
在通常工作条件下,普通的晶振频率绝对精度可达百万分之五十。
高级的精度更高。
有些晶振还可以由外加电压在一定范围内调整频率,称为压控振荡器(VCO)。
晶振用一种能把电能和机械能相互转化的晶体在共振的状态下工作,以提供稳定,精确的单频振荡。
3.4单片机外围复位电路图
图7复位电路图
上电复位时序:
在单片机及其应用电路每次上电的过程中,由于电源回路中通常存在一些容量大小不等的滤波电容,使得单片机芯片在其电源引脚VCC和VSS之间所感受到的电源电压值VDD,是从低到高逐渐上升的。
该过程所持续的时间一般为1~100ms(记作taddrise)。
上电延时taddrise的定义是电源电压从10%
VDD上升到90%VDD所需的时间。
在单片机电源电压上升到适合内部振荡电路运行的范围并且稳定下来之后,时钟振荡器开始了启动过程(具体包括偏置、起振、锁定和稳定几个过程)。
该过程所持续的时间一般为1~50
ms(记作tosc)。
起振延时tosc的定义是时钟振荡器输出信号的高电平达到Vih1所需的时间。
从一些实际测量图中也可以看得很清楚。
这里的Vih1是单片机电气特性中的一个普通参数,代表XTAL1和RST引脚上的输入逻辑高电平。
例如,对于常见的单片机型号AT89C51和AT89S51,厂家给出的Vih1值为0.7VDD~VDD+0.5
V。
从理论上讲,单片机每次上电复位所需的最短延时应该不小于treset。
这里,treset等于上电延时taddrise与起振延时tosc之和。
从实际上讲,延迟一个treset往往还不够,不能够保障单片机有一个良好的工作开端。
在单片机每次初始加电时,首先投入工作的功能部件是复位电路。
复位电路把单片机锁定在复位状态上并且维持一个延时(记作TRST),以便给予电源电压从上升到稳定的一个等待时间;
在电源电压稳定之后,再插入一个延时,给予时钟振荡器从起振到稳定的一个等待时间;
在单片机开始进入运行状态之前,还要至少推迟2个机器周期的延时。
3.5LCD显示器电路
图8LCD显示器接线图
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下:
图9LCD显示器尺寸图
1602LCD主要技术参数:
显示容量:
16×
2个字符
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
字符尺寸:
2.95×
4.35(W×
H)mm
引脚功能说明:
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表10-13所示:
编号
符号
引脚说明
VSS
电源地
9
D2
数据
VDD
电源正极
10
D3
VL
液晶显示偏压
11
D4
RS
数据/命令选择
12
D5
R/W
读/写选择
13
D6
6
E
使能信号
14
D7
7
D0
15
BLA
背光源正极
8
D1
16
BLK
背光源负极
1602LCD的指令说明及时序
1602液晶模块内部的控制器共有11条控制指令,如表10-14所示:
指令
清显示
光标返回
*
置输入模式
I/D
S
显示开/关控制
D
C
B
光标或字符移位
S/C
R/L
置功能
DL
N
F
置字符发生存贮器地址
字符发生存贮器地址
置数据存贮器地址
显示数据存贮器地址
读忙标志或地址
BF
计数器地址
写数到CGRAM或DDRAM)
要写的数据内容
从CGRAM或DDRAM读数
读出的数据内容
控制命令表
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
读状态
输入
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=高脉冲
1602LCD的RAM地址映射及标准字库表
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图10-57是1602的内部显示地址。
图101602LCD内部显示地址
3.6电路设计原理图
电路原理图设计使用集原理图设计、PCB设计、电路仿真功能为一体的PROTUES软件。
以该软件设计的电路原理图图11。
电路设计参数:
(1)C1C2为20-30PF瓷片电容,与12M晶振组成时钟振荡电路;
(2)复位电路使用R1为10K电阻、C3为10uF电解电容;
(3)1602液晶模块与单片机P0口连接,因P0口为真正的三态门结构,因些作数据总线使用时要外接上拉电阻,可使用10K的排阻;
(4)电路的供电为5V直流电源;
(5)D1为输入错误的状态指示灯,加220欧限流电阻连到VCC,因为STC89C51单片机IO的电流灌入能力要强于电流输出能力,因此一般使IO为低电平时点亮LED灯。
图111602LCD系统设计原理图
4单词记忆测试器软件编程设计
4.1程序设计思路
因本系统为模块化设计,为方便软件编写和移植,程序设计采用C语言。
流程图前文已经给出。
4.2键盘扫描
a=P1&
0x0f;
//读取按键
switch(a)
{case0x00:
b=0;
break;
//没有按下按键
case0x01:
{
czhi[i]=1;
//用数组记录当前单词是认识的
i++;
//指向下一个单词
b=0;
//指示灯不亮
while(sure!
=0);
//按键松手检测
}
break;
//确定,下一个
case0x02:
czhi[i]=0;
//记录当前单词是不认识的,c认识单词个数不变
//下一个单词
b=1;
//指示灯亮
while(unknown!
}
//不认识,下一个
case0x04:
i--;
while(up!
//松手检测
//直接上一个
case0x08:
{
while(down!
//直接下一个
}
P1=0;
4.2检查状态是否忙
bittest()//读忙信号
bitbusy;
RS=0;
RW=1;
E=1;
_nop_();
busy=BF;
E=0;
returnbusy;
}
4.3写控制字
voidwrite_com(ucharcom)//写控制字
while(test()==1)
;
RW=0;
P0=com;
//写指令,RL=0,RW=0,E=高脉冲
4.4LCD液晶初始化
voidLCD_init(void)//液晶初始化
delay(15);
write_com(0x38);
delay(5);
write_com(0x38);
write_com(0x38);
write_com(0x0c);
write_com(0x06);
write_com(0x01);
}
4.5LCD显示函数
voidwrite_date(uchardate)