当前位置:文档之家› 简易计算器

简易计算器

湖南人文科技学院

课程设计报告课程名称:单片机原理及应用课程设计

设计题目:简易计算器

系别:通信与控制工程系

专业:自动化

班级:一班

学生姓名: 陈彬王冬林

学号: 10421120 10421104

起止日期: 2012年12月24日~ 2013年01月06日

指导教师:谭周文

教研室主任:岳周

指导教师评语:

指导教师签名:年月日

成绩

项目权重成绩

1、设计过程中出勤、学习态度等方面0.2

2、课程设计质量与答辩0.5

3、设计报告书写及图纸规范程度0.3

总成绩

教研室审核意见:

教研室主任签字:年月日

教学系审核意见:

主任签字:年月日

摘要

该简易计算器以STC89C52单片机为核心,显示模块数码管,利用C语言编写相应程序进行四位自然数的有效四则运算。该计算器计算精度不高,只能实现简单的加减乘除,且有效数字位数有限。该装置由STC89C52模块,4x4键盘(包括1~9,+,-,*,/等十六个字符),数码管组成。STC89C52为主模块,其控制键盘及显示模块。键盘可以实现数字及运算符号的输入,数码管可以进行人机交互,显示按下键盘所对应的字符以及显示运算结果。此计算器采用浮点运算采用3字节二进制补码表示,有效数字6位。对于输入输出,采用3字节BCD码浮点数格式,有效数字只有4位,因此最终有效数字只有4位。可进行连续输入,例如:1.23+4.56*8.23/234.8 ,但是运算结果为从左到右,这也是8位简易计算器的方式。其可进行错误判断,溢出、除零等错误将显示一个字符 E 。

关键词:STC89C52、C语言、数码管显示

目录

1. 设计要求 (1)

2. 方案论证与对比 (1)

2.1 方案一 (1)

2.2 方案二 (2)

2.3 方案对比与选择 (3)

3. 单元电路设计与计算 (3)

3.2 液晶显示模块 (5)

3.3 键盘检测模块 (8)

3.3.1 键盘设置 (8)

3.3.2 键盘原理 (8)

4. 系统工作流程 (9)

5. 详细仪器清单 (9)

6. 总结与思考 (10)

7. 致谢 (10)

参考文献 (11)

附录一:简易计算器原理图 (12)

附录二:简易计算器PCB图 (13)

附录三:总程序流程图 (14)

附录四:总程序 (15)

简易计算器

1 设计要求

设计一个简易计算器,要求能够进行简单的加减乘除运算,具体要求如下:

1. 4X4键盘输入,LED显示。

2. 浮点运算采用3字节二进制补码表示,有效数字6位。对于输入输出,采用3 字节BCD码浮点数格式,有效数字只有4位,因此最终有效数字只有4位。

3. 可进行连续输入,例如:1.23+

4.56*8.23/234.8 ,但是运算结果为从左到右,这也是8位简易计算器的方式。

4. 可进行错误判断,溢出、除零等错误将显示一个字符E 。

5. 由于键盘只有16个按键,安排如下:

+---------------+

| 7 | 8 | 9 | + |

| 4 | 5 | 6 | - |

| 1 | 2 | 3 | * |

| 0 | . | = | / |

+---------------+

图1 设计要求

2 方案论证与对比

2.1 方案一

主控芯片采用STC89C52单片机,8255A为辅助扩展芯片(控制键盘信号采集以及数码管显示),采用普通数码管显示。由于此方案采用了扩展芯片,程序设计较为复杂。而且采用普通数码管显示,并不能显示“+”、“-”、“*”、“/”等运算符号。系统原理框图如图2所示:

图2 方案一系统方框图

2.2 方案二

只采用STC89C52单片机,由此芯片直接控制显示屏以及键盘。从而可以省去8255芯片,以节省资金。显示屏采用的是1602的液晶显示屏。采用液晶显示屏的优势是能够计算更多位的数值且能够显示出各种运算符号。此方案可以减少设备费用,降低程序的复杂性,也能更好的显示出计算过程,人机互动性增强。

系统原理框图如图3所示。

图3 方案二系统方框图

2.3 方案对比与选择

以上两个方案都是可行的,都能实现简单的加减乘除功能。两者的最大区别就在于方案二直接采用STC89C52芯片控制以及采用1602液晶屏显示,程序要简单易用易控制,而且能够很好的显示各种运算符号。基于实用性,经济性,我们决定采用第二方案作为设计的整体方案。

3 单元电路设计与计算

3.1 主控芯片STC89C52

STC89C52是一个低功耗,高性能CMOS 8位单片机,片内含4k BytesISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用STC公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构。STC89C52

