基于51单片机设计建议计算器毕业论文代码已验证_第1页
基于51单片机设计建议计算器毕业论文代码已验证_第2页
基于51单片机设计建议计算器毕业论文代码已验证_第3页
基于51单片机设计建议计算器毕业论文代码已验证_第4页
基于51单片机设计建议计算器毕业论文代码已验证_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

1、简易计算器的设计摘 要近几年单片机技术的发展很快,其中,电子产品的更新速度迅猛。计算器是日常生活中比较常见的电子产品之一。如何才能使计算器技术更加的成熟,充分利用已有的硬件和软件条件,设计出更出色的计算器。本文介绍的计算器是以单片机为核心设计的一个通用计算器。程序编写采用keil软件,把整个系统划分成模块,各个模块分别仿真,最后添加到主程序中。该系统通过检测矩阵键盘扫描,判断是否按键,经数据转换把数值送入液晶显示屏1602显示,该计算器能实现加、减、乘除以及连加连减等功能;能显示整个计算过程;操作的过程以及相应的显示和日常生活中所用的通用计算器一样。主要内容可以分为:基于单片机简易计算器的基本

2、功能,同时对矩阵键盘及液晶显示屏显示原理进行了简单的阐述;介绍了系统的总体设计、给出了系统的整体流程框图,并对其进行了功能模块划分及所采用的元器件进行了详细说明;利用单片机来设计电子计算器比较简单,而且单片机的计算速度完全能够满足本设计的要求。计算器的未来是小型化和轻便化,现在市面上出现的使用太阳能电池的计算器,使用ASIC设计的计算器,如使用纯软件实现的计算器等,智能化计算器将是未来的发展方向。 关键词:计算器,单片机,计算,键盘,液晶显示屏,仿真 The Design of Simple CalculatorABSTRACTSocial development is very fast;

3、in aneraofrapidtechnologicalchange, Calculatorhas been in thousands of householdsfor decades,the calculator has a history of one hundred years.This paperintroduces thecalculatoris based on SCMas a general-purpose calculatorcore design.The program is written by keilsoftware,the wholeis divided intomo

4、dules,and simulation,finallyadded to themain program. The detection of matrix keyboard is scanned, the data conversion to put into 1602 LCD display, the calculator can be achieved, subtraction, multiplication and division, and even added a reduction function; can display the whole calculation proces

5、s; general calculator operation of the process and the corresponding display and in daily life. The main content can be divided into:Thebasicfunction of single chip microcomputerbased onsimple calculator,the matrix keyboard andLCD displayprinciple isdescribed;The systemgives the wholeprocessof the s

6、ystem diagram,and has carried on thedivision of function modulesand componentsusedin detail.To designcalculatoris simpleby using single chip microcomputer,and the speed of MCU can meets the requirements of the design, the calculatoris the future of theminiaturization andlightweight, the calculator a

7、ppeared on the marketusing cells,using ASIC to design thecalculator,such as the use ofpure software implementation of thecalculator.KEY WORD:Calculator, SCM,calculation, keyboard,LCD display,Simulation目 录 TOC o 1-3 h z HYPERLINK l _Toc389826909 前 言 PAGEREF _Toc389826909 h 1 HYPERLINK l _Toc389826910

8、 第1章 绪论 PAGEREF _Toc389826910 h 2 HYPERLINK l _Toc389826911 研究背景 PAGEREF _Toc389826911 h 2 HYPERLINK l _Toc389826912 单片机发展现状 PAGEREF _Toc389826912 h 2 HYPERLINK l _Toc389826913 计算器系统现状 PAGEREF _Toc389826913 h 3 HYPERLINK l _Toc389826914 选题意义及现状 PAGEREF _Toc389826914 h 4 HYPERLINK l _Toc389826915 设计概

9、要任务指标 PAGEREF _Toc389826915 h 4 HYPERLINK l _Toc389826916 一、设计目标 PAGEREF _Toc389826916 h 4 HYPERLINK l _Toc389826917 二、设计任务指标 PAGEREF _Toc389826917 h 4 HYPERLINK l _Toc389826918 系统总体设计方案 PAGEREF _Toc389826918 h 5 HYPERLINK l _Toc389826919 第2章 硬件设计 PAGEREF _Toc389826919 h 6 HYPERLINK l _Toc389826920

