1、浙江工商职业技术学院电子与信息工程学院毕业设计电信学院毕业设计(说明书)毕业设计(说明书)题目专 业:应用电子技术班 级:学 号:学生姓名:校外指导教师:俞海云校内指导教师:李翠凤二零一五年四月简易计算器的设计与制作摘要:近十几年,单片机技术发展的很快,其中电子产品的更新速度迅猛。计算器是我们日常生活中比较常见的电子产品之一。在很多领域的数据处理中要用到数学运算,作为计算机自动处理系统更显得重要。此项目设计以单片机为核心部件的计算器,采用4*4矩阵式键盘,16个键依次对应09、“+”、“-”、“*”、“/”、“=”和清除键。使用单片机最小应用系统1模块,简单方便。采用LCD1602A作显示。本
2、次设计是以STC89C52单片机为核心器件,外围辅助器件为LCD显示器、控制按键来设计的计算器。利用此设计熟悉单片机微控制器及C语言编程,对其片资源及各个I/O端口的功能和基本用途的了解。掌握Microsoft Visual C+ 6.0应用程序开发环境,常用的LCD显示器的使用方法和一般键盘的使用方法。本计算器系统简单,实用性强,成本低,使用维护方便,软件功能强,运行稳定可靠等优点。关键词:STC89C52;LCD1602;计算器;矩阵键盘23目 录1. 绪论21.1 系统开发的背景和意义21.2 设计目的21.3 设计任务22. 方案论证与比较32.1 主机方案设计与选择32.1.1 方案
3、一:采用FPGA控制32.1.2 方案二:采用STC9C52单片机32.2 从机方案设计与选择42.2.1 方案一:采用8255A芯片控制采集和数码管显示42.2.2 方案二:采用液晶LCD1602做为显示43. 系统设计及说明53.1 系统总框图53.2 元件介绍54. 系统硬件设计114.1 外接键盘电路设计114.2 显示电路设计115. 系统程序设计125.1 键盘扫描程序设计125.2 显示模块的程序设计135.3 运算程序设计146. 调试156.1 硬件调试156.2 软件的调试16结论17致谢18参考文献19附录A 元件清单20附录B 原理图21附录C PCB图22附录D 实物
4、图231. 绪论1.1 系统开发的背景和意义随着社会的发展,科学地额进步,人们的生活水平在逐步提高,尤其是微电子技术的发展,犹如雨后春笋般的变化。电子产品的更新速度快就不惊奇了。计算机在人们的日常中是比较常见的电子产品之一。充分利用已有的软件和硬件条件设计出更出色的电子产品之一。如何使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器,使其更好的为各个行业服务,成了如今电子领域重要的研究课题。今天,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店、办公、室学校、。因此设计一款简单实用的计算器会有很大的实际意义。1.2 设计目的通过本次课题设计,应用
5、单片机应用基础、计算机应用基础等所学相关知识及查阅资料,完成简易计算器的设计,以达到理论与实践更好的结合、进一步提高综合运用所学知识和设计的能力的目的。通过本次设计的训练,可以使我在基本思路和基本方法上对基于MCS-51单片机的嵌入式系统设计有一个比较感性的认识,并具备一定程度的设计能力。1.3 设计任务在本次课程设计中,主要完成如下方面的设计任务:(1)简要阐述单片机技术发展的国内外现状及LED动态显示和矩阵键盘基本原理;(2)掌握MCS-51系列某种产品(例如8051)的最小电路及外围扩展电路的设计方法;(3)了解单片机数据转换功能及工作过程;(4)完成主要功能模块的硬件电路设计及必要的参
6、数确定;(5)用protel软件完成原理电路图的绘制。2. 方案论证与比较2.1 主机方案设计与选择2.1.1 方案一:采用FPGA控制FPGA是一种高密度的可编程逻辑器件,自从XiLin公司1985年崔出第一片FPGAD以来,FPGA的集成密度和性能提高好呢快,其集成密度高达500万门/片以上,系统性能可达200MHz。使用方便简易,开发和上市的周期短,在数字设计和电子生产中得到迅速和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。但是基于SRMA编程的FPGA,其编程信息需存放在外部存储器上,需外部存储芯片,且使用方法复杂,保密性差,而其对于一个简单的计算器而言,使用FPGA有点大材小
7、用,成本太高。2.1.2 方案二:采用STC9C52单片机单片机是单片微型机的简称,即MicroControlUnit(MCU)。通常由单块集成电路组成,内部包含有计算机的基本功能部件:中央处理器CPU、存储器和I/O几口电路等。因此,单片机只要和是单的软件及外部设备相结合,即可成为一个单片机控制系统。单片机广泛用于智能产品,智能仪表、测控技术、智能接口等,具有操作简单,实用方便,价格便宜等优点,而其中有STC89C52以MCS-51位内核,是经典的单片机代表。同时它的功耗低,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适合于常规编程器,拥有8位CPU,
8、使其与众多嵌入式控制应用系统能够灵活结合。此外,STC89C52克降至0Hz静态逻辑操作,支持2种软件的可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,知道下一个中断或硬件复位为止。8位微控制器8K字节在系统可编程Flash。同时该芯片还具有PDI、TQFP和PLCC等三种封装形式,以适应不同产品的需求。方案二符合了轻便、成本低、使用简单等优点,因此我们选择方案二。2.2 从机方案设计与选择2.2.1 方案一:采用8255A芯片控制采集和数码管显示采用8255A为辅助扩展芯片(控制键
9、盘信号采集以及数码管显示),采用普通数码管显示。由于此方案采用了扩展芯片,程序设计较为复杂。而且采用普通数码管显示,并不能显示“+”、“-”“*”“/”等运算符号。同时数码管显示编程实际编写比较复杂,参数多容易混乱。2.2.2 方案二:采用液晶LCD1602做为显示LCD1602已经使用的很普遍了,LCD1602采用标准的14脚(无背光)或者16脚(带背光)接口,1602液晶模块的读写操作、屏幕和光标操作都是通过指令编程来实现的。市面上的字符液晶大多数是基于HD44780液晶芯片的,控制原理完全相同的,因此HD44780写的液晶芯片的,控制原理是完全相同的,因此HD44780写的控制程序可以用
10、于大部分的液晶,也包括1602。在对液晶模块初始化的过程中我们需要先设置其显示模式,在液晶模块显示字符光标是自动右移的,无需人工干预。每次输入指令前都要判断液晶模块是否处于忙的状态。1602液晶模块内部的字符发生储存器(CGROM)已经储存了160个不同的点阵字符图形。同时1602的价格便宜,供货商多,基本的电子商店都能买到。省事省力,体积也小。适合于这个方案。因此我们选择整体的方案二。3. 系统设计及说明3.1 系统总框图图3.1方案二系统框图3.2 元件介绍STC89C52:STC89C52是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash存储器。
11、STC89C52使用经典的MCS-51内核,但做了很多的改进使得芯片具有传统51单片机不具备的功能。具有以下标准功能: 8k字节Flash,512字节RAM, 32 位I/O 口线,看门狗定时器,内置4KB EEPROM,MAX810复位电路,3个16 位定时器/计数器,4个外部中断,一个7向量4级中断结构(兼容传统51的5向量2级中断结构),全双工串行口。另外 STC89C52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断
12、或硬件复位为止。最高运作频率35MHz,6T/12T可选。参数特点:1. 增强型8051单片机,6 时钟/机器周期和12 时钟/机器周期可以任意 选择,指令代码完全兼容传统8051.2 2. 工作电压:5.5V3.3V(5V单片机)/3.8V2.0V(3V 单片机)3.工作频率范围:040MHz,相当于普通8051 的080MHz,实际工作 频率可达48MHz4. 用户应用程序空间为8K字节5. 片上集成512 字节RAM6. 通用I/O 口(32 个),复位后为:P0/P1/P2/P3 是准双向口/弱上拉, P0 口是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为 I/O 口用时,需加
13、上拉电阻。7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器,无 需专用仿真器,可通过串口(RxD/P3.0,TxD/P3.1)直接下载用户程 序,数秒即可完成一片8. 具有EEPROM 功能9. 共3 个16 位定时器/计数器。即定时器T0、T1、T210.外部中断4 路,下降沿中断或低电平触发电路,Power Down 模式可 由外部中断低电平触发中断方式唤醒11. 通用异步串行口(UART),还可用定时器软件实现多个UART12. 工作温度范围:-40+85(工业级)/075(商业级)STC89C52RC引脚功能说明:VCC(40引脚):电源电压 VSS(20引脚):接
14、地 P0端口(P0.0P0.7,3932引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0P1.7,18引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用
15、作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流(I/L)。 此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体参见下表3-2-1: 在对Flash ROM编程和程序校验时,P1接收低8位地址。表3.1引脚号功能特性P1.0T2(定时器/计数器2外部计数输入),时钟输出P1.1T2EX(定时器/计数器2捕获/重装触发和方向控制)P2端口(P2.0P2.7,2128引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个T
16、TL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流(I/L)。 在访问外部程序存储器和16位地址的外部数据存储器 (如执行“MOVX DPTR”指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX R1”指令)时,P2口引脚上的内容(就是专用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。P3端口(P3.0P3.7,1017引脚):P3是一个带内部上拉电阻的8位双向
17、I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流(I/L)。在对Flash ROM编程或程序校验时,P3还接收一些控制信号。P3口除作为一般I/O口外,还有其他一些复用功能,如下表表3-2-2所示:表3-2-2:P3口引脚复用功能表表3.2引脚号复用功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2INT0()(外部中断0)P3.3INT1()(外部中断1)P3.4T0(定时器0的外部输入)P3.5T1(
18、定时器1的外部输入)P3.6WR()(外部数据存储器写选通)P3.7RD()(外部数据存储器读选通)RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/ PROG()(30引脚):地址锁存控制信号(ALE)是访问外部程序 存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚(PROG())也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲
19、,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址位8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。否则ALE将被微弱拉高。这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。EA()/VPP(31引脚):访问外部程序存储器控制信号。为使能从0000H 到FFFFH的外部程序存储器读取指令,EA() 必须接GND。注意加密方式1时,EA()将内部锁定位RESET。为了执行内部程序指令,应该接VCC。在Flash编程期间,也接收1
20、2伏VPP电压。XTAL1(19引脚):振荡器反相放大器和内部时钟发生电路的输入端。 XTAL2(18引脚):振荡器反相放大器的输入端。LCD1602LCD1602主要技术参数: 显示容量:162个字符 芯片工作电压:4.55.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.954.35(WH)mm引脚功能说明第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低
21、电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。(说明:1为高电平、0为低电平)如下表3-2-3:表3.3液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示
22、不忙,否则此指令失效。要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图3-2是1602的内部显示地址。图3.2例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。4. 系统硬件设计4.1 外接键盘电路设计计算机输入数字和其他功能按键时要用到很多按键,在这种情况下,编程会很简单,但是会占用大量的I/O口资源,因此在很多情况下都不采用这样的方式,而是采用矩阵键盘的
23、方式。矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的数量就为4*4个。这样行列式键盘结构能有效的提高单片机系统中I/O口的利用率。计算器的键盘布局如图3.2所示:一般有16个键组成,在单片机中正好有一个P端口实现16个按键功能,这种形式在单片机系统中最常用。图4.1 矩阵键盘内部电路4.2 显示电路设计本设计采用LCD液晶显示器来显示输出数据。LCD的特性有:1、+5V电压,对比可调度;2、内含复位电路;3、提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能;4、有80字节显示数据存储器DDRAM;5、内
24、建有160个5X7点阵的字型的字符发生器CGROM;6、8个可由用户自定义的5X7的字符发生器CGRAM。本设计通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应的数据。其接口电路如图4-2 所示。图4.2 LCD接口电路5. 系统程序设计5.1 键盘扫描程序设计键扫程序的过程为:开始时,先判断是否有键闭合,无键闭合时,返回继续判断,有键闭合时,先去抖动,然后确定是否有键按下,若无键按下,则返回继续判断是否有键闭合,若有键按下,则判断键号,然后释放,若释放按键完毕,则返回,若没有释放按键,则返回继续释放。其流程图如图5-1所示。图5.1 键盘程序设计框图5.2 显示模
25、块的程序设计显示程序的过程为:显示开始时,先进行LCD的初始化,判断是否显示汉字或ACSII码或图形,若不显示,则返回,若显示的是汉字或ACSII码,则进行相应功能的设置,然后送地址和数据,再判断是否显示完,显示完则返回,没有显示完则继续送地址,若显示的是图形,则先进行相应功能的设置,再送行地址和列地址,然后送数据,最后判断是否显示完,显示完则返回,没有显示完则继续送行地址和列地址。其流程图如图5-2所示。图5.2 液晶显示程序框图5.3 运算程序设计算术运算程序的过程为:先判断输入的运算符是+、-、*、/ 中的哪一个,若是+或-,则要判断运算结果是否溢出,溢出则显示错误信息,没溢出就显示运算
26、结果,若是/,则要先判断除数是否为零,为零就显示错误信息,不为零则显示运算结果,若是-,则直接显示运算结果。其流程图如图5-3所示。图5.3 键盘扫描程序框图6. 调试6.1 硬件调试在电路板焊接完成后,先用万用表检查各接线是否焊接良好,是否有松动和漏焊。在通电调试之前,必须认真检查电路连线是否正确,对照调试之前电路图按照一定顺序逐渐检测, 特别要注意电源是否接错, 电源与地是否有短接,二极管是否接反,轻轻拨一拨元器件,观察焊点是否牢固。调试方法:包括多级调试和联机调试。在调试过程中要针对可能出现的故障认真分析,直至检查出原因并排除。本次硬件调试过程中,对所出现的问题进行了认真的分析和改正,最
27、后能够很好的达到设计要求的效果。6.2 软件的调试软件调试一般分为以下四个阶段:1、编写程序并查错;2、在C语言的编译系统中编译源程序;3、对程序进行编译连接,并及时发现程序中存在的错误;4、改正错误。在本次调试中出现的问题有:(1)在程序中有的函数名未定义;(2)在抄录程序时,少录入一些字符,如:“;”、“”、“-”等符号,而出现错误;(3)有一些函数名录入时少写一个字母或顺序颠倒;(4)没有注意函数名的调用及定义;(5)芯片引脚定义出错而导致没有实验现象。在软件调试过程中,对出现的错误进行了认真的分析和修改,多次调试成功后,能够很好的达到既定的设计效果结论课程设计是培养学生综合运用所学知识
28、,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为电子信息工程专业的学生来说掌握单片机的开发技术是十分重要的。 我的题目是简易计算器,对于我们这些实践中的新手来说,这是一次考验。怎么才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理
29、上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对单片机汇编语言掌握得不够好。致谢我的题目是简易计算器的设计,对于我们这些实践中的新手来说,这是一次考验。怎样才能找到课堂所学与实际应用的最佳结合点?怎样让自己的业余更接近专业
30、?怎样让自己的计划更具有序性,而不会忙无一用?这都是我们所要考虑和努力的。这次课程设计我学到很多很多的东西,学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。不仅巩固了以前所学过的知识,而且学到了很多在书本上没有学到过的知识,掌握了一种系统的研究方法,可以进行一些简单的编程。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。同时在设计的过程中发现了自己的不足之处,例如对以前所学过的知识理解得不够深刻,
31、掌握得不够牢固,对C语言掌握得不够好等。这次毕业设计的完成要特别感谢我的导师李翠凤老师,在教学繁忙、事务缠身的情况下,李老师多次抽出时间,对我的论文进行悉心的指导,从论文的选题到论文的总体框架,再到论文撰写过程中的语言组织,他都进行了细致的批阅,使得我的论文越来越规整,更加符合标准。在这里真诚地对所有关心我、帮助我、鼓励我的老师、同学、朋友道声:“谢谢!”参考文献1 张培忠 单片机C程序设计实验/实训指导书.2008;2 石生 电路基础分析,高等教育出版社,2008年第3版;3 孙明, 曹伟, 王妍玮主编:单片机实践教程,哈尔滨工业大学出版社 ,2013.3;4 杨术明 单片机原理及接口技术,华中科技大学出版社,2013.2;5 马忠梅 单片机C语言应用, 北京清华大学出版社,2013年第5版;6 刘午平, 刘建清主编:液晶显示屏应用,人民邮电出版社,2009;7 杨欣.51单片机应用实例讲解.清华大学出版社.2010.5.附录A 元件清单序号名称 型号、规格数量备注1单片机AT89C52RC12液晶显示屏LCD160213按键6*6键盘174晶振12M15电容22P26电源座DC17开关18电位器10319电阻10K110电解电容10u111排阻10K112单排针113单排座1附录B 原理图附录C PCB图附录D 实物图