简易计算器的设计.docx

上传人:b****4 文档编号:5625176 上传时间:2023-05-08 格式:DOCX 页数:32 大小:264.71KB
下载 相关 举报
简易计算器的设计.docx_第1页
第1页 / 共32页
简易计算器的设计.docx_第2页
第2页 / 共32页
简易计算器的设计.docx_第3页
第3页 / 共32页
简易计算器的设计.docx_第4页
第4页 / 共32页
简易计算器的设计.docx_第5页
第5页 / 共32页
简易计算器的设计.docx_第6页
第6页 / 共32页
简易计算器的设计.docx_第7页
第7页 / 共32页
简易计算器的设计.docx_第8页
第8页 / 共32页
简易计算器的设计.docx_第9页
第9页 / 共32页
简易计算器的设计.docx_第10页
第10页 / 共32页
简易计算器的设计.docx_第11页
第11页 / 共32页
简易计算器的设计.docx_第12页
第12页 / 共32页
简易计算器的设计.docx_第13页
第13页 / 共32页
简易计算器的设计.docx_第14页
第14页 / 共32页
简易计算器的设计.docx_第15页
第15页 / 共32页
简易计算器的设计.docx_第16页
第16页 / 共32页
简易计算器的设计.docx_第17页
第17页 / 共32页
简易计算器的设计.docx_第18页
第18页 / 共32页
简易计算器的设计.docx_第19页
第19页 / 共32页
简易计算器的设计.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

简易计算器的设计.docx

《简易计算器的设计.docx》由会员分享,可在线阅读,更多相关《简易计算器的设计.docx(32页珍藏版)》请在冰点文库上搜索。

简易计算器的设计.docx

简易计算器的设计

吉林铁道职业技术学院毕业设计(论文)

 

论文题目计算器的设计

系别电气工程系

专业班级企业供电3101班

学号100040109

姓名邱富君

指导教师侯晓音

2012年5月30日

目录

第一章绪论1

一、系统设计背景1

二、系统设计目的和意义1

三、国内外研究现状1

第二章方案的选择与论证1

一、单片机的选择方案与论证1

二、显示器的选择方案和论证1

三、按键部分的选择方案和论证2

第三章元件介绍2

一、AT89S52单片机特点及引脚图2

二、LCD1602液晶显示器3

(一)LCD1602基本组成3

(二)LCD1602基本参数及引脚功能4

(三)LCD1602的指令说明及时序4

第四章系统概述5

一、系统设计结构图5

二、简易计算器工作流程5

第五章系统硬件设计6

一、时钟电路6

二、复位电路7

三、键盘电路7

四、显示电路8

第六章系统软件设计8

总结10

参考文献11

致谢12

附录13

PCB图13

元器件清单13

源程序14

心得体会24

计算器的设计

【摘要】随着经济的发展,不断推动着科技的发展,而科技的发展又带动了电子行业,各种各样的电子产品纷纷涌出。

计算器作为日常生活中常使用的电子产品之一,它的功能化、小型化、轻便化已成为未来智能化计算器的发展方向。

本设计是基于AT89S52单片机进行的简易计算器系统设计,P1口作为输入端,外接4*4矩阵式键盘,通过在4*4矩阵式键盘输入,进行加、减、乘、除简单运算,实现-2147483647到+2147483647的结果运算,并且在P0口上的LCD1602液晶显示器显示相应的计算结果。

【关键词】AT89S52、4*4矩阵式键盘、LCD1602、计算器

第一章绪论

一、系统设计背景

计算器是一种在日常生活中应用广泛的电子产品,无论是在超市商店,还是在办公室,或是家庭都有着它的身影。

如何使计算器变得越来越智能化已经成为电子领域研究的重要课题之一。

二、系统设计目的和意义

通过这次毕业设计,进一步掌握单片机理论知识,知道AT89S52单片机的原理、编程和各种功能的应用,了解简易计算器的工作原理,初步掌握计算器的硬软件设计、编写、调试和仿真,充分提高动手能力和排除故障的能力。