10、元器件介绍 PAGEREF _Toc389826920 h 6 HYPERLINK l _Toc389826921 单片机简介 PAGEREF _Toc389826921 h 6 HYPERLINK l _Toc389826922 2.2 LCD1602液晶显示屏 PAGEREF _Toc389826922 h 9 HYPERLINK l _Toc389826923 设计方案比较及确定 PAGEREF _Toc389826923 h 11 HYPERLINK l _Toc389826924 模块设计 PAGEREF _Toc389826924 h 12 HYPERLINK l _Toc3898

11、26925 键盘输入模块的设计方案及确定 PAGEREF _Toc389826925 h 12 HYPERLINK l _Toc389826926 2.4.2 LCD显示模块设计方案比较及确定 PAGEREF _Toc389826926 h 13 HYPERLINK l _Toc389826927 清零、开平方、开立方功能模块设计 PAGEREF _Toc389826927 h 15 HYPERLINK l _Toc389826928 电源模块设计 PAGEREF _Toc389826928 h 16 HYPERLINK l _Toc389826929 第3章 软件设计 PAGEREF _To

12、c389826929 h 17 HYPERLINK l _Toc389826930 外围程序模块设计 PAGEREF _Toc389826930 h 18 HYPERLINK l _Toc389826931 显示程序设计 PAGEREF _Toc389826931 h 18 HYPERLINK l _Toc389826932 键盘扫描程序设计 PAGEREF _Toc389826932 h 18 HYPERLINK l _Toc389826933 清零程序设计 PAGEREF _Toc389826933 h 19 HYPERLINK l _Toc389826934 开方、平方、立方程序设计 P

13、AGEREF _Toc389826934 h 20 HYPERLINK l _Toc389826935 第4章 系统仿真及验证 PAGEREF _Toc389826935 h 21 HYPERLINK l _Toc389826936 结论 PAGEREF _Toc389826936 h 27 HYPERLINK l _Toc389826937 参考文献 PAGEREF _Toc389826937 h 28 HYPERLINK l _Toc389826938 致谢 PAGEREF _Toc389826938 h 30 HYPERLINK l _Toc389826939 附录 PAGEREF _T

14、oc389826939 h 31前 言随着社会的不断发展科技的不断创新。计算器已在数十年间遍布千家万户对于计算器的百年历史,1946年2月15日在美国宾夕法尼亚大学世界上第一台电子计算器ENIAC正式投入了运行。在隆重的揭幕仪式上ENIAC表演了它的“绝招”在1秒钟内进行5000次加法运算,在1秒钟内进行500次乘法运算,这比当时最快的电子计算器的运算速度要快1000多倍。全场起立欢呼科学技术进入了一个新的历史发展时期。 数学家把聪明赋予了电子计算器,电子计算器将使数学家变得更加聪明。而且电子计算器不仅是一种工具,它与其它的工具都不相同,电子计算器是人脑的一个侧面的延伸。因为电子计算器不仅具有

15、非凡的计算能力,速度之快令人望尘莫及而且还能够仿真人的某些思维功能按照一定的规则进行逻辑判和逻辑推理代替人的部分脑力劳动。1976年数学家凭借电子计算器去证明四色定理“依靠机器完成了人没有能够完成的事情”轰动了整个国际数学界。 本次做的计算器是以单片机AT89S52为核心结合相关的元器件LCD1602液晶、74ls373锁存、6264RAM、矩阵键盘等再配以相关的软件达到制作计算器的目的。该系统通过单片机控制,实现对5*5键盘扫描进行实时的按键检测,并把检测数据存储下来。整个计算器系统的工作过程为:首先存储单元初始化,显示初始值和键盘扫描,判断按键位置,查表得出按键值,单片机则对数据进行储存与

16、相应处理转换,之后送入显示屏显示。整个系统可分为三个主要功能模块:功能模块一,实时键盘扫描;功能模块二,数据转换为了显示屏显示;功能模块三,显示屏显示。电子计算器是日常生活中常用的电子计算仪器广泛应用于超市、大中型商场、大小企业。电子计算器具有精度高、体积小、应用范围广、易于操作使用等优点。科技的进步使计算器告别了以前复杂的模拟电路,计算器的未来是小型化和轻便化,一块几厘米平方的单片机可以省去很多繁琐的电路。未来的智能化计算器将是我们的发展方向,所以对计算器的研究十分有意义。绪论研究背景单片机发展现状单片机的发展现状:使用寿命长;低电压与低功耗化;发展速度越来越快;从 8 位、16 位到 32

