计算器试验报告_第1页
计算器试验报告_第2页
计算器试验报告_第3页
计算器试验报告_第4页
计算器试验报告_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于51单片机的简易计算器设计报告设计课题:基于STC89C52单片机的简易计算器 小组成员:侯旭陈铭廖文凯黄超博吕佳铭 指导老师:孙玉宽第1页共1页近年来随着科技的飞速发展,单片机的应用正在不断深入,同时带动传统控 制检测技术日益更新。在实时检测和自动控制的单片机应用系统中, 单片机往往 作为一个核心部件来使用,但仅单片机方面的知识是不够的,还应根据具体硬件 结构、软硬件结合,来加以完善。计算机在人们的日常生活中是比较常见的电子产品之一。可是它还在发展之中,以后必将出现功能更加强大的计算机,基于这样的理念,本设计是以 STC89C52单片机为核心的计算器模拟系统设计,输入采用4必矩阵键盘,可

2、以进行加、减、乘、除7位带符号数字运算,同时支持括号的嵌套使用级浮点数的 运算,并在LCD1602上显示操作过程。本次设计注重设计方法及流程,首先根据原理设计电路,利用keil编程,借 助实验开发平台进行仿真实验,进而利用altium designer制作PCB,最后到焊接 元器件,直至调试成功。在设计的同时,特别注重 keil软件和altium designer软 件的使用方法和技巧以及常用的 LCD显示器和矩阵键盘的设计和使用方法。【关键词】 计算器,STC89C52,矩阵键盘,1602液晶第2页共2页 TOC o 1-5 h z HYPERLINK l bookmark2 o Curre

3、nt Document 第一章绪论4第二章整体框架5计算器发展现状6 HYPERLINK l bookmark7 o Current Document 任务要求7 HYPERLINK l bookmark9 o Current Document 研究意义8第三章设计方案9总体设计方案10 HYPERLINK l bookmark14 o Current Document 硬件部分11 HYPERLINK l bookmark16 o Current Document 主控模块12显示模快13输入模块14 HYPERLINK l bookmark18 o Current Document 主控模

4、块的选型与论证 15 HYPERLINK l bookmark20 o Current Document 显示模块的选型与论证 15 HYPERLINK l bookmark22 o Current Document 输入模块的选型与论证 15 HYPERLINK l bookmark24 o Current Document 软件部分16 HYPERLINK l bookmark26 o Current Document 软件工具介绍16软件模块介绍17 HYPERLINK l bookmark28 o Current Document 第四章调试18硬件调试19软件调试19解决方案19实现

5、展示19 HYPERLINK l bookmark30 o Current Document 第五章总结20 HYPERLINK l bookmark32 o Current Document 参考文献21附录22第3页共3页第一章绪论随着社会的发展,科学的进步,人们的生活水平在逐步的提高, 尤其是微电子技术的发 展,犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了 ,单片机的应用已经越来 越贴近生活,用单片机来实现一些电子设计也变得容易起来。近年来,单片机以其体积小、价格廉、面向控制等独特优点,在各种工业控制、仪器仪 表、设备、产品的自动化、智能化方面获得了广泛的应用。与此同时,单片机

6、应用系统的可 靠性成为人们越来越关注的重要课题。影响可靠性的因素是多方面的,如构成系统的元器件本身的可靠性、系统本身各部分之间的相互耦合因素等。其中系统的抗干扰性能是系统可靠性的重要指标。本设计采用STC89C52芯片,实现了利用单片机进行了一个简单计算器设计。允许对输 入数据进行加减乘除运算及LED显示。如果设计对象是更为复杂的计算器系统,其实际原理与方法与本设计基本相同。另外,实例所设计的计算器是用LED显示屏显示的,这样就可以显示出更多的字符,在此基础上,还可以编写更加完善的程序来实现更多的计算功能。设计的关键所在,必须非常熟悉单片机的原理与结构,同时还要对整个设计流程有很好的把握,将单

7、片机和其他模块完整的衔接。第4页共4页第二章整体框架计算器现状计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,供累加存储用。高档计算器由微处理器和只读存储器实现各种复杂的运算程序,有较多的随机存储单元以存放输入程序和数据。键盘是计算器的输入部件,一般采用接触式或传感式。为减小计算器的尺寸,一键常常有多种功能。显示器是计算器的输出部件,有发光二极管显示器和液晶显示器等。除显示计算结果外,还常有溢出指示、错误指示等。计算器电源采用交流转换器或电池,电池