同时通过毕业设计加深了我们对单片机的认识和兴趣,发挥了我们的创新能力。

三、国内外研究现状

计算器作为一种电子产品,早已广泛应用于各种商店、超市、商店。

计算器随着供应量的增多、用户使用方便度日益更新,从又大又重到又小又轻,从复杂的模拟电路到一块几厘米的单片机,从简单的加减乘除运算到乘方、开方运算,指数、对数、三角函数、反三角函数的计算不断的变化着。

现今,市面上已经出现了使用太阳能电池的计算器,使用ASIC设计的计算器。

轻便化、小型化、智能化已经成为计算器未来的发展方向。

第二章方案的选择与论证

一、单片机的选择方案与论证

方案一:

采用AT89S52单片机。

AT89S52单片机是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器,而且价格优惠。

AT89S52使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52单片机为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

方案二:

采用STC12C5A60S2系列单片机。

STC12C5A60S2系列单片机是高速、低功耗、超强抗干扰的新一代8051单片机,指令代码完全兼容8051,但速度快8—12倍。

内部集成MAX810专用复用电路,2路PWM,8路10位高速A/D转换(80K/S),针对电机控制,强干扰场合。

STC12C5A60S2系列单片机适合程序大,储存器容量大使用,但价格较昂贵。

由于AT89S52价格实惠,又可实现系统需要,因此采用方案一。

二、显示器的选择方案和论证

方案一:

使用8位LED数码管来做显示。

LED显示器是由发光二极管显示字段组成的显示器件,在单片机应用系统中通常使用的是七段LED,这种显示器有共阴极和共阳极两种,它具有成本低廉、配置灵活和单片机接口方便等特点。

方案二:

使用LCD1602液晶显示器来显示。

液晶是介于固态和液态间的有机化合物,将其加热会变成透明液态,冷却后变成结晶的混作固态。

在点击的作用下,产生冷热变化,从而影响它的透光性,来达到显示的目的。

LCD1602液晶显示器还具有以下几个优点:

低压、微功耗、显示信息量大、长寿命、无辐射、无污染。

考虑到是否能清晰地实现本系统的要求,我们决定采用方案二实现本系统的显示功能。

三、按键部分的选择方案和论证

方案一:

使用独立式键盘。

对于独立式键盘来说,当某个按键按下时,对应的单片机I/O口线为低电平,反之为高电平,但会占用大量的I/O口。

方案二:

使用矩阵式键盘。

矩阵式键盘不会占用很多的I/O口,是一种比较节省资源的方法。

为了能减少所占用的I/O口,我们采用方案二。

第三章元件介绍

一、AT89S52单片机特点及引脚图

AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

AT89S52使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。

片上Flash允许程序存储器在系统可编程,亦适于常规编程器。

在单芯片上,AT89S52拥有灵巧的8位CPU和在系统可编程Flash,使AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

AT89S52具有以下标准功能:

与MCS51兼容;

8K支持在线编程(ISP)的FLASH结构程序存储器,1000次擦写寿命;

工作电压为4.0V~5.5V;

全静态工作:

0~24MHz;

3级程序安全加密保护;

256*8位内部RAM;

32个可编程I/O端口;

3个16位定时器/计数器;

8个中断源;

一个全双工异步串口;

支持低功耗及掉电模式;

支持中断从掉电模式唤醒;

内置看门狗;双数据指针;

工业级产品,温度范围(-40°C到85°C),PU为无铅环保产品。

另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

其PDIP图如下图3-1所示:

 

图3-1

二、LCD1602液晶显示器

(一)LCD1602基本组成

LCD1602液晶显示器用5*7点阵图形来显示西文字符,有阿拉伯数字、英文字母的大小写、常用符号等。

单片机通过写控制方式访问驱动控制器来实现对显示屏的控制。

LCD主要由3个部分组成:

LCD控制器、LCD驱动器、LCD显示装置。

如图3-2所示。

 

图3-2

(二)LCD1602基本参数及引脚功能

