ImageVerifierCode 换一换
格式:DOC , 页数:31 ,大小:1.62MB ,
资源ID:2799702      下载积分:10 金币
快捷注册下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/2799702.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请

   平台协调中心        【在线客服】        免费申请共赢上传

权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。

注意事项

本文(简单计算器设计课程设计论文.doc)为本站上传会员【可****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

简单计算器设计课程设计论文.doc

1、 《单片机原理及应用》课程设计 简单计算器设计 The Design of Simple Calculator 院 系: 机电汽车工程学院 专 业: 机械设计制造及其自动化 姓 名: 学 号: 指导老师: 2014年6月30日 I 目 录 第一章 绪论 1 第二章 方案论证 2 2.1 芯片 2 2.1.1 方案构思 2 2.2 输入模块 2 2.2.1 方案构思 2 2.2.2

2、 方案比较与选择 3 2.3 显示模块 4 2.3.1 方案构思 4 2.3.2 方案比较与选择 5 第三章 计算器硬件设计 5 3.1 系统组成及硬件框图 5 3.2 元器件简介 5 3.2.1 STC89C52特点 5 3.2.2 LCD1602液晶显示屏 11 第四章 计算器设计原理分析 13 4.1 设计方案的确定 13 4.2 计算器硬件方案及硬件资源分配 14 4.2.1 硬件资源分配 14 4.2.2 系统的硬件设计 14 4.2.3 键盘电路的设计 15 4.2.4 显示电路的设计 16 第五章 计算器软件设计 17 4.1 计

3、算器的软件规划 17 4.2 主模块的程序设计 17 4.3 显示模块的程序设计 18 4.2 键盘模块的程序设计 19 参考文献 …………………………………………………………………20 结束语 …………………………………………………………………21 附录一 电路原理图………………………………………………………22 附录二 软件程序 ………………………………………………………23 附录三 元件清单 ………………………………………………………28 28 第1章 绪论 随着社会的发展,科学的进步,人们的生活水平在逐步地提高,尤其是微电子技术的发展

4、犹如雨后春笋般的变化。电子产品的更新速度快就不足惊奇了。计算器在人们的日常中是比较常见的电子产品之一,如何使计算器技术更加的成熟,充分利用已有的软件和硬件条件,设计出更出色的计算器,使其更好地为各个行业服务,成了如今电子领域重要的研究课题。 现如今,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店、办公室、学校……因此设计一款简单实用的计算器会有很大的实际意义。 本设计旨在进一步掌握单片机理论知识,理解嵌入式单片机系统的硬软件设计,加强对实际应用系统设计的能力。通过本设计的学习,使我掌握单片机程序设计和微机接口应用的基本方法,并能综合运用本科阶段所学软、硬件知识分析

5、实际问题,提高解决毕业设计实际问题的能力,为单片机应用和开发打下良好的基础。 对字符液晶显示模块的工作原理,如初始化、清屏、显示、调用及外特性有较清楚的认识,并会使用LCD(液晶显示模块)实现计算结果的显示;掌握液晶显示模块的驱动和编程,设计LCD和单片机的接口电路,以及利用单片机对液晶显示模块的驱动和操作; 在充分分析内部逻辑的概念,进行软件和调试,学会使用,并能够以其为平台设计出具有四则运算能力简易计算器的硬件电路和软件程序。 1.1 本文结构概述 本文主要从方案论证,计算器硬件设计,计算器设计原理分析以及计算器软件设计进行了概述。 第2章 方案论证 2.1 芯片 2

6、1.1 方案构思 本设计中的芯片可以采用STC89C52处理器,配备相应的外设。 单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机广泛应用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单、实用方便、价格便宜等优点。 而其中STC89C52RC是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM-Flash Programable and Era