8、可用交流转换器或太阳能转换器再充电。为节省电能,计算器都采用 CMOS:艺制作的大规模集成电路(见互补金属-氧化物-半导体集成电路),并在内部装有定时不操作自动断电电路。计算器可选用的外围设备有微型打印机、盒式磁带机和磁卡机等。任务要求制作一个简易计算器,其功能为完成简单的加减乘除操作,数据包括整数和小数。基本要求:1、设计完成过程中,各部分需要进行模块和总线式处理。其中软件部分需要说明设计结构,子函数作用等。硬件引脚位置固定位置,单列直插两列对称排列,每列20个引脚(至 少2个电源2地线),两列间水平距离 2000mil ;2、输入及运算结果显示利用数码管,1602或12864其中一个显示即

9、可,结果遇到小数时小数点后保留两位有效数字;3、输入方式利用独立键盘方式或者其他方式;4、输入和显示模块可作为单独的模块,或者两个模块在一块电路板上完成;5、实现两个数的相互计算,完成设计报告;1.2.2提高要求:1、实现N个数字的加减乘除运算;2、对于溢出或者无效运算的提示;3、其他扩展设计;(附加分满分10分)1.2.3其他要求:第5页共5页1、基本符合国家标准“ GB/T 28169-2011嵌入式软件 C语言编码规范” HYPERLINK /info/30122.html /info/30122.html ;2、报告格式可以参考 HYPERLINK /p-9949563050940.h

10、tml /p-9949563050940.html 中的格式,内容需要包括现状意义, 总体设计方案、软硬件详细设计、测试方案(需要对现有测试方法进行介绍后,对本次作业进行测试方案设计)、测试结果以及参考文献;3、所有电路不能使用现有的模块;4、实验室提供单面覆铜板,51芯片及最小系统期间、按键、杜邦线, 1602液晶(数量有限11月30日提供);5、验收时间12月4日。1.3研究意义今天,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店,办公室,学校,。因此设计一款简单实用的计算器会有很大的实际意义。本设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,

11、加强对实际应用系统设计的能力。通过本设计的学习,使掌握单片机程序设计和微机接口应用的基本方法,并能综合运用本科阶段所学软、硬件知识分析实际问题,提高解决实际问题的能力, 为单片机应用和开发打下良好的基础。1、对字符液晶显示模块的工作原理,如初始化、清屏、显示、调用及外特性有较清楚的认识,并会使用 LCD (液晶显示模块)实现计算结果的显示;掌握液晶显示模块的驱动和编程,设计LCD和单片机的接口电路,以及利用单片机对液晶模块的驱动和操作;2、在充分分析内部逻辑的概念,进行软件和调试,学会使用,并能够以其为平台设计出具有四则运算能力简易计算器的硬件电路和软件程序。第6页共6页第三章设计方案总体设计

12、方案本计算器是以 MCS-51系列8051单片机为核心构成的简易计算器系统。该系统通过单片机控制,实现对4*4键盘扫描进行实时的按键检测,并把检测数据存储下来。整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与相应处理转换,之后送入LED显示器动态显示。计算器设计总体思想根据功能和指示要求,本系统选用以MCS-51单片机为主控机。通过扩展必要的外围接口电路,实现对计算器的设计。具体设计如下:1、由于要设计的是简单的计算器,可以进行四则运算,为了得到教好的显示效果,采 用LCD显示数据和结果。2、另外键盘包括数字键(0-9

13、)、符号键(+、-、*、/)、清除键和等号键,故只需要 16个按键即可,设计中采用集成的计算机键盘。3、执行程序:开机显示零,等待键入数值,当键入数字,通过LCD显示出来,当键入+、 -、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值后将显示键入的 数值,按等号就会在 LCD上输出运算结果。4、错误提示:当单片机执行程序中有错误时,会在LCD上显示相应的提示,如:当输入的数值或计算器得到的结果大于计算器的显示范围时,计算器会在LCD上提示溢出;当除数为0时,计算器会在LCD上提示错误。硬件部分主控(运算)模块本设计选择了以 STC89C52单片机作为主控(运算)模块进行计算器

14、的设计。STC89C52单片机的主要特性如下:Stc89c52是一种带8K字节闪烁可编程可擦 除只读存储器(FPEROM -Falsh Programmable and Erasable Read Only Memory )的低电压,高性能 CMOS8 位微处理器,俗 称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,stc的stc89c52是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案, stc89c52芯片引脚图如图 3-1所示。第7页共7页主要特性:D1

