基于单片机的液晶计算器设计.docx

上传人:b****6 文档编号:7704140 上传时间:2023-01-25 格式:DOCX 页数:26 大小:295.40KB
下载 相关 举报
基于单片机的液晶计算器设计.docx_第1页
第1页 / 共26页
基于单片机的液晶计算器设计.docx_第2页
第2页 / 共26页
基于单片机的液晶计算器设计.docx_第3页
第3页 / 共26页
基于单片机的液晶计算器设计.docx_第4页
第4页 / 共26页
基于单片机的液晶计算器设计.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

基于单片机的液晶计算器设计.docx

《基于单片机的液晶计算器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的液晶计算器设计.docx(26页珍藏版)》请在冰豆网上搜索。

基于单片机的液晶计算器设计.docx

基于单片机的液晶计算器设计

目录

1.课程设计的目的……………………………………………………2

2.课程设计的内容和要求………………………………………………2

2.1课程设计内容……………………………………………………2

2.2课程设计要求……………………………………………………2

3.课程设计原理……………………………………………………2

4.课程设计所需器材及其介绍…………………………………………2

4.1课程设计所需器材………………………………………………2

4.2课程设计所需器材介绍…………………………………………2

5.课程设计步骤……………………………………………………6

5.1问题分析……………………………………………………6

5.2算法设计……………………………………………………6

5.3功能模块分割……………………………………………………6

5.4算术运算程序流程图……………………………………………6

5.5系统总流程图……………………………………………………7

5.6仿真电路模型的构建……………………………………………7

6.课程设计结果及结论…………………………………………………7

6.1课程设计结果……………………………………………………7

6.1.1仿真模型与结果………………………………………………7

6.1.2程序设计……………………………………………………8

7.心得体会……………………………………………………10

8.参考文献……………………………………………………10

9.附录……………………………………………………11

 

1.课程设计的目的

通过本课程设计使学生进一步巩固单片机原理与技术的基本概念、基本理论,分析问题的基本方法;增强学生的软件编程实现能力和解决实际问题的能力,使学生能有效地将理论和实际紧密结合,拓展学生在工程实践方面的专业知识和相关技能。

2.课程设计的内容和要求

2.1课程设计内容

基于液晶显示的简易计算器设计。

2.2目标

1.硬件电路包括1602显示屏,4*4键盘。

2.能够显示不少于4位的数字。

3.能够完成1位以上十进制数的加、减、乘、除运算,结果保留至小数点后1位。

4.设计中使用C语言编程。

3.课程设计原理

运用MM74C922芯片作为4*4键盘的译码器输入AT89C51单片机内,再植入运算的程序,通过LCD静态显示相关数字,得到计算结果,电路中同时有复位电路,内部时钟模式电路来控制,是电路更稳定。

4.课程设计所需器材及其介绍

4.1课程设计所需器材

本设计选用AT89C51单片机为主控单元;

显示部分:

采用LCD静态显示;

按键部分:

采用4*4键盘;

用MM74C922为4*4键盘扫描IC,读取输入的键值。

AT89C51LM016LMM74C9224*4键盘

4.2课程设计所需器材介绍

(1).AT89C51芯片

MCS-51单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。

如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O口、串行口、定时器/计数器、中断系统及特殊功能寄存器(SFR)。

单片机是靠程序运行的,并且可以修改。

通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!

因此我们采用单片机作为计算器的主要功能部件,可以进行很快地实现运算功能,如图4-1所示:

图4-1AT89C51芯片

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后,被内部上拉为高,可用作输入,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:

来自反向振荡器的输出。

(2).4*4键盘

计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。

矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。

这样键盘上按键的个数就为4×4个。

这种行列式键盘结构能有效地提高单片机系统中I/O口的利用率。

矩阵键盘的工作原理:

计算器的键盘布局如图4-2所示:

一般有16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。

图4-2矩阵键盘布局图

矩阵键盘内部电路图如图4-3所示:

图4-3矩阵键盘内部电路图

(3).MM74C922

为了进一步节省单片机I/O口资源,我在设计中使用了MM74C922芯片。

MM74C922是一款4*4键盘扫描IC,它可检测到与之相连的4*4键盘的按键输入,并通过数据输出口将按键相应的编码输出。

其引脚图如图4-4所示:

图4-4MM94C22

MM74C922特点及引脚功能

MM74C922具有下列特点:

1.功耗低,电压3—5V;2.三态门输出,与LPTTL兼容;3.输出锁存按下的最后的键;4.用一个电容器就可以消除键盘抖动;5.两键轮回;6.行具有上拉功能;7.具有芯片内或芯片外时钟;8.最大开关电阻为50KΩ。

MM74C922采用18脚双列直插封装,其引脚排列如图图4-4所示。

各引脚功能如下:

(1)Y1~Y4(脚1~脚4):

4*4键盘第一列至第四。

(2)X1~X4(脚11、10、8、7):

4*4键盘第一行至第四行。

(3)DOA~DOD(DataoutA~D,脚14~17):

按键之BCD码输出,其中DOA为LSB,DOD为MSB。

(4)OSC(Oscillator,脚5):

键盘扫描电路之频率所需外加电容的连引脚。

(5)KBM(KeyboardMask,脚6):

内部消除开关弹跳电路所外加电容的引脚。

(6)OE(OutputEnable,脚13):

芯片使能脚,接低电位可使芯片使能。

(7)DA(DataAvailable,脚12):

数据有效输出脚。

任一按键按下时,此脚位会输出高电位,按键释放后此脚又会恢复为低电位。

MM74C92真值表如下表所示

MM74C922真值表

开关位置

数据输出

开关位置

数据输出

DCBA

DCBA

0(Y1X1)

0000

8(Y3X1)

1000

1(Y1X2)

0001

9(Y3X2)

1001

2(Y1X3)

0010

10(Y3X3)

1010

3(Y1X4)

0011

11(Y3X4)

1011

4(Y2X1)

0100

12(Y4X1)

1100

5(Y2X2)

0101

13(Y4X2)

1101

6(Y2X3)

0110

14(Y4X3)

1110

7(Y2X4)

0111

15(Y4X4)

1111

键盘扫描可采用外部时钟或外接电容来执行。

译码器具有芯片的上拉电阻,使开关电阻可以高达50kΩ。

开关矩阵中不需要二极管就可以消除多重开关,内部消颤电路仅需要一个单一电容就可以实现。

当有键按下时,数据输出有效为高电平;当键释放后,数据输出有效返回到低电平。

即使有另外一个键按下,在正常消颤期间后,数据输出有效返回至高电平表明接受新的键输入。

在任何两个开关之间备有两键轮回功能。

即使某一键释放,内部锁存器仍然锁存住按下的最后的键值。

三态门输出便于总线的扩展和运行。

(4).LCD显示

本设计采用LCD液晶显示器(图4-5)来显示输出数据。

通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。

图4-5LM016L

LM017LLCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表所示:

编号

符号

引脚说明

编号

符号

引脚说明

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

背光源负极

引脚接口说明表

 

LM017L液晶模块内部的控制器共有11条控制指令,如下表所示:

序号

指令

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

置输入模式

0

0

0

0

0

0

0

1

I/D

S

4

显示开/关控制

0

0

0

0

0

0

1

D

C

B

5

光标或字符移位

0

0

0

0

0

1

S/C

R/L

*

*

6

置功能

0

0

0

0

1

DL

N

F

*

*

7

置字符发生存贮器地址

0

0

0

1

字符发生存贮器地址

8

置数据存贮器地址

0

0

1

显示数据存贮器地址

9

读忙标志或地址

0

1

BF

计数器地址

10

写数到CGRAM或DDRAM)

1

0

要写的数据内容

11

从CGRAM或DDRAM读数

1

1

读出的数据内容

控制命令表

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:

读数据。

读写操作时序如下图所示:

读操作时序

写操作时序

 

1602LCD的RAM地址映射及标准字库表

液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。

要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,下图是1602的内部显示地址。

1602LCD内部显示地址

例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?

这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。

在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。

每次输入指令前都要判断液晶模块是否处于忙的状态。

1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,如图10-58所示,这些字符有:

阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”

图10-58字符代码与图形对应图

5.课程设计步骤

5.1问题分析

(1)怎么实现从键盘输入数据或功能的算法。

(2)怎么实现在LCD上数据的显示的算法。

(3)怎么实现对数据的运算功能的算法。

5.2算法设计

(1)通过MM74C922芯片对键盘的译码来实现键盘输入检测程序。

(2)利用LCD静态显示,通过程序向LCD写指令字或数据使LCD完成不同功能或显示相应数据。

(3)将各种运算符的算法通过编写灵活的子程序来实现。