17、 位,数不胜数,应有尽有,部分与主流C51系列兼容,部分与之不兼容,它们各具特色,互补互成。纵观单片机的发展历史,其有如下发展趋势:1. 大容量、高性能以往单片机内的ROM为1KB4KB,RAM 为64128B。但在需要复杂控制的场合,该存储容量是不够的,必须进行外接扩充。为了适应这种领域的要求,须运用新的工艺,使片内存储器大容量化。目前,单片机内ROM 最大可达64KB,RAM 最大为2KB。另外单片机进一步改变CPU的性能,加快指令运算的速度和提高系统控制的可靠性。采用精简指令集(RISC)结构和流水线技术,可以大幅度提高运行速度。现指令速度最高者已达100MIPS(Million Ins

18、truction Per Seconds,即兆指令每秒),并加强了位处理、中断和定时控制功能。这类单片机的运算速度比标准的单片机高出10 倍以上。由于这类单片机有极高的指令速度,可以使用软件模拟其I/O 功能,由此引入了虚拟外设的新概念。2. 串行扩展技术在很长一段时间里,通用型单片机通过三总线结构扩展外围器件成为单片机应用的主流结构。随着低价位OTP(One Time Programble)及各种特殊类型片内程序存储器的发展,加之处围接口不断进入片内,推动了单片机“单片”应用结构的发展。特别是I2C、SPI 等串行总线的引入,可以使单片机的引脚设计得更少,单片机系统结构更加简化及规范化。3.

19、 低功耗CMOS化MCS-51系列的8031推出时的功耗达630mW,而现在的单片机普遍都在100mW左右,随着对单片机功耗要求越来越低,现在的各个单片机制造商基本都采用了CMOS(互补金属氧化物半导体工艺)。80C51就采用了HMOS(即高密度金属氧化物半导体工艺)和CHMOS(互补高密度金属氧化物半导体工艺)。CMOS虽然功耗较低,但由于其物理特征决定其工作速度不够高,而CHMOS则具备了高速和低功耗的特点,这些特征,更适合于在要求低功耗,电池供电的应用场合。所以这种工艺将是今后一段时期单片机发展的主要途径。4. 微型单片化现在常规的单片机普遍都是将中央处理器(CPU)、随机存取数据存储(

20、RAM)等集成在一块单一的芯片上,增强型的单片机集成了如A/D转换器、PMW(脉宽调制电路)等都集成在单一的芯片上,这样单片机包含的单元电路就更多,功能就越强大。甚至单片机厂商还可以根据用户的要求量身定做,制造出具有自己特色的单片机芯片。 此外,现在的产品普遍要求体积小、重量轻,这就要求单片机除了功能强和功耗低外,还要求其体积要小。现在的许多单片机都具有多种封装形式,其中SMD(表面封装)越来越受欢迎,使得由单片机构成的系统正朝微型化方向发展。5. 主流与多品种共存现在虽然单片机的品种繁多,各具特色,但仍以80C51为核心的单片机占主流,兼容其结构和指令系统的有PHILIPS公司的产品,ATM

21、EL公司的产品和中国台湾的Winbond系列单片机。所以C8051为核心的单片机占据了半壁江山。而Microchip公司的PIC精简指令集(RISC)也有着强劲的发展势头,中国台湾的HOLTEK公司近年的单片机产量与日俱增,与其低价质优的优势,占据一定的市场分额。此外还有MOTOROLA公司的产品,日本几大公司的专用单片机。在一定的时期内,这种情形将得以延续,将不存在某个单片机一统天下的垄断局面,走的是依存互补,相辅相成、共同发展的道路。计算器系统现状计算器一般由存储器、键盘和机器设备等组成。键盘是计算器的输入部件,一般采用接触式或传感式。为减小计算器的尺寸,一键常常有多种功能。显示器是计算器