15、-tPLO IRST 9 P4 pvTTT pn1592Mk?户上$口IGF3.7 I?P3.1 HUIvcc ii In.dvccPL1PC;Opi 工rodPL3P0.2PL5ro.+P)*P0.5PL7P0Ml 7fcSTKXDEATXDALEIN1UPSENINTI川P2 7口用WKp;?壮P2An.3XTAL2P2.2XTAJ_1P2,lGNDP2.0第 POO年 Pln 皿33M PC. 5W PO-6矍 P0.711 vcc知ALE乂他EVP?727 P2.6% %5 P2.42423 P 2222 P2.L21 P2.0图3-1 stc89c52芯片引脚图PI ? PL.1 4

16、 PI 1 PL J 4 Plj 7 PLJ S与MCS-51兼容8K字节可编程闪烁存储器寿命:1000写/擦循环数据保留时间:10年全静态工作:0Hz-24Hz三级程序存储器锁定128*8位内部RAM32可编程I/O线两个16位定日寸器/计数器6个中断源可编程串行通道低功耗的闲置和掉电模式片内振荡器和时钟电路2) STC89C52RC弓I脚功能说明:1、主电源引脚Vcc和VccSTC89C52芯片弓I脚图第8页共8页Vcc(40脚)接+5V电压;V cc接地。2、外接晶体引脚XTAL1和XTAL2XTAL1 (19脚)接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入 端,这个放大