LCD1602分为带背光和不带背光两种,基控制器大部分为HD44780。

1、主要技术参数

显示容量:

16×2个字符

芯片工作电压:

4.5—5.5V

工作电流:

2.0mA(5.0V)

模块最佳工作电压:

5.0V

字符尺寸:

2.95×4.35(W×H)mm

2、引脚功能说明

LCD1602采用标准的16脚(带背光)接口,各引脚接口说明如表3-1所示。

表3-1LCD1602引脚功能说明

引脚编号

名称

功能

操作

1

VSS

电源接地

0V

2

VDD

电源正极

+5V

3

VEE

LCD亮度调整电压输入

电压越低,屏幕越亮

4

RS

寄存器选择信号

1=选择数据寄存器

0=选择指令寄存器

5

R/W

读/写信号

1=读取0=写入

6

E

LCD响应信号

1=响应LCD0=禁用LCD

7~10

DB0~DB3

低4位总线

可用4位输入数据、命令及地址

11~14

DB4~DB7

高4位总线

配合DB0~DB3的8位输入数据、命令及地址

15

LED+

背光源正极

+5V

16

LED-

背光源负极

0V

(三)LCD1602的指令说明及时序

1602液晶模块内部的控制器共有11条控制指令,如表3-2所示。

表3-2控制命令表

序号

指令

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

读出的数据内容

第四章系统概述

一、系统设计结构图

简易计算器主要由AT89S52主控制器、键盘电路、显示电路等部分组成。

其中键盘电路用于数字法号的输入,进行加减乘除运算。

简易计算器的系统设计结构图如4-1所示。

 

图4-1

二、简易计算器工作流程

1、上电后,屏幕初始化,显示WelcomecommentsofTeachers。

2、5S后清屏,开始进入计算。

3、计算。

按下0~9中的数字键,屏幕显示要运算的第一个数值,再按下“+-*/”中一个符号键,然后再按下数字键,屏幕显示要运算的第二个数值,最后按下“=”键,屏幕显示计算结果。

4、再次计算时,先按下清除键“ON/C”,清除屏幕上的计算结果,再重新计算。

第五章系统硬件设计

简易计算器电路由单片机最小系统、时钟电路、4*4矩阵式键盘、LCD1602液晶显示器等组成。

其原理图如图5-1所示。

 

图5-1

一、时钟电路

在MCS-51单片机片内有一个高增益的反相放大器,反相放大器的输入端为XTAL1,输出端为XTAL2,由该放大器构成的振荡电路和时钟电路一起构成了单片机的时钟方式。

根据硬件电路的不同,单片机的时钟连接方式可分为内部时钟方式和外部时钟方式。

我们采用内部时钟方式,如图5-2所示。

 

图5-2

在内部方式时钟电路中,必须在XTAL1和XTAL2引脚两端跨接石英晶体振荡器和两个微调电容构成振荡电路,C1和C2取30pF左右,晶振的频率取值范围1.2MHz~12MHz。

根据实际情况,本设计采用12MHz作为系统的外部晶振,电容值取22pF。

二、复位电路

单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。

无论是单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。

所以,必须弄清楚MCS-51单片机复位的条件、复位电路和复位后的状态。

单片机复位的条件是:

必须使RST/Vpd或RST引脚(9脚)加上持续两个机器周期(即24个振荡周期)的高电平。

例如,若时钟频率为12MHz,每机器周期为1us,则只需2us以上时间的高电平。

在RST引脚出现高电平后的第二个周期执行复位。

单片机常见的复位电路有上电复位电路和按键复位电路。

为了方便系统的硬件初始化,我们采用按键复位电路。

如图5-3所示。

 

图5-3

按键复位电路除具有上电复位功能外,若要复位,只需要按下S9键,在RST端产生一个复位高电平。

三、键盘电路

在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式,如图5-4所示。

 

图5-4

在矩阵式键盘电路中,行连接线和列连接线分别占用4条I/O口线,共连接16个按键。