22、的输出部件,有发光二极管显示器或液晶显示器等。除显示计算结果外,还常有溢出指示、错误指示等。计算器电源采用交流转换器或电池,电池可用交流转换器或太阳能转换器再充电。为节省电能,计算器都采用CMOS工艺制作的大规模集成电路,并在内部装有定时不操作自动断电电路。选题意义及现状计算器(calculator;counter)一般是指“电子计算器”,该名词由日文传入中国。计算器是能进行数学运算的手持机器,拥有集成电路芯片,结构简单,功能较弱,但由于它使用方便、操作简单、价格低廉,因而广泛运用于商业交易中,也是必备的办公用品之一。随着科学技术的不断发展及计算器应用的普及,人们发现在工业控制中,有很多时候需

23、要在恶劣的环境中进行各种数据的采集、运算和控制。设计概要任务指标设计目标以单片机为核心完成一个通用计算器系统的设计。该计算器能实现加、减、乘除以及连加连减等功能;能显示整个计算过程;操作的过程以及相应的显示和日常生活中所用的通用计算器一样,计算结果要正确。设计任务指标1. 计算器功能(包含:加、减、乘、除、开平方、开立方、开根号和倒数)。 2. 正负切换功能。3. 可实现清除、归零、后退等操作。4. 可进行连续运算。最高数据精度0.001,最后位可实现四舍五入。5. LCD显示。系统总体设计方案整个系统由电源给51单片机和LCD液晶显示提供电源使其工作,当外接按键输入有效数值和运算模式时,通过

24、主控芯片实现整个系统的功能。系统总体方案框图如图1-1。显示模块输入数据AT89S52单片机输入运算符电源模块图1-1总体模块图硬件设计元器件介绍单片机简介图2-1 单片机AT89S521. AT89S52的功能特性描述:AT89S52 是一种低功耗、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活

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

26、式,以适应不同产品的需求。2. AT89S52引脚功能AT89S52 单片机为40 引脚芯片见图2-2。图2-2 AT89S52引脚图P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX),具体如下表所示。 在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能: P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用)3. P2口:

27、P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 4. 其他引脚说明:RST复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完

28、成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。 EA/VPP外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。 如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。 FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是使用12V编程电压Vpp。XTAL1反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2来自反向振荡

29、器的输出。 XTAL1,XTAL2接石英晶体振荡器。如图2-3所示外接晶体引脚图。图2-3 外接晶体引脚图XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择,在本设计电路中选用了12MHz。电容取20PF左右。机器周期12时间周期,如12MHz的机器周期为1微秒。5. 控制或复位引脚RESET 此脚为高电平时(约2个机器周期)可将单片机复位。RST/VPD当出现两个机器周期高电平时,单片机

30、复位。复位后,P0P3输出高电平;SP寄存器为07H;其它寄存器全部清0;不影响RAM状态。如图2-4所示。 图2-4 按键电平复位 AT89SXX系列单片机实现了ISP下载功能,故而取代了89CXX系列的下载方式,也是因为这样,ATMEL公司已经停止生产89CXX系列的单片机,现在市面上的AT89CXX多是停产前的库存产品。 单片机是为了工业控制需要满足而诞生的,是自动控制系统的核心部件,因而也主要用于工业控制、智能化仪器仪表、家用电器中。它具有体积小,功能多、价格低、使用方便、系统设计灵活等优点,应用领域不断扩大,除了工业控制,智能化仪表,通讯,家用电器外,在智能化高档电子玩具产品中也大量

31、采用单片机芯片作为核心控制部件。由于单片机主要面向工业控制,工作环境比较恶劣,入高温,强电磁干扰,甚至含有腐蚀性气体,在太空中工作的单片机控制系统,还必须具有抗辐射能力,这决定了单片机CPU于通用微机CPU具有不同的技术特征和发展方向。LCD1602液晶显示屏1. 液晶显示原理液晶显示的原理是利用液晶的物理特性,通过电压对其显示区域进行控制,有电就有显示,这样即可以显示出图形。液晶显示器有厚度薄、适用于大规模集成电路直接驱动、易于实现全彩色显示的特点,目前已经被广泛应用在便携式计算机、数字摄像机、PDA移动通信工具等众多领域。2. LCD1602的应用简介LCD1602液晶显示器采用HD447

32、80及其兼容芯片作为点阵式LCD的控制器驱动器,还采用HD44100进行LCD的时分割驱动。HD44780的内部结构主要包括显示数据RAM(DDRAM)、字符发生器ROM(CGROM)、字符发生器RAM(CGRAM)、指令寄存器IR、数据寄存器DR、地址计数器AC(Address Counter)和忙标志BF(Busy Flag)等逻辑电路。1602液晶模块内部的控制器共有11条控制指令,丰富的指令可以完成液晶的时序控制、工作方式设置和数据显示等。采用的LCD1602液晶模块是标准16针插座,接口电路如图2-6所示,及各引脚说明如表2-5所示。图2-5 LCD1602的引脚接口电路图3. 其他