具有如下特点:40个引脚(引脚图如图3所示),4k Bytes Flash片内程序存储器,128 bytes 的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。此外,STC89C52RC设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。

图4 STC89C52芯片引脚图

VCC(40):+5V;GND(20):接地;P0口(39-32):P0口为8位漏极开路双向I/O 口,每引脚可吸收8个TTL门电流;P1口(1-8):P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流;P2口(21-28):P2口为内部上拉电阻器的8位双向I/O口,P2口缓冲器可接收和输出4个TTL门电流;P3口(10-17):P3口是8个带内部上拉电阻器的双向I/O口,可接收和输出4个TTL门电流,P3口也可作为AT89C51的特殊功能口;RST(9):复位输入。当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;ALE/PROG(30):当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲;PSEN(29):外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN 信号将不出现;EA/VPP(31):当EA保持低电平时,外部程序存储器地址为(0000H -FFFFH)不管是否有内部程序存储器。FLASH编程期间,此引脚也用于施加12V编程电源(VPP);XTAL1(19):反向振荡器放大器的输入及内部时钟工作电路的输入;XTAL2(18):来自反向振荡器的输出;

3.2 液晶显示模块

液晶显示模块选用长沙太阳人公司的1602液晶模块,2行*16列字符显示,并行8数据通信,可以满足本系统中显示的要求。我在平时的练习中利用开发板已经调过液晶显示的模块,利用C语言模块的可移植性,直接将模块移植过来,根据实际情况更改数组内容,即可实现对本设计中需要显示的参数进行显示。1602液晶与单片机的连接电路如下所示:

图5 1602液晶接口电路

1602 采用标准的16脚接口,其中:

第1脚:VSS为地电源

第2脚:VDD 接5V正电源

第 3 脚:V0 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器

调整对比度

第 4 脚:RS 为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第 5 脚:RW 为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS 和RW 共同为低电平时可以写入指令或者显示地址,当RS 为低电平RW 为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。

第7~14脚:D0~D7 为8位双向数据线。

第15~16脚:空脚

1602 液晶模块内部的字符发生存储器(CGROM)已经存储了160 个不同的点阵字符图形,如表1 所示,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H 中的点阵字符图形显示出来,我们就能看到字母“A”

表1 CGROM和CGRAM中字符代码与字符图形对应关系

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

表2 指令表

它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明: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:读数据

1602液晶显示模块可以和单片机STC89C52 直接接口,电路原理图如附图2 所示。

3.3 键盘检测模块

3.3.1 键盘设置

键盘输入采用4*4的矩阵键盘。4*4键盘分别与P3.0~P3.7相连。P3.0~P3.3作为输入口(回送线),P3.4~P3.7作为输出口(扫描线)。16个按键分别用于控制数字“0~9”以及数学运算符号“+、-、*、/”。键盘模块电路如下图所示:

图6 键盘模块电路

3.3.2 键盘原理

当进行扫描时,扫描信号由列引脚输入键盘。以1000、0100、0010 和0001 的顺序每次扫描不同的列,然后读取列引脚的信号就可以判断是哪个键被按下。

识别键盘上哪个键被压下的过程的扫描步骤:

1.检测是否所有键都都松开了,若没有则反复检测。

2.但所有键都松开了,再检测是否有键压下,若无键一下则反复检测。

3.如有键压下,要消除键抖动,确认有键压下。

4.对压下的键进行编码,将该键的行列信号转换成16 进制码,由此确定哪个键被压下了。如出现多键重按的情况,只有在其它键均释放后,仅剩一个键闭合时,才把此键当作本次压下的键。

5.该键释放后,再回到2。

4 系统工作流程

系统在开机上电后,系统处于等待状态,没有任何动作。等待输入数字以及运算符号,一旦有相应的按键按下,系统就会执行相应的动作。

5 详细仪器清单

表格1仪器清单

仪器名称数量

STC89C52 1

1602液晶显示屏 1

按键16

6 总结与思考

电子设计正在当今社会发挥越来越重要的作用,其采用的软硬件结合技术也逐渐成熟,该模拟系统正是采用软硬相结合的方法实现的。STC89C52是一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程FLASH存储器,可以为众多嵌入式控制应用系统提供灵活、超有效的解决方案。在键盘设计方面,主要是软件的设计,通过程序编码来完成硬件方面所无法工作的部分,例如关于在扫描键盘时,需要逐行拉低并进行判断、编码。判断时,需要不断的屏蔽字节,来获取所需要的数据,而这一点硬件是无法做到的。此次课程设计是做简易计算器,这个需要对51芯片有足够的理解,能够充分认识每个引脚的详细功能,对于汇编语言也必须掌握的比较好。正是由于此次设计让我们明白了单片机在实践中的运用。