7、sable Read Only Memory)的低电压,高性能COMOS8的微处理器。该器件与工业标准的MCS-51指令集和输出管脚相兼容;且是单片机中最典型的代表,应用于各种控制领域。 从设计的实用性、方便性和成本等诸多方面考虑,最终选择了以STC89C52RC单片机作为中央处理单元进行计算器的设计,这样设计能够实现对六位整数、两位小数的加、减、乘、除的四则运算。 2.2 输入模块 2.2.1 方案构思 1、方案一:采用独立式按键作为输入模块 独立式按键输入模块,其特点是:直接用I/O口构成单个按键电路,接口电路配置灵活、按键识别和软件结构简单;但是当键数较多时,占用I/O

8、口较多,比较浪费资源。其原理图如图1-2-1所示。 图 2-2-1 独立的功能按键 2、方案二:采用矩阵式键盘作为输入模块 矩阵式按键输入模块,其特点是:电路和软件稍复杂,但相比之下,当键数越多时,越节约I/O口,比较节省资源。其原理图如图1-2-2所示。 图 2-2-2 矩阵键盘输入 2.2.2 方案比较与选择 本设计中的输入模块使用的是矩阵键盘输入。 键盘输入预置用于计算,按键较多。若是采用独立按键,需频繁按键,为软件设计增加负担,且操作界面不友好;若是采

9、用矩阵式按键,可以方便地输入一个数值,使操作界面更具有人性化,且节约了宝贵的I/O口资源。 通过对比,故采用方案二作为系统输入模块。 2.3 显示模块 2.3.1 方案构思 1、方案一:采用LED数码管静态显示 采用LED数码管的静态显示,其特点是:其亮度较高;这种显示方式接口,编程容易且管理简单;不足的是,占用的I/O的线资源较多。如果采用单片机或CPLD/FPGA来控制的话,势必存在浪费I/O口资源的问题。如图1-3-1所示。 图 2-3-1 4位数码管静态显示 2、方案二:采用LED数码管动态显示 采用LED数码管的动态显示,其特点是:其亮度比静态显示的亮度要差

10、一些;但其电路比较简单,适合于显示位数较多的情况。如图1-3-2所示。 图 2-3-2 4位数码管的动态显示 3、方案三:采用LCD1602液晶显示 采用LCD1602液晶显示,其特点是:可以调节其背光亮度,这种显示方式接口,编程虽然有些麻烦,但管理较方便,占用的I/O口资源线也不多。 2.3.2 方案比较与选择 本设计中的显示模块使用的是LCD1602液晶显示。 在计算器运算中,需显示的数字、符号较多,按很据个方面的特点,而后可以发现LCD液晶显示,虽然在价格上的确是稍贵于LED数码管;但数码管在硬件设计电路中,会因线太多、线路复杂而过于繁琐,则舍弃LED数码管,选择LCD

11、液晶显示。 通过对比,故采用方案三作为系统显示模块。 第3章 计算器硬件设计 3.1 系统组成及硬件框图 显示模块 单 片 机 振荡电路 4*4键盘模块 复位电路 图3-1-1 系统组成及硬件框图 3.2 元器件简介 3.2.1 STC89C52特点 1、主要性能: 1) 与MCS-51单片机产品兼容; 2) 8K字节在系统可编程Flash存储器; 3) 1000次擦写周期; 4) 全静态操作:0Hz-33Hz; 5) 三级加密程序存储器; 6) 32个可编程I

12、/O口线、三个16位定时器/计数器、8个中断源; 7) 全双工UART串行通信; 8) 低功耗空闲和掉电模式,掉电后中断可唤醒; 9) 看门狗定时器; 10) 双数据指针; 11) 掉电标识符。 2、STC89C52的功能特性概述 STC89C52是一种低功耗、高性能CMOS 8位微控制器,具有8K在系统可编程Flash存储器。使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。 在单芯片上,拥有灵巧的8位CPU和在线系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超

13、有效的解决方案。 STC89C52具有以下标准功能:8K字节Flash,256字节RAM,32位I/O口线,看门口定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。 另外,STC89C52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。8位微控制器,8K字节在系统可编程Flash。同时,该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的