33、方面简介DDRAM用来暂存显示字符的代码,共80个字节,DDRAM的各个单元对应着显示屏上的各个字符位,如图2-7所示。因此,DDRAM的地址也就意味着显示字符的地址,显示字符时首先要向LCD送显示字符地址。见图2-6。LCD16字*2行000102030405060708090A0B0C0DOEOF1027404142434445464748494A4B4C4D4E4F5067图 2-6 DDRAM单元地址与显示屏字符位的对应关系设计方案比较及确定本设 计中的芯片可以采用两种方案,一种是以FPGA为核心处理芯片;另一种是以AT89S52处理器。一、采用FPGA控制。FPGA是一种高密度的可编

34、程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集成密度和性能提高很快,其集成密度最高达500万门/片以上,系统性能可达200MHz。由于FPGA器件集成密度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普及和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。但是基于SRAM编程的FPGA,其编程信息需存放在外部存储器上,需外部存储器芯片,且使用方法复杂,保密性差,而其对于一个简单的计算器而言,使用FPGA有点大材小用,成本太高。二、采用AT89S52。单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由

35、单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机广泛应用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单、实用方便、价格便宜等优点。而其中AT89S52是一种带8K字节闪烁可编程可擦除只读存储器(FPEROM-Flash Programmable and Erasable Read Only Memory)的低电压,高性能COMOS8的微处理器。该器件与工业标准的MCS-51指令集和输出管脚相兼容;且是单片机中最典型的代表,应用于各种控制领域。通过以上两种方

36、案的论证和比较,从设计的实用性、方便性和成本等诸多方面考虑,最终选择了以AT89S52单片机作为中央处理单元进行计算器的设计,这样设计能够实现对六位整数、两位小数的加、减、乘、除的四则运算。模块设计键盘输入模块的设计方案及确定方案一,采用独立式按键作为输入模块。独立式按键输入模块,其直接用I/O口构成单个按键电路,接口电路配置灵活、按键识别和软件结构简单;但是当键数较多时,占用I/O口较多,比较浪费资源。其原理图如图2-7所示。图2-7独立功能按键图方案二,采用矩阵式键盘作为输入模块。矩阵式按键输入模块,其特点是:电路和软件稍复杂,但相比之下,当键数越多时,越节约I/O口,比较节省资源。其原理

37、图如图2-8所示。图 2-8矩阵键盘输入图计算器输入数字和其他功能按键要用到很多按键,如果采用独立按键的方式,在这种情况下,编程会很简单,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设置一个按键。这种行列式键盘结构能有效地提高单片机系统中I/O 口的利用率,所以本次设计采用方案二。LCD显示模块设计方案比较及确定方案一,采用LED数码管静态显示。其特点是:亮度较高,这种显示方式接口,编程容易且管理简单;不足的是,占用的I/O的线资源较多。如果采用单片机或C

38、PLD/FPGA来控制的话,势必存在浪费I/O口资源的问题。如图2-9所示。图 2-9矩阵键盘输入图方案二,采用LED数码管动态显示。采用LED数码管的动态显示,特点是:亮度比静态显示的亮度要差一些,但其电路比较简单,适合于显示位数较多的情况。如图2-10所示。图2-10矩阵键盘输入图方案三,采用LCD1602液晶显示,本次设计采用方案三,如图2-11。LCD1602,工业字符型液晶,能够同时显示16x02即32个字符(16列2行),故简称1602。1602LCD 液晶具有功耗低、显示内容丰富、清晰,显示信息量大,显示速度较快,界面友好等而得到广泛应用,因此使用1602液晶显示屏,可以方便的显

39、示多种字符,特别适用于单片机计算器的双行显示。图2-11液晶显示模块图表 2-1 LCD1602的引脚说明第1脚Vss为地电源第2脚VDD接5V正电源第3脚Vo为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚Rs为寄存器选择,高电平选择数据寄存器、低电平选择指令寄存器。第5脚Rw为读写信号线,高电平时进行读操作,低电平时选择指令寄存器。第6脚E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第7-14脚D0-D7为8位双向数据线。第15-16脚背光阳极和背光阴极。清零、开平方、开立方