7 致谢

此次课程设计,在老师的带领与指导下,让我们所学的理论与实践相结合,在实践中领悟理论,让我们的综合能力得到了进一步的提升。让我们充分的了解到单片机的奥妙以及单片机在实践生活中的广泛运用。至此,感谢各位系领导和老师。

参考文献

[1]朱定华,戴汝平.单片微机原理与应用. 北京:清华大学出版社,2003

[2]康华光主编.电子技术基础:模拟部分(第五版). 北京:高等教育出版社,2005

[3]康华光主编.电子技术基础:数字部分(第五版). 北京:高等教育出版社,2005

[4]柳淳主编. 电子制作技能与技巧. 北京:中国电力出版社,2008

[5]马全喜主编,李晓慧、何怀明副主编. 电子元器件与电子实习. 北京:机械工业出版社,2007

[6]彭介华主编. 电子技术课程设计指导. 北京:高等教育出版社,1997

[7] 陈涛编著. 单片机应用及C51程序设计. 北京:机械工业出版社,2008

[8] 张义和陈敌北编著,刘丹等改编.例说8051.北京:人民邮电出版社,2006

[9] 戴佳,戴卫恒,刘博文编著.51单片机C语言应用程序设计实例精讲(第二版).北京:电子工

业出版社,2008

[10] 张鑫主编,华臻,陈书谦副主编.单片机原理及应用.北京:电子工业出版社,2005

附录一:简易计算器原理图

附录二:简易计算器PCB 图

2

1

2

1

2

1

1

23456789101112131415161

2

2

1

123

4

12

3

412

3

412

3

41

2

3

412341234123412

341234123412341

2

341234123412341

2

341234567891011121314151617181920

4039383736353433323130292827262524232221

21

附录三:总程序流程图

程序开始

键盘检测

Y

开始升旗,同时播放国歌,上升高度送液晶显示和E 2PROM 保存

N

Y 速度调整

是否上升到顶或者自定义高度

N

Y

升旗完成,电机停转,国歌停止,上升键失效

程序停止

程序开始时旗帜位于最下端调速键是否按下(S3)

N

设置自定义高度生效

Y

N

上升键是否按下(S1)

自定义高度设置键是否按下(S4)

无自定义高度

键盘检测

Y

开始降旗,高度送液晶显示和

E 2PROM 保存

N

Y 速度调整

是否下降到底或者自定义高度

N

Y

降旗完成,电机停转,下降键失效

调速键是否按下(S3)

N

设置自定义高度生效

Y

N

下降键是否按下(S1)

自定义高度设置键是否按下(S4)

无自定义高度

附录四:总程序

PAPORT EQU 0D1FFH ; 端控制口A口

PBPORT EQU 0D2FFH ; 位控制口和键盘列线输出口B口

PCPORT EQU 0D5FFH ; 键盘行码读入口C口

BIAOZHI1 EQU 63H

BIAOZHI2 EQU 62H

BIAOZHI3 EQU 61H

DATA111 EQU 66H

DATA222 EQU 67H

DATA13 EQU 65H

DATA12 EQU 68H

DATA22 EQU 69H

DATA23 EQU 64H

DATA11 EQU 70H

DATA21 EQU 71H

DIZHI1 EQU 72H

DIZHI2 EQU 73H

LEDBUF EQU 58H ;置显示缓冲单元首地址

ORG 0000H

LJMP START

LEDMAP:

DB 0A0H,0BBH,62H,2AH ;0,1,2,3

DB 39H,2CH,24H,0BAH ;4,5,6,7

DB 20H,28H,30H,25H ;8,9,A,B

DB 0E4H,23H,64H,74H ;C,D,E,F

DB 0FFH ;全暗

DISPLAYLED:

// MOV 60H,#39H

// MOV 61H,#2CH

MOV R0,#LEDBUF

MOV R1,#3 ;共两个八段管

MOV R2,#0F7H ; EFH=1111 0111B从边开始显示

LOOP:

MOV DPTR,#PAPORT

MOV A,R2

MOVX @DPTR,A ;显示一位八段管

MOV A,@R0

MOV DPTR,#PBPORT ;段控口地址

MOVX @DPTR,A ;输出到段控口

CALL DELAY1MS

MOV A,R2 ;显示下一位

RL A

MOV R2,A

INC R0

DJNZ R1,LOOP

RET

KEY1: MOV DPTR,#0D5FFH ;是否有键按下

MOV A,#0F0H

MOVX @DPTR,A

ACALL DELAY1MS

相关主题
相关文档 最新文档