14、需求。 3、STC89C52RC的引脚功能 单片机STC89C52RC为40引脚芯片,见图3-2-1。 图 3-2-1 STC89C52RC引脚图 (1) 口线:P0、P1、P2、P3共四个八位口。 P0口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。 对P0端口写“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。 在Flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1口:P1口是一个具有内部

15、上拉电阻的8位双向I/O口,P1输出缓冲器能驱动4个TTL逻辑电平。对P1端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用;作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。在Flash编程和校验时,P1口接收低8位地址字节。 此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。 P2口:P2口是一个具有内部上拉电阻的8位双向I/O口,P2输出缓冲器能驱动4个TTL逻辑电平。对P2端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用;作为输入使用时,被外部拉低的引脚

16、由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2口送出高八位地址。在这种应用中,P2口使用很强的内部上拉发送1。 在使用8位地址(例如MOVX @RI)访问外部数据存储器时,P2口输出P2锁存器的内容。在Flash编程和校验时,P2口也接收高八位地址字节和一些控制信号。 P3口:P3口是一个具有内部上拉电阻的8位双向I/O口,P3输出缓冲器能驱动4个TTL逻辑电平。对P3端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用;作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(

17、IIL)。 P3口亦作为STC89C52特殊功能(第二功能)使用,如表3-2-1所示。在Flash编程和校验时,P3口也接收一些控制信号。 端口引脚 第二功能 P3.0 RXD(串行输入口) P3.1 TXD(串行输出口) P3.2 INT0(外部中断0) P3.3 INT1(外部中断1) P3.4 T0(定时/计数器0) P3.5 T1(定时/计数器1) P3.6 WR(外部数据存储器写选通) P3.7 RD(外部数据存储器读选通) 表 3-2-1 STC89C52的P3口第二功能 (2)其他引脚说明: RST:复位输入。晶振工作时,RST脚持

18、续2个机器周期高电平将使单片机复位。看门狗计时完成后,RST脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRT0位可以使此功能无效。DISRT0默认状态下,复位高电平有效。 ALE/PROG:当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于所存地址的低八位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。 对Flash存储器编程期间,该引脚还用于输入编程脉冲(PROG)。 如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的

19、D0位置位,可禁止ALE操作。该位置位后,只要一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被拉高,单片机执行外部程序时,应设置ALE禁止位无效。 PSEN:程序存储允许(PSEN)输出是外部程序存储器的读选通信号,当STC89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲;在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP:外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H~FFFFH),EA端必须保持低电平(接地)。需注意是:如果加密LB1被编程,复位时内部会锁存EA端状态。 如EA端为高电平(接Vc

20、c端),CPU则执行内部程序存储器的指令。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 图3-2-2 晶振外接结构引脚图 XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为1MHz,时钟频率就为6MHz。晶振的频率可以在1MHz~24MHz内选择,在本设计电路中选用了12MHz。电容取20PF左右。机器周期=12*时间周期,如12MHz的机器周期为1微秒。 (3)控制或复位引脚 RESE

21、T此脚为高电平时(约2个机器周期)可将单片机复位。 RST/VPD:当出现两个机器周期高电平时,单片机复位。复位后,P0~P3输出高电平;SP寄存器为07H;其它寄存器全部清零;不影响RAM状态,如图3-2-3所示。 图 3-2-3 复位电路 4、单片机的现状及发展方向 单片机是为了工业控制需要满足而诞生的,是自动控制系统的核心部件,因而也主要用于工业控制、智能化仪器仪表、家用电器中。它具有体积小、功能多、价格低、使用方便、系统设计灵活等优点。应用领域不断扩大,除了工业控制、智能化仪表、通讯、家用电器外,在智能化高档电子玩具产品中也大量采用单片机芯片作为核心