40、功能模块设计本设计要求在任何时候按下AC清零键,都必须退出当前操作,数据清零,准备下一次的运算,故应采用独立键盘产生下降沿输入给单片机外部中断处理。而开方或开立方运算,则可与矩阵键盘一起检测,也当做一个运算符处理,具体功能按键设计如下图2-12所示。图2-12清零、开方、开立方模块图电源模块设计由于AT89S52和LCD1602都是采用5V供电,而且其他模块功能也采用5V电平,本系统采用LM7805作为稳压芯片,220V交流电经过初级和次级的电容滤波,最终得到稳定的5V电压供给系统使用。图2-13电源模块图软件设计程序设计采用的是keil软件,程序设计可以分为:显示程序设计、键盘扫描程序设计、

41、计算程序设计、清零程序设计,见图3-1。图 3-1总程序流程图外围程序模块设计显示程序设计LCD1602在上电以后,应该先等待50毫秒左右,让其内部芯片初始化后再对其进行操作。在对其操作时,应参考其时序图,先把命令写入其内部寄存器设置它的工作方式和状态。要显示数据的时候,先设置好显示坐标,再往里面写入要显示的ASCII码,LCD则通过刷新和替换来显示新的数据,其程序流程图如下图3-2所示。开始初始化设置坐标发送ASII显示数据图 3-2电源模块图键盘扫描程序设计由于矩阵键盘采用4行4列的结构,每一行每一列各对应一个I/O口,故程序应该逐行查询,一旦查询到有某一行的按键被按下了,则根据读取到的I

42、/O总线口的数据即可查询到是哪一列的按键被按下了,最后对应行列返回一个按键值回主函数,流程图如下图3-3所示。图 3-3扫描键盘流程图清零程序设计根据系统要求以及硬件结构,AC按键直接接入单片机外部中段0,则程序应使用中断来清除各数据存储变量达到清零的目的,并把清零标志位至1,在主程序中不断查询标志位,若为1,则清零,程序框图如下图3-4所示。中断0入口 LCD清屏显示0 各数据存储清零 清零标志位置1 返回主程序图 3-4清零程序流程图开方、平方、立方程序设计在设计计算开方、平方、立方时,采用直接调用math函数库中的sqrt()函数,pow()范例#include main()double

43、 answer;answer =pow(2,10);printf(210 = %fn, answer);执行 210 = 1024.000000#includemain()double root;root = sqrt (200);printf(answer is %fn,root);执行系统仿真及验证一、小数加法运算,52.13+23=75.12,计算结果如下图4-1所示。图 4-1小数加法运算仿真图整数加法运算,235+623=858,计算结果如下图4-2所示。图 4-2整数加法运算仿真图二、小数减法运算,456.322-89=367.322,计算结果如下图4-3所示。图 4-3小数减法运

44、算仿真图整数减法运算,89999-25563=64436,计算结果如下图4-4所示。图 4-4整数减法运算仿真图小数减法得数为负数运算,56-89.3=-33.3,计算结果如下图4-5所示。图 4-5小数减法得数为负数运算仿真图三、2.5=213,计算结果如下图4-6所示。图 4-6小数乘法运算仿真图整数乘法运算,56445=25300,计算结果如下图4-7所示。图 4-7整数乘法运算仿真图3=2.1667,最后一位实现四舍五入计算结果如下图4-8所示。图 4-8小数除法运算仿真图四、整数除法运算,854=21.25,计算结果如下图4-9所示。图 4-9整数除法运算仿真图五、开根号运算, =2

45、.2361,计算结果如下图4-10所示。图 4-10开根号运算仿真图六、平方运算,=196,计算结果如下图4-11所示。图 4-11平方运算仿真图七、立方运算,=512,计算结果如下图4-12所示。图 4-12立方运算仿真图结论在选择毕业设计的时候,我感觉选择这个题目比较容易,理论很简单,但是到我实际去做这个东西的时候,我发现不是那么的容易,不是那么的顺利,程序方面是我的弱项,当时学的时候没有用心,程序方面我就请教我的同学,他慢慢地教我,一点一点的把整个程序调试好,然后在电脑上我自己做硬件仿真,我把程序下载我做的硬件中,发现不对,反复查找,原来是我把一根线连接错,本来应该连接中断1的,结果连到