17、器构成了片内振荡器。当采用外部振荡器时,对 HMOS单片机,此引脚应接 地;对SHMOS单片机,此引脚作为驱动端。XTAL2 (18脚)接外晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的 输出端。采用外部振荡器时,对 HMOS单片机,该引脚接外部振荡器的信号,即把外部振 荡器的信号直接接到内部时钟发生器的输入端;对XHMOS ,此引脚应悬浮。3、控制或与其它电源复用引脚RST/VPD、ALE/PROG、PSEN和EA/V ppRST/VPD (9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机 复位。推荐在此引脚与 VSS引脚之间连接一个约 8.2k的下拉电阻,与 Vs

18、s引脚之间连接一 个约10 的电容,以保证可靠地复位。Vss掉电期间,此引脚可接上备用电源,以保证内部RAM的数据不丢失。当 Vss主电源下掉到低于规定的电平, 而VPD在其规定的电压范围 (5S.5V)内,VPD就向内部RAM 提供备用电源。ALE/PROG (30脚):当访问外部存贮器时,ALE (允许地址锁存)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动(吸收或输出电流)8个LS型的

19、TTL输入电路。 对于EPROM单片机(如8751),在EPROM 编程期间,此引脚用于输入编程脉冲( PROG)。PSEN (29脚):此脚的输出是外部程序存储器的读选通信号。在从外部程序存储器 取指令(或常数)期间,每个机器周期两次PSEN有效。但在此期间,每当访问外部数据存储器时,这两次有效的 PSEN信号将不出现。PSEN同样可以驱动(吸收或输出)8个LS型的TTL输入。EA/Vpp(弓|脚):当EA端保持高电平时,访问内部程序存储器,但在PS (程序计数器)值超过 0FFFH (对851/8751/80S51 )或1FFFH (对8052)时,将自动转向执行外部程 序存储器内的程序。

20、当 EA保持低电平时,则只访问外部程序存储器,不管是否有内部程序 存储器。对于常用的 8031来说,无内部程序存储器,所以 EA脚须常接地,这样才能只选 择外部程序存储器。第9页共9页对于EPROM型的单片机(如 8751),在EPROM编程期间,此引脚也用于施加21V的编程电源(Vpp)。4.控制或与其它电源复用引脚 RST/Vpd , ALE/PROG , PSEN和EA/Vpp。RST/Vpd当振荡器运行时。在此引脚上出现两个机器同期的高电平(由低到高跳变), 将使单片机复位。在VSS掉电期间,此引脚可接上备用电源,由 Vpd向内部RAM提供备用电源,以 保持内部RAM中的数据。ALE/

21、PROG正常操作时为 ALE功能(允许地址钱存),提供把地址的低字节锁存到外 部锁存器。ALE引脚以不变的频率(振荡周期的1/6)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲。ALE端可以驱动(吸收或输出电流)八个 LSTTL电路。对于EPROM型单片机,在 EPROM编程期间,此引脚接收编程脉冲( PROG功能)。PSEN外部程序存储器读选通信号输出端。在从外部程序存储器取指令(或数据)期间;PSEN在每个机器周期内两次有效。PSEN同样可以驱动八个 LSTTL输入。EA/Vpp EA为内部程序存储器和外部程序

22、存储器选择端。当EA为高电平时,访问内部程序存储器(PS值小于4K)。当EA为低电平时,则访问外部程序存储器。 对于EPROM 型单片机,在 EPROM编程期间,此引脚上加 21VEPROM编程电源(Vpp)。5、输入/输出(I/O)弓I脚P0、P1、P2、P3 (共32根)P0 口(39脚至32脚):是双向8位三态I/O 口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动 8个LS型的TTL负载。P1 口(1脚至8脚):是准双向8位I/O 口。由于这种接口输出没有高阻状态,输入 也不能锁存,故不是真正的双向I/O 口。P1 口能驱动(吸收或输出电流)4个LS型的TT

23、L负载。对8052、8032, P1.0引脚的第二功能为 T2定时/计数器的外部输入,P1.1引脚的第 二功能为T2EX捕捉、重装触发,即 T2外部控制端。对 EPROM编程和程序验证时,它接 收低8位地址。P2 口(21脚至28脚):是准双向8位I/O 口。在访问外部存储器时,它可以作为扩 展电路高8位地址总线送出高 8位地址。在对 EPROM编程和程序验证期间,它接收高8位地址。P2可以驱动(吸收或输出电流)4个LS型的TTL负载。P3 口( 10脚至17脚):是准双向8位I/O 口,在MSS-51中,这8个引脚还用于专 门功能,是复用双功能口。P3能驱动(吸收或输出电流)4个LS型的TT

24、L负载。作为第一功能使用时,就作为普通I/O 口用,功能和操作方法与P1 口相同。作为第二第10页共10页功能使用时,各引脚的定义如表所示。值得强调的是,P3 口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。如表3-1。表3-1 P3 口管脚备选功能P3.0RXD (串行输入口)P3.1TXD (串行输出口)P3.2/INT0 (外部中断0)P3.3/INT1 (外部中断1)P3.4T0 (记时器0外部输入)P3.5T1 (记时器1外部输入)P3.6/WR (外部数据存储器写选通)P3.7/RD (外部数据存储器读选通)显示模块LCD1602液晶显示屏界由于本设计中要求显示界面显示一

25、些参数,因此在这里选用了 面显示,可以把一下相关的参数进行显示。应用简介模块内部自带字符发生存储器(CGROM,字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是(41H),显示时模块把代码 41H发给液晶模块,我们就能在液晶上看到字母“A”。1602液晶模块内部的控制器共有11条控制指令,丰富的指令可以完成液晶的时序控制、工作方式式设置和数据显示等。采用的LCD1602液晶模块是标准16针插座,接口电路如图.1所示:关于LCD1602的详细资料见表 .2 和表.3第11页共11页图 表 .2LCD1602 引脚说明第

26、1脚VSS为地电源第2脚VDD接5V正电源第3脚V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚rs为寄存器选择,高电平选择数据寄存器、低电平选择指令寄存器。第5脚RW的读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时(00)可以写入指令或者显示地址;当RS为低电平RW;高电平时(01)可以读入忙信号;当RS为高电平RW为低电平时(10)可以写入数据。第6脚E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚D0D7为8位双向数据线。第151

27、6脚背光阳极和背光阴极。表 .3 LCD1602 指令表指令1清显示指令码01H,光标复位到地址 00H位置;指令2光标复位指令码02H,光标返回到地址00H位直;指令3光标和显示模式设置I/D位一光标移动方向,局电平右移,低电平左移;S位一屏幕上所有文字是否左移或者右移,高电平有效,低电平无效;指令4显示开关控制D 位一 控制整体显示的开与关,高电平表示开显示,低电平表示关显示;C位一控制光标的开与关,高电平表7K后光标,低电平表示无光标;B 位一控制光标是否闪烁,高电平闪烁,低电平/、闪烁;指令5光标或显示移位S/C位一局电平时移动显示的文字,彳氐电平时移动光标指令6功能命令设置DL位一高

28、电平时为4位数据总线,低电平时为 8位总线;N一位低电平时为单行显示,高电平时为双行显示;F位彳氐电平时显示 5x7的点阵字符,高电平时为5x10的点阵字符;指令7字符发生器RAM*址设置指令8DDRAM&址设置指令9读忙信号和光标地址BF位一为忙标志位,高电平表示忙,此时模块不能接收命令或者数据指令10写数据第12页共12页指令11读数据LCD 的特点:(1)低压微功耗;(2)平板型结构;(3)被动显示型(无眩光,不刺激人眼,不会引起眼睛疲劳);(4)显示信息量大(因为像素可以做得很小);(5)易于彩色化(在色谱上可以非常准确的复现 );(6)无电磁辐射(对人体安全,利于信息保密 );(7)

29、长寿命(这种器件几乎没有什么劣化问题,因此寿命极长,但是液晶背光寿命有限,不过背光部分可以更换)。输入模块计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式。为此,我们引入了矩阵键盘的应用,采用四条I/O线作为行线,四条I/O线作为列线组成键盘。在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的个数就为4X4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率。键盘接口电路计算器的键盘布局如图.1 所示:一般有16个键组成,在单片机中正好有一个第13页共13页键盘介绍

30、每个按键都有它的行值和列值,行值和列值的组合就是识别这个按键的编码。矩阵的行线和列线分别通过两并行接口和CPU1信。键盘的一端(列线) 通过电阻接VCC而接地是通过程序输出数字“ 0”实现的。键盘处理程序的任务是:确定有无键按下,判断哪一个键按 下,键的功能是什么?还要消除按键在闭合或断开时的抖动。两个并行口中,一个输出扫描码,使按键逐行动态接地; 另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。当无按键闭合时,P10P13与P14P17之间开路;当有键闭合时,与闭合键相连的两条 I/O 线之间短路。判断有无按键按下的方法是:第一步,置列线

31、P14P17为输入状态,从行线P10P13输出低电平,读入列线数据,若某一列线为低电平,则该列线上有键闭合。第二步,行线轮流输出低电平,从列线 P14P17读入数据,若有某一列为低电平,则对应行线 上有键按下。综合一二两步的结果,可确定按键编号。但是键闭合一次只能进行一次键功能 操作,因此须等到按键释放后,再进行键功能操作,否则按一次键,有可能会连续多次进行同样的键操作。主控模块的选型与论证方案一采用FPGA控制FPG妮一种高密度的可编程逻辑器件,自从Xilinx 公司1985年推出第一片FPGAU 来,FPGA的集成密度和性能提高很快,其集成密度最高达 500万门片以上,系统性能可达 200

32、MHz由于FPG湍件集成度高,方便易用,开发和上市周期短,在数字设计和电子生产中得 到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。但是而基于SRAM编程的FPGA其编程信息需存放在外部存储器上,需外部存储器芯片,且使用方法复杂,保密性差,而其对于一个简单的计算器而言,实用FPGM点大材小用,成本太Wj 0方案二采用STC89C52单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU存储器和IO接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单

33、片机控制系统。单片机广泛用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单,实用第14页共14页方便,价格便宜等优点,而其中AT89S52以MCS-51为内核,是单片机中最典型的代表,应用于各种控制领域。方案比较及选择通过以上两种方案论证和比较,从设计的实用性,方便性和成本出发,选择了以 STC89C52IL片机作为中央处理单元进行计算器的设计,这样设计能够实现对六位浮点数的 加减和三位浮点数的乘除运算。所以本设计中方案 2中的STC89C52作为主控模块。显示模块的选型与论证万案一:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二二极管组成,对于显示文字比较合适,如采用在显示数

34、字显得太浪费,且价格也相对较高,所以不用此种作为显示。方案一:采用LED数码管动态扫描,LED数码管价格虽适中,对于显示数字也最合适,而且采 用动态扫描法与单片机连接时,占用单片机口线少。但是由于数码管动态扫描需要借助74LS164移位寄存器进行移位,该芯片在电路调试时往往有很多障碍,所以不采用LED数码管作为显示。方案二:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量文字,图形,显示多 样,清晰可见,对于本设计而言一个LCD1602的液晶屏即可,价格也还能接受,需要的借口线较多,但会给调试带来诸多方便。所以本设计中方案 3中的LCD1602液显示屏作为显示模块。输入模块的选型与论

35、证方案一:计算机输入计算机输入数字和其他功能按键时要用到很多按键,在这种情况下,编程会很简单,但是会占用大量的I/O 资源,因此在很多情况下都不采用这样的方式。方案二:矩阵键盘输入采用矩阵键盘的方式。矩阵键盘采用四条I/O线作为行线,四条I/O线作为列线组成键第15页共15页盘,在行线和列线的每个交叉点上设置一个按键。这样键盘上按键的数量就为4*4个。这样行列式键盘结构能有效的提高单片机系统中I/O 口的利用率。所以本设计中方案 2中的矩阵键盘输入作为输入模块。软件部分软件工具介绍软件编程平台选择最常用的keil软件。由于该程序并未涉及到底层的驱动问题,因此选择方便快捷的 C语言编程。在编程中

36、,将该程序分为四个模块:延时模块、 1602显示 模块、用于处理计算表达式的对战模块及主函数模块。采用模块化设计,方便调试与理解。 具体程序见附录。软件模块介绍;键盘扫描独立键盘很好实现,只需不停的检测即可, 出现低电平即出现按键,在经过一定的延时消抖,再确认判断即可。矩阵键盘扫描程序, 首先读出P3的低四位,然后读出P3 口的高四位。然后确定键值并 显示缓存,最终将按键的值通过一个预先定义好的数组转换为相应的ASCII码值送给LCD显示和与表达式相应的堆栈进行处理,读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出高电平,从 P3 口的值读入键盘信息(行

37、信 息);第二次所有列线均输出高电平,从P3 口的值读入键盘信息(列信息)。数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。示模块的程序设计显示模块程序首先要对显示模块进行初始化;然后控制光标的位置;定义液晶显示的控制端口,用SBIT指令完成;然后设置清屏、关闭显示、归位、开显示、显示位置的首地址 等等。显示模块的流程图如图.1 所示:第16页共16页开始图.1 模块的流程图表达式的处理表达式包含加、减、乘、除、括号等,必须按照相应的优先级运算,才可能得出正确的 结果。在这儿采用栈结构,可以有效的进行表达式的处理。栈结构具有 后进先出”的固有属性,借助这个属性我们可以随时对刚输

38、入的元素进行操 作,从而实现边输入边计算。为了实现算符优先算法。可以使用两个工作栈。一个称为 OPTR,用以寄存运算符,另 一个称做OPND,用以寄存操作数或运算结果。第17页共17页1.首先置操作数栈为空栈,表达式起始符初运算符栈的栈底元素;2.依次读入表达式,若是操作符即进OPND栈,若是运算符则和OPTR栈的栈顶运算符 比较优先权后作相应的操作,直至整个表达式求值完毕(即 OPTR栈的栈顶元素和当前读 入的字符均为 #)。在这里,相应的处理指的是,如果当前符号的优先级比栈顶优先级低, 则将该符号继续 压入堆栈,不做其它操作;如果当前符号的优先级比栈顶优先级高, 则依次取出操作数栈的 栈顶

39、两个数据和符号栈的栈顶符号进行这两个数的运算,运算结果数据再压入操作数栈中。若优先级相等,则弹出符号栈栈顶符号。算符间的优先关系如下(曲表示开始和结束)+-*()#+-*(#=表.1运算符优先级表第18页共18页第四章调试在查找了相关书籍后编写出程序,并根据程序焊接所需要的元器件,将各类元器件及管脚座焊接完毕后,插入单片机、LCD显示屏、矩阵键盘等各类芯片。随后进行功能验证。力口、 减、乘、除运算和 LCD液晶显不1)上电后,屏幕初始化。2)计算。按下数字键,屏幕显示按下的数字,再按下加、减、乘、除符号键,然后再 按下数字键,最后按下号键,屏幕即显示出计算结果。本次计算器可实现两位数间的 计算

40、。3)如果要再次计算,可以按下清零键清零,或者按下单片机的复位键,重新初始化。经过以上步骤验证可知,实验目标功能基本实现,设计成功。第19页共19页第五章总结总之,通过一系列仿真和设计, 基于单片机的计算器设计还是比较成功的做出来了。-路下来还是比较坎坷,从原理到实物,从调试到调试成功,遇到了很多问题,特别是在软件编程时,开始以为既然单片机具有数据处理与运算的能力,那么用它来做一个计算器应该很简单了,可是,后面实际操作才知道,当计算表达式时,优先级问题非常重要,一开始用了很多if语句来实现,程序繁琐复杂,且效果不是很好,很容易出错,最后通过查阅相关资料,了解到利用数据结构中栈的思想来解决这一问

41、题就很方便。但在实际写程序时也遇到了很多问题,但最终还是克服难关,将整个软件比较完善的实现了。在硬件的原理图及 PCB设计中,也遇到了很多问题,先做模块后做主板,导致后面的布线就很麻烦,这也教会了我一些经验,在 PCB分模块设计中,模块与模块之间的连接也是必须考虑到的,从左端连接还是从右端连接,都直接影响到整个PCB板的设计。总之,通过这次设计也收获了很多,知识层面上,学得了很多新知识,解决问题的新方法,思考问题的新方向。实践方面,提高了动手能力,提高了解决实际问题的能力等等。在思想上,更加明白的坚持不懈的重要性,学习探索的重要性,实践动手的重要性。第20页共20页参考文献1孙育才等.MCS-

42、51系列单片微型计算机及其应用(第 4版).东南大学出版社,2004.32李萍等.智能仪器实验指导书.大连交通大学,2007.93单片机应用技术(C语言).中国劳动社会保障出版社,2006.64武庆生,仇梅等著.单片机原理与应用.电子科技大学出版,1998.125朱定华著.单片机原理与接口技术.电子工业出版社,2001.4 7王宜怀,刘晓升等著.嵌入式应用技术基础教程.北京清华大学出版社,2005.76王威著.HCS12微控制器原理及应用.北京航空航天大学出版社,2007.107周立功.单片机实验与实践.北京航空航天大学出版社,2004.3第21页共21页附录:程序源代码#include /包

43、含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#includevoid delay(unsigned int );sbit RS = P1A0;/ 定义端口sbit RW = P1A1;sbit EN = P2A5;sbit DU = P2A6;sbit WE = P2A1;#define RSD RS=0#define RSG RS=1#define RWD RW=0#define RWG RW=1#define END EN=0#define ENG EN=1#define DataPort P0#define uchar unsigned char#define uint

44、unsigned intvoid display2(float n);void display3(float n);void display4(float n);void display5(float n);void display6(float n);void display7(float n);void display8(float n);void display9(float n);void display10(float n);float jisuan(void);uchar U10;uchar shu;uchar m;uchar cord_l,cord_h;float x1,x2,r

45、esult;uchar i=0,j=0;第22页共22页 uchar code table尸0123456789;void cmg88()关数码管,点阵函数 DU=1;后面要删掉P0=0X00;DU=0;/*uS延时函数,含有输入参数unsigned chart,无返回值unsigned char是定义无符号字符变量,其值的范围是0255这里使用晶振12M ,精确延时请使用汇编,大致延时 长度如下T=tx2+5 uS*/void DelayUs2x(unsigned char t) while(-t);/*mS延时函数,含有输入参数unsigned chart,无返回值unsigned cha

46、r是定义无符号字符变量,其值的范围是0255这里使用晶振12M,精确延时请使用汇编 */ void DelayMs(unsigned char t)while(t-)大致延时1mSDelayUs2x(245);DelayUs2x(245); /*判忙函数*/bit LCD_Check_Busy(void) DataPort= 0 xFF;RSD;RWG;END;_nop_();ENG;return (bit)(DataPort & 0 x80);第23页共23页)/*写入命令函数*/void LCD_Write_Com(unsigned char com)(while(LCD_Check_Bu

47、sy(); / 忙则等待RSD;RWD;ENG;DataPort= com;_nop_();END;)/*写入数据函数*/void write_dat(unsigned char Data)(while(LCD_Check_Busy(); / 忙则等待RSG;RWD;ENG;DataPort= Data;_nop_();END;)/*清屏函数*/void LCD_Clear(void)(LCD_Write_Com(0 x01);DelayMs(5);)/*写入字符串函数*/void LCD_Write_String(unsigned char x,unsigned char y,unsigne

48、d char *s) (if (y = 0)(LCD_Write_Com(0 x80 + x);表示第一行第24页共24页)else(LCD_Write_Com(0 xC0 + x);/表示第二行) while (*s)( write_dat( *s);s +;)/*写入字符函数*/void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data) (if (y = 0)(LCD_Write_Com(0 x80 + x);)else(LCD_Write_Com(0 xC0 + x);)write_dat( Data);

49、)/*初始化函数*/void LCD_Init(void)/*显示模式设置*/*显示关闭*/*显示清屏*/*显示光标移动设置*/*显示开及光标设置*/(LCD_Write_Com(0 x38);DelayMs(5);LCD_Write_Com(0 x38);DelayMs(5);LCD_Write_Com(0 x38);DelayMs(5);LCD_Write_Com(0 x38);LCD_Write_Com(0 x08);LCD_Write_Com(0 x01);LCD_Write_Com(0 x06);DelayMs(5);LCD_Write_Com(0 x0f);)第25页共25页/*第

50、一个数值的大小*/float shuzhi() (float xx;if(i=6) (xx=U1*100000+U2*10000+U3*1000+U4*100+U5*10+U6; )if(i=5) (xx=U1*10000+U2*1000+U3*100+U4*10+U5; )if(i=4) (xx=U1*1000+U2*100+U3*10+U4;)if(i=3) (xx=U1*100+U2*10+U3;)if(i=2) (xx=U1*10+U2;) if(i=1)(xx=U1;) return xx;)/*按键确定*/uchar KeyScan()/啼返回值的子函数(m=0;/声明列线和行线的

51、值的储存变量第26页共26页P3 = 0 xf0;/1111 0000if( (P3 & 0 xf0) != 0 xf0)/判断是否有按键按下 (delay(5);/软件消抖if( (P3 & 0 xf0) != 0 xf0)/判断是否有按键按下 (cord_l = P3 & 0 xf0;/ 储存列线值P3 = cord_l | 0 x0f;cord_h = P3 & 0 x0f;/ 储存行线值while( (P3 & 0 x0f) != 0 x0f );/ 松手检测/ if (cord_l + cord_h)!=0 x7e&(cord_l + cord_h)!=0 x7d&(cord_l c

52、ord_h)!=0 x7b&(cord_l + cord_h)!=0 x77&(cord_l + cord_h)!=0 xe7&(cord_l cord_h)!=0 xd7)/ i=i+1;/m=cord_l + cord_h;void KeyPro()if (m=0 x7e) /+write_dat(0 x2b);i=i-1;x1=shuzhi();i=0;j=1;else if(m=0 x7d) /-write_dat(0 x2d);i=i-1;x1=shuzhi();i=0;j=2;第27页共27页)else if(m=0 x7b) /*(write_dat(0 x2a);i=i-1;x

53、1=shuzhi();i=0;j=3;)else if (m=0 x77)/ /(write_dat(0 x2f);i=i-1;x1=shuzhi();i=0;j=4;)else if(m=0 xe7)()else if(m=0 xb7)/=(LCD_Write_Com(0 xc0);write_dat(0 x3d);i=i-1;x2=shuzhi();i=0;result=jisuan();If(result=100000000)(Write_dat(,NULL?);)if(result=1&result=10&result=100&result=1000&result=10000&resu

54、lt=100000&result=1000000&result=10000000&result=5)(write_dat(0 x30);write_dat(0 x2e);write_dat(0 x30+xiao1); write_dat(0 x30+xiao2+1);) else(write_dat(0 x30); write_dat(0 x2e); write_dat(0 x30+xiao1);write_dat(0 x30+xiao2);)void display3(float n) /1.1769 (第30页共30页int xiao3,xiao2,xiao1,ge;if (int)n!=

55、n)(xiao3=(int)(n*1000)%10;xiao2=(int)(n*100)%10;xiao1=(int)(n*10)%10;ge=(int)n;if (xiao3=5) write_dat(0 x30+ge);write_dat(0 x2e);write_dat(0 x30+xiao1);write_dat(0 x30+xiao2+1);elsewrite_dat(0 x30+ge);write_dat(0 x2e);write_dat(0 x30+xiao1);write_dat(0 x30+xiao2);elsewrite_dat(0 x30+n);void display4

56、(float n) /21.176 int xiao3,xiao2,xiao1,ge,shi; if(int)n!=n) xiao3=(int)(n*1000)%10;xiao2=(int)(n*100)%10;xiao1=(int)(n*10)%10;ge=(int)n%10;shi=(int)(n/10)%10;if (xiao3=5) write_dat(0 x30+shi);write_dat(0 x30+ge);write_dat(0 x2e);write_dat(0 x30+xiao1);第31页共31页write_dat(0 x30+xiao2+1);) else(write_d

57、at(0 x30+shi); write_dat(0 x30+ge); write_dat(0 x2e);write_dat(0 x30+xiao1); write_dat(0 x30+xiao2);) else(shi=n/10;ge=(int)n%10;write_dat(0 x30+shi); write_dat(0 x30+ge);) )void display5(float n) /321.176 (int xiao3,xiao2,xiao1,ge,shi,bai;if(int)n!=n) (xiao3=(int)(n*1000)%10;xiao2=(int)(n*100)%10;x

58、iao1=(int)(n*10)%10;ge=(int)n%10;shi=(int)(n/10)%10;bai=(int)(n/100)%10;if (xiao3=5)(write_dat(0 x30+bai);write_dat(0 x30+shi);write_dat(0 x30+ge);write_dat(0 x2e);write_dat(0 x30+xiao1);write_dat(0 x30+xiao2+1);第32页共32页) else(write_dat(0 x30+bai); write_dat(0 x30+shi); write_dat(0 x30+ge); write_da

59、t(0 x2e);write_dat(0 x30+xiao1); write_dat(0 x30+xiao2);) else(bai=n/100;shi=(int)n/10%10; ge=(int)n%10;write_dat(0 x30+bai); write_dat(0 x30+shi); write_dat(0 x30+ge);) void display6(float n) /4321.176 (int xiao3,xiao2,xiao1,ge,shi,bai,qian; if(int)n!=n) (xiao3=(int)(n*1000)%10;xiao2=(int)(n*100)%1

60、0;xiao1=(int)(n*10)%10;ge=(int)n%10;shi=(int)(n/10)%10;bai=(int)(n/100)%10;qian=(int)(n/1000)%10;if (xiao3=5) (write_dat(0 x30+qian);write_dat(0 x30+bai);write_dat(0 x30+shi);write_dat(0 x30+ge);write_dat(0 x2e);write_dat(0 x30+xiao1);第33页共33页write_dat(0 x30+xiao2+1);) else(write_dat(0 x30+qian); wr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论