22、控制部件。 由于单片机主要面向工业控制,工作环境比较恶劣,入高温,强电磁干扰,甚至含有腐蚀性气体;在太空中工作的单片机控制系统,还必须具有抗辐射能力,这决定了单片机CPU于通用微机CPU具有不同的技术特征和发展方向: 1) 可靠性高; 2) 控制功能往往很强; 3) 指令系统比通用微处理器慢得多; 4) X系列芯片取代; 5) 抗干扰性强,工作温度范围宽。 3.2.2 LCD1602液晶显示屏 1、液晶显示原理 液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色

23、显示的特点,目前已经被广泛应用在便携式计算机、数字摄像机、PDA移动通信工具等众多领域。 2、LCD1602的应用简介 LCD1602液晶显示器采用HD44780及其兼容芯片作为点阵式LCD的控制器驱动器,还采用HD44100进行LCD的时分割驱动。HD44780的内部结构主要包括显示数据RAM(DDRAM)、字符发生器ROM(CGROM)、字符发生器RAM(CGRAM)、指令寄存器IR、数据寄存器DR、地址计数器AC(Address Counter)和忙标志BF(Busy Flag)等逻辑电路。 1602液晶模块内部的控制器共有11条控制指令,丰富的指令可以完成液晶的时序控制、工作方式

24、设置和数据显示等。 采用的LCD1602液晶模块是标准16针插座,接口电路如图3-2-4所示,及各引脚说明如表3-2-2所示。 图3-2-4 LCD1602的引脚接口电路图 表 3-2-2 LCD1602的引脚说明 3、其他方面简介 DDRAM用来暂存显示字符的代码,共80个字节,DDRAM的各个单元对应着显示屏上的各个字符位,如图3-2-5所示。因此,DDRAM的地址也就意味着显示字符的地址,显示字符时首先要向LCD送显示字符地址。 LCD 16字*2行 00 01 02 03 04

25、 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 ... 27 40 41 42 43 44 45 46 47 48 49 5A 5B 5C 5D 5E 5F 50 ... 67 图 3-2-5 DDRAM单元地址与显示屏字符位的对应关系 4、LCD1602的主要技术参数: (1)显示容量为16*2个字符; (2)芯片工作电压为4.5V-5.5V; (3)工作电流为2.0mA(5.0V); (4)模块最佳工作电压为5.0V; (5)字符尺寸为2.95*4.35(W*H)mm。 5、LCD

26、的特点: (1)低压微功耗; (2)平板型结构; (3)被动显示型(无眩光,不刺激人眼,不会引起眼睛疲劳); (4)显示信息量大(因为像素可以做得很小); (5)易于彩色化(在色谱上可以非常准确的复现); (6)无电磁辐射(对人体安全,利于信息保密); (7)长寿命(这种器件几乎没有什么劣化问题,因此寿命极长,但是液晶背光寿命 有限,不过背光部分可以更换)。 第4章 计算器设计原理分析 4.1 设计方案的确定 本设计需要使用LCD液晶显示屏和编码键盘。故选择静态显示和用4*4的按键键盘,使用LCD1602液晶显示屏来显示运算过程和运算结果。 主程序进行初始化,其他的程序选

27、择模块式的方式。首先对每个模块进行调试,当模块调试成功后,逐一地加入主程序中,最后完成整个软件部分的设计。 4.2 计算器硬件方案及硬件资源分配 4.2.1 硬件资源分配 主要用到的硬件:单片机STC89C52 RC、液晶显示屏LCD1602 、4*4按键键盘 硬件分配: 1、 P1口:作为输入口,与键盘连接,实现数据的输入; 2、 P0、P2口:作为输出口(P2口为高位,P0口为低位),控制LCD液晶显示屏显示数据的结果; 3、液晶显示屏LCD1602显示输出。 4.2.2 系统的硬件设计 为了更好地实现系统的功能,硬件电路的设计应该遵循以下原则: 1、优化硬件电路

