基于单片机的简易计算器设计.doc
《基于单片机的简易计算器设计.doc》由会员分享,可在线阅读,更多相关《基于单片机的简易计算器设计.doc(45页珍藏版)》请在咨信网上搜索。
目录 引言 1 第一章 设计原理及规定 2 1.1 设计方案的拟定 2 1.2 系统的设计方案 2 1.3 系统的设计规定 2 第二章 硬件模块设计 4 2.1 单片机AT89C51 4 2.1.1 AT89C51芯片的特点 5 2.1.2 管脚说明 5 2.1.3 振荡器特性 7 2.1.4 芯片擦除 7 2.2 键盘控制模块 7 2.2.1 矩阵键盘的工作原理 8 2.2.2 键盘电路重要器件介绍 8 2.3 LCD显示模块 10 2.3.1 显示电路 11 2.3.2 LCD1602重要技术参数 11 2.3.3 引脚功能说明 11 2.4 运算模块(单片机控制) 12 第三章 软件设计 14 3.1 功能介绍 14 3.2系统流程图 14 3.3 程序 16 第四章 系统调试 17 4.1软件介绍 17 4.1.1 Keil uVision2仿真软件简介 17 4.1.2 protues简介 17 4.2 软件调试 18 4.2.1 软件分析及常见故障 19 4.2.2 仿真结果演示 20 4.3 硬件调试 21 结束语 23 参考文献 24 附录 25 致谢 36 引言 计算工具最早诞生于中国,中国古代最早采用的一种计算工具叫筹策,也被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的,约二百七十枚一束,放在布袋里可随身携带。此外直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代时的珠算盘已经与现代的珠算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加、减、乘、除、乘方和开方运算,甚至可以计算三角函数、指数函数和对数函数。这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了第一部机械式计算器,在他的计算器中有一些互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现在另一个窗口中,但是它只能做加减运算。1694年,莱布尼兹在德国将其改善成可以进行乘除的计算。此后,一直到20世纪50年代末才有电子计算器的出现。 第一章 设计原理及规定 1.1 设计方案的拟定 本设计是以单片机AT89C51为核心的简易计算器设计,要通过芯片AT89C51实现计算器程序运营来完毕加、减、乘和除的简朴计算功能。 本设计运算模块由AT89C51实现,数据输入模块由4*4矩阵键盘电路实现,输出数据模块由LCD显示电路实现,再外加一个时钟电路和一个复位电路完毕整个简易计算器的设计。 1.2 系统的设计方案 本设计由以下几部分组成:AT89C51单片机系统(运算模块)、键盘电路、显示电路、时钟电路和复位电路构成,计算器系统框图如图1-1所示。 图1-1 计算器系统框图 1.3 系统的设计规定 为了更好地实现系统的功能,硬件电路的设计应当遵循以下原则: 1、优化硬件电路 采用软件设计与硬件设计相结合的方法。尽管采用软件来实现硬件系统的功能时,也许响应的时间会比单纯使用硬件时长,并且还要占用微解决器(MCU)的时间;但是,用软件实现硬件的功能可以简化硬件结构,提高电路的可靠性。所以,在设计本系统的时候,在满足可靠性和实时性的前提下,尽也许地通过软件来实现硬件功能。 2、可靠性及抗干扰设计 根据可靠性设计理论,系统所用芯片数量越少,系统的平均无端障时间越长。并且,所用芯片数量越少,地址和数据总线在电路板上受干扰的也许性也就越小。因此,系统的设计思想是在满足功能的情况下争取较少数量的芯片。 3、灵活的功能扩展 功能扩展是否灵活是衡量一个系统优劣的重要指标之一。一次设计往往不能完全考虑到系统的各个方面,系统需要不断完善以及进行功能升级。进行功能扩展时,应当在原有设计的基础上,通过修改软件程序和少量硬件完毕。对于本系统而言,就是规定在系统硬件不变的情况下,可以通过修改软件程序,完毕功能的升级和扩展。 根据提出的系统设计方案,结合以上三条原则,拟定了系统硬件的设计。计算器重要由以下一些功能模块组成:非编码键盘模块、运算模块(单片机内部)和LCD液晶显示模块等。 该系统的硬件设计采用了模块化的设计方法。AT89C51单片机、LCD液晶显示屏显示电路和键盘电路是整个电路的核心,它们能实现系统的功能规定。 简易计算器重要涉及:键盘电路、运算电路和输出显示电路。 第二章 硬件模块设计 在本设计中重要用到的硬件:单片机AT89C51、液晶显示屏LCD1602 、4*4矩阵键盘。 单片机AT89C51的硬件资源分派: (1)P3口:作为输入口,与键盘连接,实现数据的输入; (2)P0、P2口:作为输出口(P2口为高位,P0口为低位),控制LCD液晶显示屏显示数据的结果; (3)P1口和部分P3口:作为液晶显示屏LCD1602显示输出。 2.1 单片机AT89C51 本设计所用单片机采用AT89C51单片机,它兼容于MCS-51系列单片机,并且具有1000次可擦写的FLASHMEMORY,方便于系统的开发以及参数的修改。尽管它是8位机,但它的解决精度完全满足系统的设计规定。该种单片机的最高频率可达成24MHz。在12MHz时,其解决速度完全达成设计规定,AT89C51的实物图及引脚图如图2-1所示。 图2-1 单片机AT89C51实物图及引脚图 2.1.1 AT89C51芯片的特点 AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微解决器,俗称单片机,他的特点如下: 1、与MCS-51 兼容 2、1000写/擦循环 3、4K字节可编程闪烁存储器 4、数据保存时间:2023 5、全静态工作:0Hz-24Hz 6、三级程序存储器锁定 7、128*8位内部RAM 8、32可编程I/O线 9、两个16位定期器/计数器 10、5个中断源 11、可编程串行通道 12、低功耗的闲置和掉电模式 13、片内振荡器和时钟电路 2.1.2 管脚说明 VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸取8TTL门电流。当P0口的管脚第一次写“1”时,被定义为高阻输入。P0口可以用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0 口作为原码输入口,当FLASH进行校验时,P0口输出原码,此时P0口外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接受输出4TTL门电流。P1口管脚写入“1”后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接受。 P2口:P2口是一个内部提供上拉电阻的8位双向I/O口,P2口缓冲器可接受和输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。当作为输出时,P2口的管脚被外部拉低,将输出电流,这是由于内部上拉的缘故。当P2口用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它运用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接受高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接受和输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL),这是由于上拉的缘故。 P3口也可作为AT89C51的一些特殊功能口。 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(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接受一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定期目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想严禁ALE的输出可在SFR8EH地址上置0。此时,ALE只有在执行MOVX时ALE才起作用。此外,该引脚被略微拉高。假如微解决器在外部执行状态ALE严禁,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取值期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间只管外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器,注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此时只管内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 2.1.3 振荡器特性 XTAL1和XTAL2分别为反向放大器的输入和输出。该反向放大器可以配置为片内振荡器。晶体振荡和陶瓷振荡均可采用。如采用外部时钟源驱动器件,XTAL2应不接。输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何规定,但必须保证脉冲的高低电平规定的宽度。 2.1.4 芯片擦除 整个PEROM阵列和三个锁定位的电擦除可通过对的的控制信号组合,并保持ALE管脚处在低电平10ms 来完毕。在芯片擦操作中,代码阵列全被写“1”且在任何非空存储字节被反复编程以前,该操作必须被执行。 此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下表达静态逻辑,支持两种软件可选的掉电模式。在闲置模式下,CPU停止工作。但RAM、定期器、计数器、串口和中断系统仍在工作。在掉电模式下,保存RAM的内容并且冻结振荡器,严禁所用其他芯片功能,直到下一个硬件复位为止。 2.2 键盘控制模块 计算器输入数字和其他功能按键要用到很多按键,假如采用独立按键的方式,在这种情况下,编程会很简朴,但是会占用大量的I/O 口资源,因此在很多情况下都不采用这种方式,而是采用矩阵键盘的方案。矩阵键盘采用四条I/O 线作为行线,四条I/O 线作为列线组成键盘,在行线和列线的每个交叉点上设立一个按键。这样键盘上按键的个数就为4×4个。这种行列式键盘结构能有效地提高单片机系统中I/O 口的运用率。 2.2.1 矩阵键盘的工作原理 键盘可分为两类:编码键盘和非编码键盘。编码键盘是较多按键(20个以上)和专用驱动芯片的组合;当按下某个按键时,它可以解决按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。 通用计算机使用的键盘就是编码键盘。在智能仪器中,使用并行接口芯片8279或串行接口HD7279均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。 而非编码键盘成本低廉。从简易和成本角度出发,本设计选用的是非编码键盘。如图2-2所示。一般由16个键组成,在单片机中正好可以用一个P口实现16个按键功能,这种形式在单片机系统中也最常用。其矩阵图所相应的仿真图如图2-3所示。 图2-2 矩阵键盘内部电路图 图2-3矩阵键盘布局图 2.2.2 键盘电路重要器件介绍 为了进一步节省单片机I/O口资源,我们在设计中使用了MM74C922芯片。MM74C922是一款4*4键盘扫描IC,它可检测到与之相连的4*4键盘的按键输入,并通过数据输出口将按键相应的编码输出。其引脚图如图2-4所示。 图2-4 MM74C922芯片引脚图 MM74C922引脚说明: (1) Y1-Y4(脚1-脚4):4*4键盘第一列至第四列。 (2) X1-X4(脚11、10、8、7):4*4键盘第一行至第四行。 (3) DOA- DOD(Dataout A-D,脚14-17):按键之BCD码输出,其中DOA为LSB,DOD为MSB。 (4) VCC(脚18):电源脚,+3V至+15V (5) GND(脚9):接地管脚 (6) OSC(Oscillator,脚5):键盘扫描电路之频率所需外加电容的引脚。 (7) KBM(Keyboard Mask,脚6):内部消除开关弹跳电路所外加电容的引脚。 (8) OE(Output Enable,脚13):芯片使能脚,接低电位可使芯片使能。 (9) DA(Data Available,脚12):数据有效输出脚。任一按键按下时,此脚位会输出高电位,按键释放后此脚又会恢复为低电位。 如图2-5所示,在本设计中,计算器输入键盘的4条行线、4条列线分别连接到MM74C922的X1-X4、Y1-Y4引脚,MM74C922的数据输出口与单片机的P2口相连,MM74C922的DA引脚通过一个非门连接到单片机的/INT0脚,当MM74C922检测到键盘输入时,DA产生高电平,与之相连的/INT0检测到低电平,给单片机一个中断,单片机从P2口的低四位读入键盘上按下的按键值。 图2-5 键盘接口电路图 2.3 LCD显示模块 本设计采用LCD液晶显示器来显示输入输出数据。通过D0-D7引脚向LCD写指令字或写数据以使LCD实现不同的功能或显示相应数据。LCD引脚图如图2-6所示。 图2-6 LCD1602 引脚图 LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,在实际使用中是否带背光并无多大差别,两者尺寸差别如图2-7所示。 图2-7 LCD背光和不带背光的尺寸对比图 2.3.1 显示电路 当系统需要显示少量数据时,采用LCD液晶显示屏进行显示是一种经济实用的方法。P1口作为液晶显示的数据端口,P3.4-P3.6口作为其控制端口,控制LCD液晶显示屏显示输出数据。 显示电路图如图2-8所示。 图2-8 LCD液晶显示电路 2.3.2 LCD1602重要技术参数 显示容量:16×2个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W×H)mm 2.3.3 引脚功能说明 LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表2-1所示。 表2-1 引脚接口说明表 编号 符号 引脚说明 编号 符号 引脚说明 1 VSS 电源地 9 D2 数据 2 VDD 电源正极 10 D3 数据 3 VL 液晶显示偏压 11 D4 数据 4 RS 数据/命令选择 12 D5 数据 5 R/W 读/写选择 13 D6 数据 6 E 使能信号 14 D7 数据 7 D0 数据 15 BLA 背光源正极 8 D1 数据 16 BLK 背光源负极 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。 第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。 第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 2.4 运算模块(单片机控制) AT89C51单片机是在一块芯片中集成了CPU、RAM、ROM、定期器/计数器和多功能I/O等一台计算机所需要的基本功能部件。假如按功能划分,它由如下功能部件组成,即微解决器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定期器/计数器、中断系统及特殊功能寄存器(SFR)。单片机是靠程序运营的,并且可以修改。通过不同的程序实现不同的功能,特别是一些特殊的功能,通过使用单片机编写的程序可以实现高智能、高效率以及高可靠性!因此我们采用单片机作为计算器的重要功能部件,可以不久地实现运算功能。 此外系统还涉及时钟电路和复位电路。 第三章 软件设计 3.1 功能介绍 实际运用中人们熟悉的计算器,其功能重要如下: 1、键盘输入; 2、显示数值; 3、加、减、乘、除四则运算; 4、对错误输入和输出的控制及提醒。 3.2系统流程图 在软件设计中程序分别要完毕键盘输入检测、LCD初始化及显示、算术运算和错误解决及输出等功能。对主程序进行初始化,其他的程序选择模块式的方式。一方面对每个模块进行调试,当模块调试成功后,逐个地加入主程序中,最后完毕整个软件部分的设计。系统流程图如图3-1所示。 开始 初始化参数 初始化LCD显示 有键输入? 读取键码 LCD显示 数字键 清零键 功能键 状态清零 输入数值 数值送显示缓冲 Y N 根据上次功能键和输入的数据计算结果 结果送显示缓冲 本次功能键 图3-1 系统流程图 3.3 程序 本设计程序采用C语言编程,程序分为多个模块,由主程序、键值转换和LCD系列程序等模块组成。具体程序见附录。 第四章 系统调试 4.1软件介绍 4.1.1 Keil uVision2仿真软件简介 Keil uVision2是德国Keil公司开发的基于Windows平台的单片机集成开发环境,它包含一个高效的编译器、一个项目管理器和一个MAKE工具。其中Keil C51是一种专门为单片机设计的高效率C语言编译器,符合ANSI标准,生成的程序代码运营速度极高,所需要的存储器空间极小,完全可以与汇编语言媲美。Keil uVision2的界面如图4-1所示,Keil uVision2允许同时打开、浏览多个源文献。 图4-1 Keil uVision2的界面 4.1.2 protues简介 protues软件是英国Labcenter electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最佳的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具(仿真软件),从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。它是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其解决器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2023年已经增长了Cortex和DSP系列解决器,并连续增长其他系列解决器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器,界面图如图4-2所示。 图4-2 protues界面图 4.2 软件调试 4.2.1 软件分析及常见故障 在本次设计中使用Keil uVision2和Proteus软件仿真,其中使用Keil uVision2软件汇编源程序,使用Proteus软件对硬件电路进行模拟。对的连接电路图,使其能按照题目规定及设计初衷正常工作。 从库里对的拾取元器件,认真合理地连线,做到不缺件,不缺线,选取合适的元件参考值,使其能正常工作。通过编译,连接程序。使其生成.hex文献,并连入连好的Proteus图中。测试该计算器是否能正常工作。若不能,一方面要检查有没有漏掉元器件,元器件是否都连接好。另一方面,要看元件各引脚是否都连接对的,有无接反的。最后要看元件的参考值是否选择合理,电源电压是否能带动元器件正常工作。 常见故障: 1、逻辑错误:它是由设计错误或加工过程中的工艺性错误所导致的。这类错误涉及错线、开路、短路等。 2、元器件失效:有两方面的因素:一是器件自身已损坏或性能不符合规定;二是组装错误导致元件失效,如电解电容、集成电路安装方向错误等。 3、可靠性差:因其可靠性差的因素很多,如金属化孔、接插件接触不良会导致系统时好时坏,经不起振动;走线和布局不合理也会引起系统可靠性差。 4、电源故障:若样机有电源故障,则加电后很容易导致器件损坏。电源故障涉及电压值不符合设计规定,电源引线和插座不对,功率局限性,负载能力差等。 调试方法:涉及多级调试和联机调试。在调试过程中要针对也许出现的故障认真分析,直至检查出因素并排除。 本次硬件调试过程中,对所出现的问题进行了认真的分析和改正,最后可以很好的达成设计规定的效果。 系统仿真图如图4-3所示。 图4-3 系统仿真图 4.2.2 仿真结果演示 下面以加、减、乘和除分别做仿真演示: (1)加法:以258和825作为加数和被加数运算,结果为1083。加法仿真结果图如图4-4所示。 图4-4 加法仿真结果图 (2)减法:以7654321和1234567作为被减数和减数运算,结果为6419754。减法仿真结果图如图4-5所示。 图4-5 减法仿真结果图 (3)乘法:以694和123作为乘数和被乘数运算,结果为85362。乘法结果仿真图如图4-6所示。 图4-6 乘法结果仿真图 (4)除法:以1250和5作为被除数和除数运算,结果为250。除法结果仿真图如图4-7所示。 图4-7 除法结果仿真图 由以上四种运算结果可知软件仿真均对的,没有显示错误。 4.3 硬件调试 在protues里面把硬件图画好,把所有元器件的参数都设立好,程序在keil里面生成.hex文献,然后在 protues里单片机芯片中导入此文献,运营一切正常后开始准备焊接硬件。在焊接硬件过程中一方面得准备好所有必备的东西,比如所需元器件和焊接所用工具等。在焊接前应先在面包板上把硬件插好调试,接通电源看能否显示出结果,假如元器件都是好的并且结果可以显示出,就可以焊接了。假如显示不出来再检查各个器件是否有损坏,并用万用表挨个检查,直至一切显示正常再焊接。 在焊接时要注意相邻焊点不能粘在一起,连接线不能太长,并且注意焊点的虚焊、假焊。在使用电烙铁时温度不能太高也不能太低,一般在350度左右,温度太低容易形成冷焊点,太高则会烧坏电路板。 电路板焊接好以后一方面测试一下各个元器件是否正常,焊点有无虚焊、连焊、假焊等现象,检查没有问题以后接通电源查看LCD显示是否正常,假如一切显示没有问题把硬件妥善保管,防止不小心损坏。硬件电路实物图如图4-8所示。 图4-8 硬件电路实物图 结束语 通过这次简易计算器的设计,很大限度的提高了我的理解力和动手能力,也拓宽了知识面。在图书馆和网上查阅资料使我了解了更多的资料,也方便了我们以后的使用。在查询的资料中让我对单片机有了更进一步的了解,能把学到的知识用活,而不只局限于理论方面。 在硬件制作过程中,当我把硬件都焊好以后接通电源LCD怎么都不显示数字并且在很短的时间内就会发热,我查了焊接点和仿真图都没有问题,接着仔细查找了LCD显示器各个管脚,发现两个电压管脚接反了,但在仿真时没出现问题,而在实物中出现了问题,是由于仿真元件都是抱负化的,各个问题在实物中根据实际情况就会出现。 编程时,充足使用了结构化的思想。这样一来,由于语句较少,程序调试也比较方便,功能模块可以逐个地调试,充足体现了结构化编程的优势。当每个模块都完毕时,将其功能互相整合就完毕了整体的设计。经历了从最初的不了解设计内容到最后做出仿真结果的过程使我从主线上提高了对专业的结识及爱好,对于我们工科学生来说,学习了这些对我们以后工作有重大的影响。很感谢学校和老师给我们提供了这样的平台,能使我们的动手能力增强。感谢老师对我们提供的帮助。 参考文献 [1] 裴岩、刘利民单片机系统综合设计与实践[J].内蒙古大学出版.2023.1 [2] 杨国林. C语言程序设计[J].内蒙古大学出版社.2023.9 [3] 郭天祥. 新概念51单片机C语言程序[J].电子工业出版社.2023.1 [4] LED与LCD显示器的区别. [5]基于单片机简易计算器的设计. [6] 基于单片机的简易计算器设计. [7] 计算器模拟系统设计. [8] 计算器设计报告. [9] 基于单片机的计算器. [10] AT89C51单片机简介 [11] Keil uVision2仿真软件的使用说明μVision2集成开发环境 [12] 4×4矩阵键盘计算器设计 [13] Henderson D. Calibration of fast sampling o scilloscopes. Meas SciTechnol.1990.1 [14] Barry Ross. Hands-On Guide to Oscilloscopes, McGraw-Hill.1994,6 [15] [13] V. A. Krukov, R. V. Udovichenko.Debugging DVM Programs[J]. Programming and Computing Software,May.2023 附录 #include<reg51.h> #include<math.h> #define uchar unsigned char #define uint unsigned int char translate(int keycode); void arithmetic(); void init_LCM(); void write_data(char ddata); void write_com(char command); void check_BF(); void clearLCD(); void display(long a); void dealerror(); void dataoverflow(); long x=0,y=0,num=0; int operators,input,iny=0; char key; char error[5]="error"; char overflow[8]="overflow"; sbit EN=P3^4; sbit R_W=P3^5; sbit RS=P3^6; main() { EA=1; EX0=1; IT0=1; P2=0xff; display(0); init_LCM(); write_data(0x30); while(1) { } } /**********键值转化为键盘上按键值函数*************/ char translate(int keycode) { switch(keycode) { case 0: return '7'; break; case 1: return '4'; break; case 2: return '1'; break; case 3: return 'c'; break; case 4: return '8'; break; case 5: return '5'; break; case 6: return '2'; break; case 7: return '0'; break; case 8: return '9'; break; case 9: return '6'; break; case 10: return '3'; break; case 11: return '='; break; case 12: return '/'; break; case 13: return '*'; break; case 14: return '-'; break; case 15: return '+'; break; } } /***********外部中断0解决函数*************/ void INT_0(void) interrupt 0 using 0 { key=translate(P2&0x0f); if(key<='9'&&key>='0') //判断按下的键是否为数值 { num=num*10+(key-'0'); if (operators>0) { y=num; iny=1; } else x=num; if(num<&&num>-) //当前数值是否超过限定范围 { display(num); } else dataoverflow(); } else { switch(key) { case 'c': x=0; y=0; num=0; iny=0; operators=0; display(num); break; case '=': arithmetic(); iny=0; operators=0; num=0; break; case '+': if (operators) arithmetic(); operators=1; num=0; break; case '-': if (operators) arithmetic(); operators=2; num=0; break; case '*': if (operators) arithmetic(); operators=3; num=0; break; case '/': if (operators) arithmetic(); operators=4; num=0; break; } } } /**********算术运算函数*********/ void arithmetic() { if (iny) { switch(operators) { case 1: x=x+y; num=x; if(num<&&num>-) { display(num); } else dataoverflow(); break; case 2: x=x-y; num=x; if(num<&&num>-) { display(num); } else dataoverflow(); break; case 3: x=x*y; num=x; if(num<&&num>-) { display(num); } else dataoverflow(); break; case 4: if (y==0) dealerror(); else { x=x/y; num=x; if(num<&&num>-) { display(num); } else dataoverflow(); } break; } y=0; } } /**************LCD初始化函数*************/ void init_LCM() { write_com(0x30); write_com(0x30); write_com(0x30); write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0e); } /***********LCD写数据函数*************/ void write_data(char ddata) { RS=1;/*写指令*/ R_W=0; EN=1;/*使能信号开*/ P1=ddata;/*将数据送入p1口*/ EN=0;/*使能信号关*/ check_BF(); } /***********LCD写指令函数*************/ void write_com(char command) { RS=0;/*写指令*/ R_W=0; EN=1;/*使能信号开*/ P1=command;/*将数据送入p1口*/ EN=0;/*使能信号关*/ check_BF(); } /************LCD检查忙碌函数***********/ void check_BF() { char i,x=0x80; P1=0xff; while(x&0x80) { RS=0; R_W=1; EN=1; x=P1; EN=0; for (i=0;i<10;i++); } EN=0;/*关闭使能信号*/ } /**********LCD清屏函数**********/ void clearLCD() { write_com(0x01); } /**********LCD显示函数**********/ vo- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 简易 计算器 设计
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【丰****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【丰****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文