46、中断0上了。第一次编写的程序只能实现得数不比9大的运算,而且小数点和负数的功能还不能实现,经过我自己的验证以及请教同学终于发现程序那儿错了,经过修改程序,现在这个计算器可以实现计算器的加减乘除、开平方、开立方的功能了,得数可以是小数和负数,小数的结果可以精确到0.001。也有可能是时间的关系,我还是没能把老师要求的所有的功能实现,但是最基本的功能差不多都实现了。这次的毕业设计深深地让我体会到做一个设计人员的不易与艰辛。参考文献1魏泽鼎等. 单片机应用技术与实例. 北京:电子工业出版社,20052蒋辉平,周国雄. 基于PROTEUS 的单片机系统设计与仿真实例. 北京: 机械工业出版社, 200

47、93丁明亮,唐前辉. 51单片机应用设计与仿真-基于Keil C和Proteus . 北京: 北京航空航天大学出版社, 20094胡汉才.单片机原理及接口技术.清华大学出版社,19965Patterson D A & Hennessy J L. Computer organization and design: The hardware/software interface. 2nd Edition, San Francisco: Morgan Kaufmann, 1994 6Carreira J, Madeira H and Silva J G. Xception: A technique

48、for the experimental evaluation of dependability in modern computers. IEEE Transactions on Software Engineering, 1998, 24(2): 125-1367Koopman P and DeVale K. Comparing the robustness of POSIX operating systems. In: Proceedings of the IEEE 29th International Symposium on Fault-Tolerant Computing, Mad

49、ison, IEEE CS Press, June 1999, pp. 30-37 8谭浩强. C语言程序设计M.北京:清华大学出版社,20009刘福基. C语言程序设计与实训教程M.北京:科学出版社,200410张磊. C语言程序设计M.北京:高等教育出版社,200511严桂兰. C语言程序设计M.厦门:厦门大学出版社,200612张靖武,周灵杉.单片机系统的PROTEUS设计与仿真M.北京:北京电子工业出版社13靳达.求是科技.单片机应用系统开发实例导航M.:人民邮电出版社,200614刘守义. 单片机应用技术M.:西安电子科技大学出版社,200115林志琦.基于PROTEUS的单片机可视

50、化软硬件仿真M.北京:北京航空航天大学出版社,200616胡辉.单片机原理与应用.北京:北京水利水电出版社,200717181920郭天祥.新概念51单片机C语言教程:入门、提高、开发、拓展全攻 略,北京:电子工业出版社,2009致谢感谢徐老师对我们的信任和关心,老师给我们开会时说,你们需要什么就跟我讲,徐老师又是给我提供参考书籍又是提供单片机开发板的,老师特别的热心。关于这次的毕业设计,老师先是给我们分析一下我们各自题目的任务,以及我这最后学期的进度安排,每次开会徐老师都会关心的问我现在的设计进度,然后给我解答我近阶段所遇到的问题。徐老师还给我发一些参考资料,看看别人是怎么设计自己的硬件以及

51、编写软件的,的确给了我很大的启发。徐老师待人平和、工作雷厉风行、治学严谨的他给我留下了很深刻的印象。更重要的是,他善于与学生沟通,不仅在毕业设计上给了我及时的指导,更为我大学最后阶段的学习提出了许多宝贵的意见。这一切都在潜移默化地影响着我,为我以后进入工作岗位树立了良好的榜样。附录 一、电路原理图二、Protuse硬件仿真图三、PCB板图四、软件程序#include#include#include lcd1602_8.huint temp,num;/键盘扫描数值uchar keynum1=0,keynum2=0,sign=0,i=0,j=0; /按键计数,符号标示uchar num18=0,n