28、 采用软件设计与硬件设计相结合的方法。尽管采用软件来实现硬件系统的功能时,也许响应的时间会比单纯使用硬件时长,而且还要占用微处理器(MCU)的时间;但是,用软件实现硬件的功能可以简化硬件结构,提高电路的可靠性。所以,在设计本系统的时候,在满足可靠性和实时性的前提下,尽可能地通过软件来实现硬件功能。 2、可靠性及抗干扰设计 根据可靠性设计理论,系统所用芯片数量越少,系统的平均无故障时间越长。而且,所用芯片数量越少,地址和数据总线在电路板上受干扰的可能性也就越小。因此,系统的设计思想是在满足功能的情况下争取较少数量的芯片。 3、灵活的功能扩展 功能扩展是否灵活是衡量一个系统优劣的重要指标。

29、一次设计往往不能完全考虑到系统的各个方面,系统需要不断完善以及进行功能升级。进行功能扩展时,应该在原有设计的基础上,通过修改软件程序和少量硬件完成。对于本系统而言,就是要求在系统硬件不变的情况下,能够通过修改软件程序,完成功能的升级和扩展。 根据提出的系统设计方案,结合以上三条原则,确定了系统硬件的设计。计算器主要由以下一些功能模块组成:非编码键盘模块、运算模块(单片机内部)、LCD液晶显示模块等。 该系统的硬件设计采用了模块化的设计方法。STC89C52RC单片机与LCD液晶显示屏显示电路是整个电路的核心,它们能实现系统的功能要求。 简易计算器主要包括:键盘电路、运算电路、输出显示电路

30、 总体硬件结构电路图可见附录一。 前面说明了该系统的设计,系统采用了比较简单的设计方案,所以该系统的硬件设计的总外围电路不会产生过多的干扰。下面对系统的外围电路分别作了说明。键盘部分采用4*4按键键盘,显示部分采用LCD液晶显示屏完全能够很好地实现显示方面的要求。 4.2.3 键盘电路的设计 键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合;当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。 通用计算机使用的键盘就是编码键盘。在智能仪器中,使用并行接口芯片8279或串行接口HD7279均可以组成编码

31、键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。 非编码键盘成本低廉。从成本角度出发,本设计选用的是非编码键盘。如图 4-2-1所示。 图 4-2-1 键盘电路 4.2.4显示电路的设计 当系统需要显示少量数据时,采用LCD液晶显示屏进行显示是一种经济实用的方法。P0口作为液晶显示的数据端口,P2.5-P2.7口作为其控制端口,控制LCD液晶显示屏显示输出数据。 最终显示电路如图4-2-2所示。 图3-2-2 LCD液晶显示屏显示 第5章 计算器软件设计 5.1

32、 计算器的软件规划 简易计算器的程序主要包括以下功能模块: 1. 读键程序、判键程序段、运算操作子程序等部分; 2. 基于LCD液晶显示屏的显示模块; 3. 主模块,为系统的初始化。 5.2 主模块的程序设计 主程序主要用来对LCD液晶显示屏进行初始化的。 在考虑主程序编写之前,先应对计算器的运作流程有一个大致的了解,之后依次为依据画出大致的流程图(如图5-2-1),以便于编写其主模块的程序,这样看来,会比较清晰、更加方便。 图 5-2-1 主程序框图 在主程序中的确不用中断服务,它其实也属于一个子程序,是与键盘程序有关,之后会加以说明。 既然是计算器,只要

33、反复地进行四则运算,其过程与结果并在液晶显示屏上显示出来。 在的程序中“write_cmd(0x80);”,被赋值为“0x80”,则是根据图 3-2-6 DDRAM单元地址与显示屏字符位的对应关系中便能找到,第一行第一个单元的值为80H,则第二行第一个单元的值就为80H+40H,即得出“write_cmd(0x80+0x40);”。 4.3 显示模块的程序设计 显示模块程序首先要对显示模块进行初始化;然后控制光标的位置;定义液晶显示的控制端口,用SBIT指令完成;然后设置清屏、关闭显示、归位、开显示、显示位置的首地址等等。 显示模块的流程图如图5-3-1所示 图 5-3-1