行线连接的接口为输入口,用于输入按键的行位置信息,列线连接的接口为输出口,用于输出扫描电平。

四、显示电路

显示电路由液晶显示器LCD1602取代普通的数码管完成。

P0口作为液晶显示的数据端口,P3.4、P3.5、P3.6作为其控制端口,控制LCD液晶显示屏显示输出数据。

其电路如图5-5所示。

 

图5-5

第六章系统软件设计

设计程序时,首先初始化参数,送LED低位显示“WelcomecommentsofTeachers”,高位不显示。

延时5S后清屏,按下数字键输入数值,在LCD1602显示,然后按下“+-/*”符号键,再输入数值并在LED显示器上显示,最后按下“=”键得出运算结果。

若再次计算,需按下清除键“ON/C”清屏后再按数字键输入数值开始计算。

程序流程图如6-1所示。

 

图6-1程序流程图

 

总结

通过这次的毕业设计,我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机C语言掌握得不够好。

在这次的毕业设计过程中,我们遇到了很多的问题。

其中属程序的编写和单片机的选用是最大的问题。

虽然只要求简单的四则运算,但是首先我们就得弄清楚键编码,其次是运算,最后还要将键盘扫描程序、显示程序、运算程序等结合起来。

由于考虑到程序偏大,我们一开始采用STC单片机,利用MAX232芯片驱动。

然而,在实现功能的过程中不够稳定,会出现乱码或者计算出错,甚者将STC单片机烧坏了,不得已将程序简单化点,使程序小些,用AT89S52实现。

通过检测,我们不仅实现了加减乘除的运算,还在开机时显示欢迎老师点评的英文,且有运算结果的限制。

若继续研究,可在原有的硬件上,改写程序,添加倒计时、秒表等计时功能。

参考文献

[1]汪红.电子技术.电子工业出版社.2008年

[2]张永格.何乃味.单片机C语言应用技术与实践.北京交通大学出版社.2009年

[3]胡辉.单片机原理与应用.北京中国水利水电出版社.2007

[4]王东锋.董冠强.单片机C语言应用100例.电子工业出版社.2009

[5]郭惠.吴迅.单片机C语言程序设计完全自学手册.电子工业出版社.2008

[6]国兵.模拟电子技术.天津大学出版社.2008

致谢

本论文在选题及设计过程中得到许真珠老师、黄莺老师的悉心指导。

许老师多次询问进程,并为我们指点迷津,帮助我们开拓研究思路,精心点拨、热忱鼓励。

黄老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,不仅授我以文,而且教我们做人,虽历时三载,却给以终生受益无穷之道。

感谢黄老师、许老师、贾老师等对我们的教育培养,在此,我们向诸位老师深深地鞠上一躬。

感谢我的同学们三年来对我们学习、生活的关心和帮助。

最后,向我们的父亲、母亲致谢,感谢他们对我们的理解与支持。

附录

PCB图

 

元器件清单

元件名称

型号规格

数量

电容

22pF

2个

电解电容

20uF

1个

晶振

12MHZ

1个

电阻

1K

2个

电位器

1K

1个

排阻

5K

4个

发光二极管

1个

二极管

1N4005

1个

轻触按键

17个

液晶显示器

LCD1602

1个

单片机

AT89S52

1个

覆铜板

114mm*100mm

1块

源程序

#include"reg52.h"

#defineucharunsignedchar

#defineuintunsignedint

ucharcodetable2[]="Welcomecomments";//“欢迎老师点评!

”英文字样

ucharcodetable3[]="ofTeachers!

";//“欢迎老师点评!

”英文字样

ucharcodetable4[]="0";//初始化

sbitbusy=P0^7;

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);

}

chari,j,temp,num;

longa,b,c;//a,第一个数b,第二个数c,得数

ucharflag,fuhao;//flag表示是否有符号键按下,fuhao表征按下的是哪个符号

ucharcodetable[]={7,8,9,0,4,5,6,0,1,2,3,0,0,0,0,0};

ucharcodetable1[]={7,8,9,0x2f-0x30,4,5,6,0x2a-0x30,1,2,3,0x2d-0x30,0x01-0x30,0,0x3d-0x30,0x2b-0x30};//按键显示编码表

sbitlcden=P3^6;

sbitlcdwrite=P3^5;

sbitlcdrs=P3^4;

//lcd的写指令

voidwrite_com(ucharcom)

{

lcdrs=0;

lcden=0;

P0=com;

delay

(1);

lcden=1;

delay

(1);

lcden=0;

}

//lcd的写数据

voidwrite_date(ucharda)

{

lcdrs=1;

lcden=0;

P0=da;

delay

(1);

lcden=1;

delay

(1);

lcden=0;

}

//初始化

voidinit()//初始化

{

ucharnum;

num=-1;

lcdwrite=0;

lcden=0;

write_com(0x38);

write_com(0x0c);

write_com(0x06);

write_com(0x01);

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

{

write_date(table2[num]);

delay(5);

}

write_com(0x80+0x40);

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

{

write_date(table3[num]);

delay(5);

}

delay(5000);//延时5s

write_com(0x01);

i=0;

j=0;

a=0;//第一个参与运算的数

b=0;//第二个参与运算的数

c=0;

flag=0;//flag表示是否有符号键按下,

fuhao=0;//fuhao表征按下的是哪个符号

}

voidkeyscan()//键盘扫描程序

{

P1=0xfe;

if(P1!

=0xfe)

{

delay(10);//延迟20ms

if(P1!

=0xfe)

{

temp=P1&0xf0;

switch(temp)

{

case0xe0:

num=0;break;

case0xd0:

num=1;break;

case0xb0:

num=2;break;

case0x70:

num=3;break;

}

}

while(P1!

=0xfe);

if(num==0||num==1||num==2)//如果按下的是'7','8'或'9

{

if(j==1)//确认一次计算完毕,清屏

{write_com(0x01);

j=0;

}

if(flag==0)//没有按过符号键

{

a=a*10+table[num];

}

else//如果按过符号键

{

b=b*10+table[num];

}

}

else//如果按下的是'/'

{

flag=1;

fuhao=4;//4表示除号已按

}

i=table1[num];

write_date(0x30+i);

}

P1=0xfd;

if(P1!

=0xfd)

{

delay(5);

if(P1!

=0xfd)

{

temp=P1&0xf0;

switch(temp)

{

case0xe0:

num=4;break;

case0xd0:

num=5;break;

case0xb0:

num=6;break;

case0x70:

num=7;break;

}

}

while(P1!

=0xfd);

if(num==4||num==5||num==6)//如果按下的是'4','5'或'6'

{

if(j==1)

{

write_com(0x01);

j=0;

}

if(flag==0)//没有按过符号键

{

a=a*10+table[num];

}

else//如果按过符号键

{

b=b*10+table[num];

}

}

else//如果按下的是'X'

{

flag=1;

fuhao=3;//3表示乘号已按

}

i=table1[num];

write_date(0x30+i);

}

P1=0xfb;

if(P1!

=0xfb)

{

delay(10);

if(P1!

=0xfb)

{

temp=P1&0xf0;

switch(temp)

{

case0xe0:

num=8;break;

case0xd0:

num=9;break;

case0xb0:

num=10;break;

case0x70:

num=11;break;

}

}

while(P1!

=0xfb);

if(num==8||num==9||num==10)//如果按下的是'1','2'或'3'

{

if(j==1)

{

write_com(0x01);

j=0;

}

if(flag==0)//没有按过符号键

{

a=a*10+table[num];

}

else//如果按过符号键

{

b=b*10+table[num];

}

}

elseif(num==11)//如果按下的是'-'

{

flag=1;

fuhao=2;//2表示减号已按

}

i=table1[num];

write_date(0x30+i);

}

P1=0xf7;

if(P1!

=0xf7)

{

delay(5);

if(P1!

=0xf7)

{

temp=P1&0xf0;

switch(temp)

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

当前位置:首页 > 农林牧渔 > 林学

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

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