52、um28=0; /按键存储数组float ans1=0,ans2=0,ans=0,point=0; /运算数据bit conflag=0; /继续运算标志位bit newcalc=0;/新运算标志bit ac=0;/清零标志,1为清零bit sqrtflag1=0;/开方1标志位bit sqrtflag2=0;/开方2标志位bitpowflag=0;sbit keysqrt=P34;/开方按键sbit keypow=P35;/任意次方按键uchar keyscan();void maininit(void);/*主程序*/void main(void)maininit();/初始化while(

53、1)/整个系统大循环,让计算器一直处于工作状态while(1)/第一运算数扫描if(ac=1)break; /若清零,则退出输入if(keyscan()!=N)&(num=0&num=9)|num=.) /记录按下的数字if(newcalc=1) /新一次运算开始lcdwrite_com(0 x01);/清屏newcalc=0;lcd_setxy(0,0);if(keynum10;i+) /计算按下的数字的大小if(num1i!=.)ans1=ans1*10+num1i;else if(num1i=.)break;keynum1-;for(keynum1-,i+,j=0;keynum10;j+

54、,i+,keynum1-)point=point*10+num1i;for(;j0;j-)point*=0.1;ans1=ans1+point;sqrtflag1=0; /清除开方标志sqrtflag2=0;/清除开方标志if(keysqrt=0) /计算开方delayms(5);if(keysqrt=0)beep=0;delayms(100);beep=1;ans=sqrt(ans1);sqrtflag1=1;lcdwrite_data(0 xe8);while(keysqrt=0);delayms(10);while(keysqrt=0);break;sign=num; /记住运算符号lc

55、dwrite_data(num);break; /输入运算符号则退出第一运算数的输入while(1)if(ac=1)break; /若清零,则退出输入if(sqrtflag1=1) /若第一次按键为开方,则直接显示结果break;if(keyscan()!=N)&(num=0&num=9)|num=.) /记录按下的数字if(keynum20;i+) /计算按下的数字的大小if(num2i!=.)ans2=ans2*10+num2i;else if(num2i=.)break;keynum2-;for(keynum2-,i+,j=0;keynum20;j+,i+,keynum2-)point=

56、point*10+num2i;for(;j0;j-)point*=0.1;if(sqrtflag2!=1)lcdwrite_data(num);ans2=ans2+point;break;/输入等于号则退出第二运算数的输入else if(num=+|num=-|num=*|num=/|num=)point=0;for(i=0;keynum20;i+) /计算按下的数字的大小if(num2i!=.)ans2=ans2*10+num2i;else if(num2i=.)break;keynum2-;for(keynum2-,i+,j=0;keynum20;j+,i+,keynum2-)point=

57、point*10+num2i;for(;j0;j-)point*=0.1;lcdwrite_data(num);ans2=ans2+point;conflag=1;break; /进行连续计算if(ac=1)ac=0;continue; /清零后进行下一次运算if(sign=+) /计算结果ans=ans1+ans2;if(sign=-)ans=ans1-ans2;if(sign=*)ans=ans1*ans2;if(sign=/)ans=ans1/ans2;if(sign=) /计算多次方ans=pow(ans1,ans2); if(sqrtflag2=1)/计算开方ans=sqrt(ans

58、1);lcd_setxy(1,0);if(ans2=0&sign=/)|(ans10&sqrtflag2=1)lcdwrite_string(math error);/ans2=0或被开方数小于0时提示错误 else lcdwrite_float(ans);/显示结果sqrtflag1=0,newcalc=1; /为新的一次运算准备ans1=0;ans2=0;for(i=0;i8;i+)/清除按键缓存num1i=0;for(i=0;i8;i+)num2i=0;if(conflag=1)conflag=0;goto here; /跳转到连续运算/*初始化程序*/void maininit(voi

59、d)delayms(100); /等待液晶初始化lcd_init();lcd_setxy(0,0);lcdwrite_data(0);lcd_setxy(0,0);IT0=1;/下降沿触发EX0=1;/开外部中断0IT1=1;/下降沿触发EX1=1;/开外部中断1EA=1; /开中断lcdwrite_com(0 x01); /显示清屏lcd_setxy(0,0);lcdwrite_data(0);lcd_setxy(0,0);num=N; /数字初始化keynum1=0,keynum2=0,sign=0; ans1=0,ans2=0,ans=0,point=0;conflag=0,newcal

60、c=0;ac=1;/*键盘扫描程序*/uchar keyscan()num=N;/若没有按下任何按键,则返回N P1=0 xfe;/扫描第一行temp=P1;temp=temp&0 xf0;while(temp!=0 xf0) /扫描列delayms(10);temp=P1;temp=temp&0 xf0;while(temp!=0 xf0) temp=P1;switch(temp)case 0 xee:num=7;break;case 0 xde:num=8;break;case 0 xbe:num=9;break;case 0 x7e:num=/;break; while(temp!=0

温馨提示

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

评论

0/150

提交评论