34、显示程序框图 通过其显示子程序,发现要显示其最终结果,就必须先存放第一操作数、第二操作数,之后来判定使用四则运算中的哪一种运算,其后进行运算处理,最后便能在LCD液晶显示屏上显示其最终结果。 4.4 键盘模块的程序设计 键盘扫描子程序,首先读出P1口的低四位,然后读出P1口的高四位。然后键值并显示缓存。而后,将键盘上的值转换为ASCII码,最后就可以用软件来设置硬件按键各个键所代表的内容。 读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。 系统

35、中连接的是4*4行列式按键键盘,其中“0-9”为数字键;“+、-、*、/、=”为符号键;“ON/C”为功能键(清屏键),在程序中会加入一个记忆功能键,而与其搭配的硬件按键为符号键中的“=”,以为求方便。 数字键按下则将相应的数字送入数字缓冲区;符号键按下则将送入符号缓冲区;功能键按下则执行相应的程序;最终进行运算后,综合结果将送入结果缓冲区,并在LCD液晶显示屏上显示出来。 键盘模块程序也可相当于一个中断服务子程序,如图5-4-1所示。 图 5-4-1 中断服务程序框图 参考文献 [1] 胡辉.单片机原理与应用.北京:北京水利水电出版社,2007. [2] 张友德、赵金

36、英、涂时亮.单片微型计算机原理、应用与实验(第四版)[M].上海:复旦大学出版社,2003. [3] LCD液晶显示器. [4] LED与LCD显示器的区别. [5] 单片机的简易计算器. [6] 彭传良.电子计算器键盘与单片机的接口技术及其应用[J]. 气象水文海洋仪器 ,1999(02):40-44. [7] 张庆锋. 计算器LCD显示屏与单片机的简单接口[J] .电子技术应用,1996(02):23-25. 结束语 在本次课程设计中,我学到了很多很多知识,在这个过程中电路设计部分一共设计了超过四个电路,从中不断设计不断否定,最终确定了本电路图。刚开始

37、时采用4片8255a外扩引脚,但是后来考虑到各方面问题最终否定了;后来又设计了2个电路,但是考虑到相关问题又被否定。在硬件的制作过程中,我走了很多弯路。主要是在系统还没有到设计完全的时候就开始很心急地买元器件及动手焊板子。后来发现与设计的要求还有偏差,而后反复地改了好几次,浪费了大量的时间和精力。 板子按照自己的设计焊完之后,应开始设计自己的软件程序了。一开始,本想用汇编语言来编程的,可是当编了一部分之后才发现,用汇编语言来编程的话,相当繁复冗长;之后就想试着用C语言来编程。在图书馆查阅了一些相关资料后,就开始写程序。在编写程序的过程中,发现硬件居然出现了不少问题。所以,在编写程序的过程中,

38、也就完善了硬件的设计。 编程时,已充分使用了结构化的思想。这样一来,因为语句较少,程序调试也比较方便,功能模块可以逐一地调试,充分体现了结构化编程的优势。当每个模块都完成时,将其功能加到一起就完成了整体的设计。 电路板焊接是由我来完成的,在焊接过程中遇到了大量的问题,其中最大的体会是,仿真软件中可以实现的在真实电路上不一定可以实现,这是我最大的体会,焊接容易,若焊接后无法实现功能这才是最头痛的事。在购买元件时,不一定每一个元件都是完好的,我买了一块LCD1602,结果是坏的,查了好几天才查出来。 个人认为,本次设计结果并不重要,重要的是其中的过程。

39、 附录一 电路原理图 附录二 软件程序 /*---/*------------------------------- -------------------------------*/ #include //包含头文件 #include //包含库文件 #define uchar unsigned char #define uint unsigned int #include"LCD_1602.h" //包含液晶屏显示