5.3功能模块分割

 

5.4算术运算程序流程图

5.5系统总流程图

 

5.6仿真电路模型的构建

6.课程设计结果及结论

6.1课程设计结果

6.1.1硬件/软件程序设计

1.硬件电路图

2.软件程序设计

完整程序见附录。

7.心得体会

刚开始,我们头绪不是很清楚,不知道从哪里入手,但通过老师的耐心指导和同学认真研究设计课题,上网查资料、确定基本设计方案、对所用芯片功能进行查找、调试、上机仿真等,经历了一次次的困难,却积累了很多宝贵的经验。

在整个设计的过程中遇到的问题主要有以下三点,第一:

基础知识掌握的不牢固,主要表现在一些常用的电路的形式和功能不清楚,对书本上的内容理解不够透彻。

第二:

对一些常用的应用软件缺少应用。

第三:

相关知识掌握的不够全面,缺少系统设计的经验。

我觉得动手之前,头脑里必须清楚该怎么做,这一点是很重要的。

8.参考文献

[1]何宏、龚威编著,单片机原理与接口技术,北京,国防工业出版社,2006.1

[2].康华光,电子技术基础数字部分(第五版),高等教育出版社,2006.1。

[3]胡汉才编著,单片机原理及其接口技术,北京:

清华大学出版社,1996.7

[4].郭天祥,51单片机C语言教程,北京:

电子工业出版社,2009.1。

[5]何立民主编,MCS-51系列单片机应用系统设计,北京:

北京航空航天大学出版社,1990

 

9.附录

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable[]="wsn_ji_suan_qi";

chartranslate(intkeycode);

voidarithmetic();

voidinit_LCM();

voidwrite_data(charddata);

voidwrite_com(charcommand);

voidcheck_BF();

voidclearLCD();

voiddisplay(longa);

voiddealerror();

voiddataoverflow();

/*定义变量*/

longx=0,x1=0,y=0,z=0,num=0;

intoperators,input,iny=0,count=0;

uchark=0;

charkey;

charerror[5]="error";

charoverflow[8]="overflow";

sbitEN=P3^4;

sbitR_W=P3^5;

sbitRS=P3^6;

main()

{

EA=1;

EX0=1;

IT0=1;

P2=0xff;

write_com(0x30);//display(0);

init_LCM();

write_com(0x01);

for(count=0;count<16;count++)

{

write_data(table[count]);

}

write_com(0x80+0x40);//改变地址指针从第二行开始写

while

(1)

{

}

}

chartranslate(intkeycode)//键盘译码

{

switch(keycode)

{

case0:

return'7';break;

case1:

return'4';break;

case2:

return'1';break;

case3:

return'c';break;

case4:

return'8';break;

case5:

return'5';break;

case6:

return'2';break;

case7:

return'0';break;

case8:

return'9';break;

case9:

return'6';break;

case10:

return'3';break;

case11:

return'=';break;

case12:

return'/';break;

case13:

return'*';break;

case14:

return'-';break;

case15:

return'+';break;

}

}

/*外部中断处理*/

voidINT_0(void)interrupt0

{

if(key=='=')

{key=translate(P2&0x0f);

if(key<='9'&&key>='0')

clearLCD();

else

{clearLCD();

display(x1);

x=x1/10;

}

}

key=translate(P2&0x0f);

if(key<='9'&&key>='0')//判断按下的键是否为数值

{

num=num*10+(key-'0');

if(operators>0)

{

y=num;

iny=1;

}

else

x=num;

if(num<214748364&&num>-214748364)

{

write_data(key);

}

else

dataoverflow();

}

else

{

switch(key)

{

case'c':

x=0;

y=0;

num=0;

operators=0;

clearLCD();

break;

case'=':

write_data(0x3d);

arithmetic();

iny=0;

operators=0;

num=0;

break;

case'+':

write_data(0x2b);

if(operators)

arithmetic();

operators=1;

num=0;

break;

case'-':

write_data(0x2d);

if(operators)

arithmetic();

operators=2;

num=0;

break;

case'*':

write_data(0x2a);

if(operators)

arithmetic();

operators=3;

num=0;

break;

case'/':

write_data(0x2f);

if(operators)

arithmetic();

operators=4;

num=0;

break;

}

}

}

voidarithmetic()//运算子程序

{

if(iny)

{

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

当前位置:首页 > 高等教育 > 研究生入学考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1