单片机计算器及密码锁程序设计论文.doc_第1页
单片机计算器及密码锁程序设计论文.doc_第2页
单片机计算器及密码锁程序设计论文.doc_第3页
单片机计算器及密码锁程序设计论文.doc_第4页
单片机计算器及密码锁程序设计论文.doc_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计(论文)单片机计算器及密码锁程序设计学院(系):电气工程学院 专 业:07级计控(2)班 学 号:070103010142 摘要摘要智能化是当今光、机、电一体化产品的发展趋势之一,而智能性的实现主要依赖于嵌入式系统的核心单片机。而仿真器不但是开发单片机系统的重要手段,也是学习单片机知识的必备工具。本课题来源于燕山大学自动化专业单片机生产实习的需要,为了充分锻炼学生的动手操作能力,并节约实习经费,因此开发了一种使用简单,覆盖单片机基本资源应用并且价格低廉的单片机仿真系统。论文分别介绍了单片机仿真系统的硬件设计和软件实现。硬件设计包括仿真芯片的选型,单片机的资源应用及扩展电路,如:8255并口扩展、发光二极管、七段动态数码显示44键盘输入、蜂鸣器等。软件部分包括两个大程序:密码锁程序和计算器程序。密码锁程序实现3-8位可变密码的输入、修改和密码输入正确后的授权操作功能,密码错误后有声光报警(不同的报警次数对应不同的报警方式)。计算器程序实现带符号浮点数的加、减、乘、除及开根号的功能,设计中加入了第二功能键解决了按键有限的问题。这两个程序主要应用了单片机教材中中断、动态显示、键盘输入、i/o接口这些重要功能,具有良好的示范作用。本系统不但可以应用于单片机教学,对大多数电子爱好者开发简单的仿真器也有借鉴作用。关键词单片机;仿真器;计算器;密码锁;i 目 录摘要i第1章 绪论11.1 课题背景11.2 单片机的发展概述11.3 单片机的应用领域41.4 单片机的发展趋势51.5 本课题研究的内容6第2章 硬件系统的介绍72.1 sst89e58rd芯片功能及原理72.2 8255可编程并行i/o接口扩展82.3 8255与八位led数码管的链接电路122.4 led与单片机的链接132.5 键盘电路142.6 蜂鸣器电路142.7 本章小结16第3章 计算器程序173.1 程序功能及存储方式介绍173.2 主程序183.3 键盘子程序213.4 除法子程序263.5 开根号子程序313.6 小数点对齐子程序363.7 其它子程序383.8 本章小结41第四章 密码锁程序424.1 程序的功能及存储方式介绍424.2 主程序424.3 读密码及改密码子程序464.4 报警子程序484.5 错误显示子程524.6 c语言与汇编语言的比较534.7 本章小结54结论55参考文献56致谢57附录1 开题报告58附录2 文献综述64附录3 外文翻译的中文部分68附录4 外文翻译的英文部分75附录5 系统电路原理图85附录6 计算器程序的数据表86iii第一章 绪论 第1章 绪论1.1 课题背景本课题来源于燕山大学自动化专业单片机生产实习的需要,目的是为了充分锻炼学生的动手操作能力并节约实习经费,因此开发了一种使用简单,覆盖单片机基本资源应用,并且价格低廉的单片机仿真系统。在单片机的开发过程中,程序的设计是最为重要的但也是难度最大的。一种最简单和原始的开发流程是:编写程序烧写芯片验证功能,这种方法对于简单的小系统是可以对付的,但在大系统中使用这种方法则是完全不可能的。因此仿真成了系统调试的必备手段。仿真分软件仿真和硬件仿真。软件仿真主要是使用计算机软件来模拟运行实际的单片机运行,因此仿真与硬件无关的系统具有一定的优点。用户不需要搭建硬件电路就可以对程序进行验证,特别适合于偏重算法的程序。软件仿真的缺点是无法完全仿真与硬件相关的部分,因此最终还要通过硬件仿真来完成最终的设计。仿真器是单片机仿真的重要工具。单片机仿真器是在产品开发阶段用来替代单片机进行软硬件调试的非常有用的开发工具。使用单片机仿真器可以对单片机程序进行单步、断点等手段的调试,检查程序运行中单片机ram 、寄存器内容的变化,观察程序的运行悄况,与此同时可以对硬件电路进行实时的调试。使用单片机仿真器可以迅速发现、纠正程序中的错误,从而大大缩短单片机开发的周期。1.2 单片机的发展概述 1946年第一台电子计算机诞生至今,只有50年的时间,依靠微电子技术和半导体技术的进步,从电子管晶体管集成电路大规模集成电路,现在一块芯片上完全可以集成几百万甚至上千万只晶体管,使得计算机体积更小,功能更强。特别是近20年时间里,计算机技术获得飞速的发展,计算机在工农业,科研,教育,国防和航空航天领域获得了广泛的应用,计算机技术已经是一个国家现代科技水平的重要标志。 单片机诞生于20世纪70年代,象fairchid公司研制的f8单片微型计算机。所谓单片机是利用大规模集成电路技术把中央处理单元(center processing unit,也即常称的cpu)和数据存储器(ram)、程序存储器(rom)及其他i/o通信口集成在一块芯片上,构成一个最小的计算机系统,而现代的单片机则加上了中断单元,定时单元及a/d转换等更复杂、更完善的电路,使得单片机的功能越来越强大,应用更广泛。 1976年intel公司推出了mcs-48单片机,这个时期的单片机才是真正的8位单片微型计算机,并推向市场。它以体积小,功能全,价格低赢得了广泛的应用,为单片机的发展奠定了基础,成为单片机发展史上重要的里程碑。 在mcs-48的带领下,其后,各大半导体公司相继研制和发展了自己的单片机,象zilog公司的z8系列。到了80年代初,单片机已发展到了高性能阶段,象intel公司的mcs-51系列,motorola公司的6801和6802系列,rokwell公司的6501及6502系列等等,此外,日本的著名电气公司nec和hitachi都相继开发了具有自己特色的专用单片机。 80年代,世界各大公司均竞相研制出品种多功能强的单片机,约有几十个系列,300多个品种,此时的单片机均属于真正的单片化,大多集成了cpu、ram、rom、数目繁多的i/o接口、多种中断系统,甚至还有一些带a/d转换器的单片机,功能越来越强大,ram和rom的容量也越来越大,寻址空间甚至可达64kb,可以说,单片机发展到了一个全新阶段,应用领域更广泛,许多家用电器均走向利用单片机控制的智能化发展道路。 1982年以后,16位单片机问世,代表产品是intel公司的mcs-96系列,16位单片机比起8位机,数据宽度增加了一倍,实时处理能力更强,主频更高,集成度达到了12万只晶体管,ram增加到了232字节,rom则达到了8kb,并且有8个中断源,同时配置了多路的a/d转换通道,高速的i/o处理单元,适用于更复杂的控制系统。随后的事情,熟悉单片机的人士都比较清楚了,更多的单片机种蜂拥而至,motorola公司相继发布了mc68hc系列单片机,日本的几个著名公司都研制出了性能更强的产品,但日本的单片机一般均用于专用系统控制,而不象intel等公司投放到市场形成通用单片机。例如nec公司生产的ucom87系列单片机,其代表作upc7811是一种性能相当优异的单片机。motorola公司的mc68hc05系列其高速低价等特点赢得了不少用户。 zilog公司的z8系列产品代表作是z8671,内含basic debug解释程序,极大地方便用户。而美国国半的cop800系列单片机则采用先进的哈佛结构。atmel公司则把单片机技术与先进的flash存储技术完美地结合起来,发布了性能相当优秀的at89系列单片机。包括中国的台湾holtek和winbond等公司也纷纷加入了单片机发展行列,凭着他们廉价的优势,分享一杯美羹。1990年美国intel公司推出了80960超级32位单片机引起了计算机界的轰动,产品相继投放市场,成为单片机发展史上又一个重要的里程碑。 此期间,单片机园地里,单片机品种异彩纷呈,争奇斗艳。有8位、16位甚至32位机,但8位单片机仍以它的价格低廉、品种齐全、应用软件丰富、支持环境充分、开发方便等特点而占着主导地位。而intel公司凭着他们雄厚的技术,性能优秀的机型和良好的基础,目前仍是单片机的主流产品。只不过是九十年代中期,intel公司忙着开发他们个人电脑微处理器,已没有足够的精力继续发展自己创导的单片机技术,而由philips等公司继续发展c51系列单片机。1.3 单片机的应用领域 单片机广泛应用于仪器仪表、家用电器、医用设备、航空航天、专用设备的智能化管理及过程控制等领域,大致可分如下几个范畴: 1。在智能仪器仪表上的应用 单片机具有体积小、功耗低、控制功能强、扩展灵活、微型化和使用方便等优点,广泛应用于仪器仪表中,结合不同类型的传感器,可实现诸如电压、功率、频率、湿度、温度、流量、速度、厚度、角度、长度、硬度、元素、压力等物理量的测量。采用单片机控制使得仪器仪表数字化、智能化、微型化,且功能比起采用电子或数字电路更加强大。例如精密的测量设备(功率计,示波器,各种分析仪)。 2.在工业控制中的应用 用单片机可以构成形式多样的控制系统、数据采集系统。例如工厂流水线的智能化管理,电梯智能化控制、各种报警系统,与计算机联网构成二级控制系统等。3.在家用电器中的应用 可以这样说,现在的家用电器基本上都采用了单片机控制,从电饭褒、洗衣机、电冰箱、空调机、彩电、其他音响视频器材、再到电子秤量设备,五花八门,无所不在。 4.在计算机网络和通信领域中的应用 现代的单片机普遍具备通信接口,可以很方便地与计算机进行数据通信,为在计算机网络和通信设备间的应用提供了极好的物质条件,现在的通信设备基本上都实现了单片机智能控制,从手机,电话机、小型程控交换机、楼宇自动通信呼叫系统、列车无线通信、再到日常工作中随处可见的移动电话,集群移动通信,无线电对讲机等。5.单片机在医用设备领域中的应用 单片机在医用设备中的用途亦相当广泛,例如医用呼吸机,各种分析仪,监护仪,超声诊断设备及病床呼叫系统等等。 此外,单片机在工商,金融,科研、教育,国防航空航天等领域都有着十分广泛的用途。1.4 单片机的发展趋势现在可以说单片机是百花齐放,百家争鸣的时期,世界上各大芯片制造公司都推出了自己的单片机,从8位、16位到32位,数不胜数,应有尽有,有与主流c51系列兼容的,也有不兼容的,但它们各具特色,互成互补,为单片机的应用提供广阔的天地。 纵观单片机的发展过程,可以预示单片机的发展趋势,大致有: 1.低功耗cmos化 mcs-51系列的8031推出时的功耗达630mw,而现在的单片机普遍都在100mw左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了cmos(互补金属氧化物半导体工艺)。象80c51就采用了hmos(即高密度金属氧化物半导体工艺)和chmos(互补高密度金属氧化物半导体工艺)。cmos虽然功耗较低,但由于其物理特征决定其工作速度不够高,而chmos则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗象电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。 2.微型单片化 现在常规的单片机普遍都是将中央处理器(cpu)、随机存取数据存储(ram)、只读程序存储器(rom)、并行和串行通信接口,中断系统、定时电路、时钟电路集成在一块单一的芯片上,增强型的单片机集成了如a/d转换器、pmw(脉宽调制电路)、wdt(看门狗)、有些单片机将lcd(液晶)驱动电路都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。 此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中smd(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。 3.主流与多品种共存 现在虽然单片机的品种繁多,各具特色,但仍以80c51为核心的单片机占主流,兼容其结构和指令系统的有philips公司的产品,atmel公司的产品和中国台湾的winbond系列单片机。所以c8051为核心的单片机占据了半壁江山。而microchip公司的pic精简指令集(risc)也有着强劲的发展势头,中国台湾的holtek公司近年的单片机产量与日俱增,与其低价质优的优势,占据一定的市场分额。此外还有motorola公司的产品,日本几大公司的专用单片机。在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补,相辅相成、共同发展的道路。1.5 本课题研究的内容本课题主要实现基于单片机教学电路板的两个程序:计算器程序和密码锁程序。计算器程序包括7段数码管的动态显示、读入键盘键值、led控制、带符号浮点数加减乘除四则运算及开根号计算和退格功能的实现。由于数码管只有8位,所以计算结果最多能精确到8位(负数7位)。密码锁程序的包括修改密码、输入密码错误报警(并且根据报警次数的不同实现不同的报警方式)、密码输入正确后的授权操作(硬件有限,只能是模拟)和复位功能。复位功能的加入使本设计更贴近实际,当有人试图闯入系统时报警功能发挥作用,但是报警系统必须能够硬件复位,否则该系统将成为一次性系统,没有任何使用价值。53 第2章 硬件系统的介绍 第2章 硬件系统的介绍 第2章 硬件系统的介绍完成的单片机仿真器及教学电路板实物如图2-1所示。本章主要介绍sst89e58rd芯片、8255芯片、动态数码管和led的接口和工作原理。图2-1单片机仿真器及教学电路板2.1 sst89e58rd芯片功能及原理sst89e58rd属于flashflex51家族,以cmos 半导体处理技术设计和制造的8 位scm。器件使用与8051 完全相同的指令集,并与标准的8051 器件管脚对管脚兼容。32k 字节的flash eeprom 程序存储器,这是基于sst 的专利技术和专有的cmos superflash eeprom 技术将superflash 存储器分成两部分相对独立的程序存储块。主块0占用32kb字节的内部程序存储空间,次块1占用8k的内部程序存储空间。该8k 字节的次块可以被映射到64/32k 字节存储器空间的最低地址空间,同时该空间也可以通过程序计数器(program counter) 被隐藏,同时可以作为独立的类eeprom(eeprom-like)数据存储器。该存储块可以通过标准的87c5x 的otp eprom 编程器通过加装专为sst 器件准备的特殊的适配器和firmware 来编程。在上电复位器件,该器件可以被配置为下位机,作为外部主机的原始代码存储器,或者作为上位机连接到外部主机进行iap 操作(在应用可编程)。该器件被设计成为可以在系统和在应用可编程,这样可以在印刷电路板上达到最大的机动性。该器件可以用一个启动例程被预编程,示范用户编程代码下载或通过iap 功能更新用户代码。有一个下载启动代码的例程可供用户参考,仅供方便起见。sst 不保证该下载启动例程的功能和使用。器件擦除操作会擦除该预编程过的示例代码。作为32kb的superflash eeprom 的片内程序存储器的补充,该器件可以寻址到64kb的外部程序存储器空间。作为1kb8 位的片内ram 空间的补充,该器件可以寻址64k 字节的外部ram 空间。sst 的高可靠性,拥有专利的superflash 技术和存储器单元架(memory cellarchitecture)有一系列的设计和生产flash eeproms 的重要的优势。这些优势转换成为重大的价值和使用户可靠地受益。仿真功能的实现也得益于此,事先将仿真监控程序烧写到次块1中,以实现在线仿真。2.2 8255可编程并行i/o接口扩展 18255是一个通用可编程并行i/o接口芯片,引脚定义如图2-2所示。(1)8255有3个8位并行i/o端口,端口a,b,c均可以工作在输入或输出方式;(2)两组控制电路分别控制3个端口,a组控制端口a和端口c的高4位,b组控制电路控制端口b端口c的低4位;(3)具有数据总线缓冲器,可以方便地与单片机数据总线连接;(4)端口a,b,c通过内部数据总线与数据总线缓冲器连接,即各端口通过数据端口与单片机交互信息;(5)提供读/写控制逻辑,可以很方便地通过movx反映令完成对其各端口的操作。图2-2 8255引脚图28255的功能 (1)数据端口a,b,c端口a:一个8位数据输出锁存/缓冲器,一个8位数据输入锁存器;端口b:一个8位数据输出锁存/缓冲器,一个8位数据输入锁存器;端口c:一个8位数据输出锁存/缓冲器,一个8位数据输入锁存器。3个端口都可以作为数据输入式输出端口,但是不同的端口有不同的工作方式。除一般输入/输出方式外,端口a还可以工作在双向方式、握手联络方式,端口b可以工作在握手联络方式;而端口c可以作为控制或状态信号的端口,为端口a和b提供握手联络信号,并且端口c还可工作在按位置位/复位方式。本设计中,只将其作为最基本的i/o口使用。(2)读/写和控制逻辑读/写和控制逻辑直接与单片机的控制总线及地址总线相连接,8255的a0,a1及与地址总线连接,而和与单片机的和信号连接。8255有如下相关的控制信号。:片选信号,低电平时,8255被选口;:读信号,低电平有效,该信号有效时可以读取8255的端口数据或状态信息;:写信号,低电平有效,该信号有效时可以向8255写入控制字式向端口写数据;reset:复位信号,高电平有效,只有复位后8255才能接收单片机对其进行的初始化。(3)端口地址的确定8255的地址由其引脚,a1,a0决定,端口选择如表所示。表2-1 8255端口选择a1a0操作001010000111000a口数据总线b口数据总线c口数据总线输入00110101111100000000数据总线a口数据总线b口数据总线c口数据总线 控制寄存器输出110111100端口输出为“高阻”非法端口输出为“高阻”禁止38255的控制字、状态字和工作方式(1)8255的控制字8255有两种控制字,它们决定了8255的工作方式。方式控制字方式控制字由8位组成,其格式如下。1d6d5d4d3d2d1d0d7:d7=1,是方式控制字标志。d6和d5:确定a口工作方式,d6d5=00,a口工作在方式0;d6d5=01,a口工作在方式1;d6d5=10,a口工作在方式2。d4:确定a口的数据传输方向,d4=1,a口输入;d4=0,a口输出。d3:确定c口的pc7pc4的数据传输方向,d3=1,pc7pc4输入;d3=0,pc7pc4输出。d2:确定b口的数据传输方向,d2=1,b口输入;d2=0,b口输出。d0:确定c口的pc3pc0的数据传输方向,d0=1,pc3pc0输入;d0=0,pc3pc0输出。(2)按位复位/置位控制字按位复位/置位控制字由位组成,其格式如下。0d6d5d4d3d2d1d0d7:d7=0,是按位复位/置位,控制字标志。d6,d5,d4:没有定义。d3,d2,d1:选择c口中的某一位,3位组成8个状态,000111分别代表选择pc0pc7。d0:置1、清零标志,d0=1,将d3d2d1选择位置1;d0=0,将d3d2d1选择位清零。(3)8255的状态字8255没有专门的状态字,当端口a、端口b工作于方式1或方式时,端口c为它们提供握手联络信号,读端口c,可以得到有关端口的工作状态信息。端口工作于方式0时,没有相应的状态信息。状态字与工作方式密切相关。(4)8255工作方式由8255的方式控制字可知,8255有3种工作方式,并且不同的端口有不同的工作方式。端口a可以工作在方式0、方式1和方式2,端口b可以工作在方式0和方式1,端口c只能工作在方式0。本设计中只选用8255的方式0,即基本的输入/输出方式,3个端口互不影响,可以分别设置为输入或输出。4mcs-51单片机与8255的接口电路8255与mcs-51单片机的接口电路如图2-3所示。如图2-3 8255与单片机的连接电路2.3 8255与八位led数码管的链接电路单片机应用系统中只有一位数字显示是不常见的,同时要驱动多个数码管显示,就必须同时让多个数码管加上各自不同的段选码,这属于静态显示。在单片机应用系统中,显示器显示常用静态显示和动态扫描显示两种方法。1、所谓静态显示,就是每一个显示器都要占用单独的具有锁存功能的i/o接口用于笔划段字形代码。单片机只要把要显示的字形代码发送到接口电路,直到要显示新的数据时,再以送新的字形码,因此,使用这种方法单片机中cpu的开销小。2、所谓动态显示,与静态显示不同,动态显示技术让不同的数码管分时亮。即,某一个数码管的字段码从单片机的一个i/o接口输出,通过单片机选通该数码管,让这个数码管显示自己的字符几个毫秒,然后将下一个数码管的字段码从单片机的同一个i/o接口输出,通过单片机选通下一个数码管,让下一个数码管显示自己的字符几个毫秒,依次循环。由于人眼响应较慢,最后的效果是每一个数码管都在显示各自的字符。本设计采用八位数码管的动态显示,通过8255口和b口来连接数码管。a口为段选信号,b口为位选信号。电路如图2-4所示.。共阴极四位一体数码管的引脚图如右图所示,显示数字所对应的控制字如下表:01234567893fh06h5bh4fh66h6dh7bh07h7fh6fh图2-4 数码管与8255连接电路2.4 led与单片机的链接将发光二极管与单片机的i/o口相联,控制各各灯的亮样,以达到使其呈现不同样式。这是最基础的单片机学习过程。电路好图2-5所示。本设计用到12个发光二极管,其中4个直接与单片机p1口相连,其余8个与8255c口相连。图2-5 流水灯电路简图2.5 键盘电路在微机应用系统中,为了输入数据、查询和控制系统的工作状态,一般都设置有键盘,本系统中采用44的键盘,键盘的8位接口与pc口相连。由于led7到led14也是通过8255的pc口控制的,本设计采用跳线实现了pc口复用的功能。键盘原理图如图2-6。键盘的工作原理:键盘采用逐列扫描的工作原理。pc4到pc7为输出口,pc1到pc4为输入口。接收键盘数据时首先给pc4送出一个低电平(pc5到pc7保持高电平),然后检查pc0到pc3有没有低电平,如果有一位低电平就说明第一列有键按下,低电平的位所对应的行就是按下的键所对应的行。如果第一列都是高电平就说明这一列没有键被按下。用同样的方法扫描后面三列。最后将建位值保存起来就完成了接收键盘数据。 图26 键盘电路2.6 蜂鸣器电路蜂鸣器是一种一体化结构的电子讯响器,通过本设计学习如何用单片机驱动蜂鸣器。它广泛应用于计算机、打印机、复印机、报警器、电话机等电子产品中作发声器件。 蜂鸣器主要分为压电式蜂鸣器和电磁式蜂鸣器两种类型。1、电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,振荡器产生的音频信号电流通过电磁线圈,使电磁线圈产生磁场,振动膜片在电磁线圈和磁铁的相互作用下,周期性的振动发声。 2、压电式蜂鸣器主要由多谐振荡器、压电蜂鸣片、阻抗匹配器及共鸣箱、外壳等组成。多谐振荡器由晶体管或集成电路构成,当接通电源后(1.515v直流工作电压),多谐振荡器起振,输出1.52.5khz的音频信号,阻抗匹配器推动压电蜂鸣片发声。这里采用的是电磁式蜂鸣器,通过 单片机i/o口周期性的取反,使三极管周期性的导通从而使蜂鸣器振动发声。声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。常见音调及其频率对应如表2-2所示。表2-2 音调及其频率音符1234567频率/hz523587859698784880987蜂鸣器连接电路如图2-7所示。图2-7 蜂鸣器连接电路2.7 本章小结本章主要介绍了单片机仿真器系统中的硬件电路原理图,以方便对整个电路的了解,使使用者熟悉电路原理,这是阅读程序的必要前提。硬件电路中包括单片机、8255并行口、键盘电路、动态数码显示、流水灯等各部分的原理图和功能,为后续章节软件系统打下基础。第3章 计算器程序 第3章 计算器程序3.1 程序功能及存储方式介绍 本程序实现浮点数(包括正负)的加、减、乘、除及开根号的功能。为了解决键盘按键不够用的问题,本设计加入了第二功能键,数字键没有第二功能,键a、b、c、d、e对应的第一功能依次为加、减、乘、除、清零,对应的第二功能依次为等于、退格、负号、小数点、开根号。f键为snd键。第二功能键按一次led6变亮表示键a、b、c、d、e处于第二功能状态,再按一下led6灭表示键a、b、c、d、e处于第一功能状态。加减乘除也有对应的状态显示led。当输入一个操作和操作符后,操作符对应的状态显示led变亮,直到输入第二个操作数和等号后操作符状态显示led才灭。led3对应的操作符是加,led4对应的操作符是减,led5对应的操作符是乘,led3和led4同时亮对应的操作符是除。加入状态显示使用者就可以通过操作符状态显示led很容易的的判断出当前输入的是第一个还是第二个操作数,并且在输入输入第二个操作数时能够根据操作符状态显示led判断出操作符。开根号只有一个操作数没有必要增加操作符状态显示。本设计考虑到等号是用第二功能键实现的,位了避免使用的不便本设计中当输入两个操作数和一个操作符后按加、减、乘、除键即a、b、c、d的第一功能键和按等号键具有同样的效果,都实现等号的功能。键盘功能简图如图3-1:图3-1计算器键盘功能简图由于仿真板只有8位数码管,所以输入的数据或计算结果最多只有8位(负数只能有7位),如果计算结果超出8位(或7位)则四舍五入到全屏显示即8位(或7位)。本程序的存储方式有别于常见的计算机存储方式(二进制、bcd码等),本程序采用每个字节存储一位十进制数。这样做是有一点浪费存储空间,但是这样的存储方式能够提高程序的执行效率。对于偏重于算法的程序cpu的利用效率一般要比内存的利用效率更重要一些,所以本程序采用了这种存储方式。3.2 主程序本程序设计采用模块化编程的思想,各功能模块都用子程序实现。模块化编程有如下优点:1,有效率的程序开发:使用模块化方法可以更快地开发程序,因为较小的子程序比大程序更容易理解、设计和测试。定义好模块的输入和输出之后,程序员可以给模块提供需要的输入,通过检测输出来判断模块的正确性。然后由连接器把分立的模块连接、定位,生成一个单一的绝对地址的可执行的程序模块。最后,测试整个模块。2,子程序可以重用:为一个程序编写的代码经常可以用于其它的程序。在模块化编程中,可以把这些部分保存起来,以备将来使用。因为代码可以被重定位,所以保存的模块可以连接到满足其输入和输出要求的任意程序中。而在单块程序编程中,这样的部分深埋在整个程序中,不易被其它的程序使用。3,便于调试和修改:模块化程序一般比单块程序易于调试。因为精心定义了程序的模块接口,很容易把问题定位到特定的模块。一旦找到了有问题的模块,更正问题就相当容易了。模块化编程可以简化程序修改的工作。可以很容易地把新的或调试过的模块连接到一个已有的程序,而不用更改程序的其余部分。主程序流程图如图32:图3-2 主程序流程图c语言主程序如下:void main()char jian; /*暂时存储键值*/char jsf; /*保存读数函数的返回值*/ cr=0x81; /*8255控制字*/ while(1) num_operand2=0;num_operand1=0;point2=0;point1=0;snd=0;operation=0;p1_4=1;p1_5=1;p1_6=1;p1_7=1; /*初始化 */for(temp1=0;temp116;temp1+) /*存储器清零 */ operand1temp1=0; temp_operandtemp1=0; operand2temp1=0;pa=0x3f; /*待机显示0 */pb=0x80;while(!askey();jian=skey(); while(1) jsf=dushu();if(jsf=0x00)jisuan();else break;while(!skey() display();if(key=0x0e) /*清零键按下 */break; 说明:程序中operand1为第一个操作数(包括被加数、被减数、被乘数、被除数),operand2为第二个操作数(包括加数、减数、乘数、除数)。计算结束后结果保存在operand2用于显示。operation保存操作符。本程序主要用到三个子函数,dushu子函数主要负责接收输入的数据(包括两个操作数和一个操作符),jisuan子函数根据操作符的值调用不同的计算子函数计算结果,display子函数用于显示操作数和结果。3.3 键盘子程序键盘程序的功能是接收识别键值并将键值存如变量key中。本设计采用的44键盘做为输入设备,键盘的8根线与pc口相连,pc口的低四位作为输出高四位作为输入。键盘的工作原理:pc0输出低电平,然后查看pc口高四位的电平,如果全是高电平说明第一列没有键按下,如果不全为高电平说明第一列有键按下。第几位不为高电平就说明该列的第几行的键被按下。用同样的方法检测后面的三列。为了提高程序的效率和可靠性,键盘程序必须加入一下几个部分:1,检查按键弹起部分:键盘程序结束后要检测按键弹起,如果没有弹起一直等待直到按键弹起才可一返回主程序。这样做可以防止按键一次被误识别为两次。2,去除键抖动部分:当检测到有键按下后,延时一段时间再做下一步的检测判断。键盘程序的流程图如图33:yyyy ynnn第一列有键按下返回零检测行值计算键值处理第二功能键松开?返回一显示n第一列有键按下第一列有键按下开始第一列有键按下图3-3 主程序流程图键盘子程序c语言源程序如下:char skey() char i,j,find,ini,inj; char atc4=0xef,0xdf,0xbf,0x7f; /*键盘扫描控制信号*/ char in; find=0; for(i=0;i4;i+) pc=atci; delay(3); in=pc; in=in4; in=in|0x0f; for(j=0;j4;j+) if(atcj=in) find=1; inj=j; ini=i; if(find=0) return 0;while(askey() /*键没释放一直显示*/display();key=ini*4+inj;if(key=9) /* 修改键值*/key=0;elseif(key=0x0a&key0) /*小数点处理*/ point2-; if(point10) point1-; while(operand2num_operand2-1=0) /*清除最高位的零*/ num_operand2-; while(operand1num_operand1-1=0) num_operand1-; duiqi(); if(point2=point1) xsd=point2-point1; temp=1; else xsd=point1-point2;temp=0;for(x=0;x0) num_operand2=x;point2=x-1-xsd;temp2=num_operand2;else num_opera

温馨提示

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

评论

0/150

提交评论