40、文件 #include //包含标准函数库中的头文件 #include //标准库头文件 //extern void key_scan(void); 以下表示函数声明 extern void init(); extern void LCD_dsp_string(unsigned char X,unsigned char Y,unsigned char *s); extern void LCD_dsp_char( unsigned x,unsigned char y,unsigned char dat); extern

41、void write_com(unsigned char com); void caculate(void); extern unsigned char n; unsigned char n,i; unsigned char idata expression[16]; //存储表达式 float idata a,b; void delay(unsigned int m) //延时函数 { unsigned int n; for(n=0;n<=m;n++); } void key_scan(void) //4*4按键扫描函数

42、 { unsigned char temp; P1=0xfe; //扫描是否第四行按键按下 if(P1!=0xfe) { delay(200); if(P1!=0xfe) //扫描第四行按键 { temp=P1&0xf0; switch(temp) //判断是那一个列 { case 0xe0:n='c';break; //如果按下C键 结束 case 0xd0:n='0';break; //如果按下0键

43、结束 case 0xb0:n='=';break; //如果按下=键 结束 case 0x70:n='+';break; //如果按下+键 结束 } } while(P1!=0xfe); } else { P1=0xfd; //扫描是否第三行按键按下 if(P1!=0xfd) { delay(200); if(P1!=0xfd) { temp=P1&0xf0; //判断是那一个列 swit

44、ch(temp) { case 0xe0:n='1';break; //如果按下1键 结束 case 0xd0:n='2';break; //如果按下2键 结束 case 0xb0:n='3';break; //如果按下3键 结束 case 0x70:n='-';break; //如果按下-键 结束 } } while(P1!=0xfd); } else{ P1=0xfb; //扫描是否第二行按键按下 if(P1

45、0xfb) { delay(200); if(P1!=0xfb) { temp=P1&0xf0; //判断是那一个列 switch(temp) { case 0xe0:n='4';break; //如果按下4键 结束 case 0xd0:n='5';break; //如果按下5键 结束 case 0xb0:n='6';break; //如果按下6键 结束 case 0x70:n='*';break; //如果按

46、下*键 结束 } } while(P1!=0xfb); } else{ P1=0xf7; if(P1!=0xf7) //扫描是否第二行按键按下 { delay(200); if(P1!=0xf7) { temp=P1&0xf0; switch(temp) //判断是那一个列 { case 0xe0:n='7';break; //如果按下7键 结束 case 0xd0:n='8';break;

47、 //如果按下8键 结束 case 0xb0:n='9';break; //如果按下9键 结束 case 0x70:n='/';break; //如果按下/键 结束 } } while(P1!=0xf7); } else n=17; //否则就是没有按键按下 }}} } /*********主函数*******/ void main(void) { char idata temp[16]; char i=0,j=0,fuhao; bi

48、t flag=0,dh=0,fh=0,xsd=0; //以上是变量定义 init(); //初始化 LCD_dsp_string(0,0,"0"); //在屏幕的左上角显示0 while(1) { key_scan(); //调用按键扫描函数 if((dh==1)&(flag==1)&(n!=17)) { write_com(0x01); //清屏 LCD_dsp_string(0,0,temp); //将输入的数据从第一行第一列显示 j=0; i=0; f

49、lag=0; //请标志位 fh=0; //请符号位 while(temp[i++]!='\0') j++; //循环显示输入的数字 } if((i==0)&(n=='-')&(fh==0)) //以下表示输入的是负数 { fh=1; //请符号位 temp[0]='-'; //将符号temp字符串 i++; LCD_dsp_char(j++,0,n); //液晶屏显示负号 if(flag==0) continue; } if(((n>='0')&(n<='9')|((n=='c')&(xsd==0)))&(dh==0)) //当输入0-9时,如果按下C键 表示如数的是小数点 { if(n=='c') //当按下C键后 { //显示小数点 n='.'; xsd=1;

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服