《多功能计算器课程设计.docx》由会员分享,可在线阅读,更多相关《多功能计算器课程设计.docx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、桂林航天工业学院课程设计报告系(部):电子信息与自动化学院 专业班级20140410Z01学生姓名: 相伟烨 学 号20130410Z0101 课 程 : 信息处理技术实践 设计题目: 基于51单片机的计算器设计 完成日期: 2016年12月1日 指导教师评语:实验态度: 严谨认真 循规蹈矩 敷衍应付 文字表述: 简明通顺 重复冗长 没有实质内容 实验结果: 一次成功 改进后成功 不成功 课堂评价: 优秀 良好 中等 与格 不与格 成绩(五级记分制): 指导教师(签字):_ 摘要摘要 过去很多电子产品采用纯电路设计,单片机的出现促进了电子产品的更新换代,用单片机进行产品开发更为方便。本课程设计
2、是以Atmel半导体公司的AT89S52单片机为计算核心的计算器模拟系统设计,输入采用58矩阵键盘,可以进行加、减、乘、除、正弦、余弦、正切、求N次方和求对数小数点后6位带正负号数字运算,在LCD1602上显示操作过程和运算结果。科技的进步使我们从以前复杂的模拟电路中解放出来,一块小至几平方厘米的单片机,里面就集成多种不同功能的电路。现在应用较为广泛的普通计算器和手机应用里的计算器软件,大多都是只能实现加减乘除运算的简易计算器,而计算功能较多的科学计算器价格又会高出很多。本设计希望开发一款价格与普通计算器相近但功能更多的计算器,以填补市场空白。 关键词 AT89C52;LCD1602;计算器;
3、矩阵键盘目录第一章 前言- 4 -1.1 系统开发背景- 4 -1.2 系统开发意义- 4 -1.3 设计目的- 4 -第二章 方案论证- 4 -2.1 方案构思- 4 -2.2 方案比较与选择- 5 -第三章 系统硬件设计与说明- 5 -3.1系统组成与总体框图- 5 -3.2元件简介- 6 -3.2.1 STC89C52特点- 6 -3.2.2 LCD1602液晶显示屏- 10 -第四章 设计原理分析- 10 -4.1 设计方案的确定- 10 -4.2计算器硬件方案与硬件资源分配- 11 -4.2.1 硬件资源分配- 11 -4.2.2 系统的硬件设计- 11 -4.2.3 显示电路的设计
4、- 12 -第五章 计算器的软件设计- 12 -5.1计算器的软件规划- 12 -5.2 键盘扫描的程序设计- 13 -5.3 显示模块的程序设计- 13 -5.4 主程序的设计- 13 -总结- 13 -参考文献- 14 -附录- 15 -附录一:系统程序清单- 15 -第一章 前言1.1 系统开发背景电子产品的不断推陈出新为我们的生活带来了极大的便利,尤其是计算机的出现更是如此。社会对计算器的需求十分大。然而常用的普通计算器和手机应用里的计算器软件都是只能实现加减乘除的简易计算器,并不能满足更高的需求。而科学计算器虽然功能强大,但价格颇高。1.2 系统开发意义计算器的应用十分广泛,在学校、
5、商店、办公室等等。比如对于中学生,普通计算器价格一般为8至10元,虽然便宜,但只能实现加减乘除的简易计算器并不能满足他们的计算需求。而科学计算器价格至少为几十元,虽然功能强大,但很多功能学生也并未用上。本设计希望开发一款多功能计算器,功能介于简易和科学计算器之间,而价格控制在10元以内,以填补这方面的市场空白。1.3 设计目的本设计的目的在于使我们进一步掌握51单片机的理论知识,理解单片机系统的软件和硬件的设计,提高实践动手能力。通过完成本课程设计的项目,使我们对单片机系统设计与Protues仿真这门课有更为深入的了解。1、对字符液晶LCD的工作原理,比如使用初始化、清屏、显示有更为深入的认识
6、,并会使用LCD液晶显示计算过程和结果;掌握液晶模块的驱动方法和编程方法,了解LCD如何与51单片机连接并设计相应电路,利用51单片机对液LCD进行驱动和操作。 2、设计过程中充分研究计算器的内部逻辑,并进行软件设计和后期调试,学会操作方法。第二章 方案论证2.1 方案构思在进行设计之前,通过搜集资料,我筛选出两种方案,并计划通过多方面的比较最终确定一种方案来进行项目的设计。一种是以FPGA芯片为控制核心;另一种是以Atmel公司的AT89S52单片机为控制核心。1、方案一:采用FPGA控制FPGA是一种高密度的可编程逻辑器件,自从Xilinx公司1985年推出第一片FPGA以来,FPGA的集
7、成密度和性能提高很快,其集成密度最高达500万门/片以上,系统性能可达200MHz。由于FPGA器件集成度高,方便易用,开发和上市周期短,在数字设计和电子生产中得到迅速普与和应用,并一度在高密度的可编程逻辑器件领域中独占鳌头。但是而基于 SRAM编程的FPGA,其编程信息需存放在外部存储器上 ,需外部存储器芯片 ,且使用方法复杂 ,保密性差,而其对于一个简单的计算器而言,实用FPGA有点大材小用,成本太高。2、方案二:采用AT89C52单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器
8、CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件与外部设备相结合,便可成为一个单片机控制系统。单片机广泛用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单,实用方便,价格便宜等优点,而其中AT89S52以MCS-51为内核,是单片机中最典型的代表,应用于各种控制领域。2.2 方案比较与选择通过以上两种方案的论证和比较,我们比较了性能和价格两个方面,最终选择了以AT89S52单片机作为控制部分进行多功能计算器项目的设计,51单片机足够可以实现加减乘除、正余弦、正切、求N次方和求对数的精密计算。第三章 系统硬件设计与说明 3.1系统组成与总体框图LED灯AT89S52控制模
9、块 LCD液晶模块 矩阵键盘 图1 系统组成与总体框图3.2元件简介 3.2.1 STC89C52特点1、主要性能: (1) 8031 CPU与MCS-51 兼容 8K字节可编程FLASH存储器(寿命:1000写/擦循环) 全静态工作:0Hz-33MHz 三级加密程序存储器 128*8位内部RAM 32条可编程I/O线 三个16位定时器/计数器 八个中断源 全双工UART串行通道 低功耗的闲置和掉电模式 掉电后中断可唤醒 看门狗定时器 双数据指针 掉电标识符 片内振荡器和时钟电路 (2) 管脚说明: VCC:供电电压。 GND:接地。2、AT89S52的功能特性描述AT89S52 是一种低功耗
10、、高性能CMOS8位微控制器,具有 8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非 易失性存储器技术制造,与工业80C51 产品指令和引脚完 全兼容。片上Flash允许程序存储器在系统可编程,亦适于 常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统 可编程Flash,使得AT89S52为众多嵌入式控制应用系统提 供高灵活、超有效的解决方案。AT89S52具有以下标准功能: 8k字节Flash,256字节RAM, 32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位 定时器/计数器,一个6向量2级中断结构,全双工串行口, 片内晶振与时钟电路。此外, AT8
11、9S52 可降至0Hz 静态逻 辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工 作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。8 位微控制器 8K 字节在系统可编程 Flash。同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。3、AT89S52引脚功能AT89S52 单片机为40 引脚。(1)口线:P0、P1、P2、P3 共四个八位口。P0 口:P0口是一个8位漏极开路的双向I/O口。作为输出口,每位能驱动8个TTL逻辑电平。 对P0端口写
12、“1”时,引脚用作高阻抗输入。 当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0不具有内部上拉电阻。 在flash编程时,P0口也用来接收指令字节;在程序校验时,输出指令字节。程序校验时,需要外部上拉电阻。 P1口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 此外,P1.0和P1.1分别作定时器/计数器2的外部计数输入(P1.0/T2)和定时器/计数器2的触
13、发输入(P1.1/T2EX),具体如下表所示。 在flash编程和校验时,P1口接收低8位地址字节。 引脚号第二功能: P1.0 T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1 T2EX(定时器/计数器T2的捕捉/重载触发信号和方向控制) P1.5 MOSI(在系统编程用) P1.6 MISO(在系统编程用) P1.7 SCK(在系统编程用)P2口:P2 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流
14、(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR) 时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存器的内容。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,p3 输出缓冲器能驱动4 个TTL 逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用,如表3.2.1所示。 表1 P
15、3口管脚 备选功能端口引脚第二功能P3.0RXD(串行输入口)P3.1TXD(串行输出口)P3.2/INT0(外部中断0)P3.3/INT1(外部中断1)P3.4T0(记时器0外部输入)P3.5T1(记时器1外部输入)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通)在flash编程和校验时,P3口也接收一些控制信号。 此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。 (2)其他引脚说明:RST:复位输入。晶振工作时,RST脚持续2 个机器周期高电平将使单片机复位。看门狗计时完成后,RST 脚输出96 个晶振周期的高电平。特殊寄存器AUXR(地址8E
16、H)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。 ALE/PROG当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。 对FLASH存储器编程期间,该引脚还用于输入编程脉冲(PROG)。 如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执
17、行外部程序时,应设置ALE禁止位无效。 PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89S52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。 EA/VPP外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。 如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。 FLASH存储器编程时,该引脚加上+12V的编程允许电源Vpp,当然这必须是该器件是
18、使用12V编程电压Vpp。 XTAL1:反向振荡放大器的输入与内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 XTAL1,XTAL2接石英晶体振荡器。 图4 晶振外接结构引脚图XTAL1是片内振荡器的反相放大器输入端,XTAL2则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择,在本设计电路中选用了12MHz。电容取20PF左右。机器周期12时间周期,如12MHz的机器周期为1微秒。(3)控制或复位引脚RESET 此脚为高电平
19、时(约2个机器周期)可将单片机复位。RST/VPD当出现两个机器周期高电平时,单片机复位。复位后,P0P3输出高电平;SP寄存器为07H;其它寄存器全部清0;不影响RAM状态。 AT89SXX系列单片机实现了ISP下载功能,故而取代了89CXX系列的下载方式,也是因为这样,ATMEL公司已经停止生产89CXX系列的单片机,现在市面上的AT89CXX多是停产前的库存产品。 4、AT89S52的编程方法 编程前,须按编程模式表设置好地址、数据与控制信号;顺序如下: 在地址线上加上要编程单元的地址信号。 在数据线上加上要写入的数据字节。 激活相应的控制信号。 将EA/Vpp端加上+12V编程电压。
20、每对Flash存储阵列写入一个字节或每写入一个程序机密位,加上一个ALE/PROG编程脉冲。每个字节写入周期是自身定时的,大多数约为50us。改变编程单元的地址和写入的数据,重复步骤,直到全部文件编程结束。单片机的现状与发展方向:单片机是为了工业控制需要满足而诞生的,是自动控制系统的核心部件,因而也主要用于工业控制、智能化仪器仪表、家用电器中。它具有体积小,功能多、价格低、使用方便、系统设计灵活等优点,应用领域不断扩大,除了工业控制,智能化仪表,通讯,家用电器外,在智能化高档电子玩具产品中也大量采用单片机芯片作为核心控制部件。由于单片机主要面向工业控制,工作环境比较恶劣,入高温,强电磁干扰,甚
21、至含有腐蚀性气体,在太空中工作的单片机控制系统,还必须具有抗辐射能力,这决定了单片机CPU于通用微机CPU具有不同的技术特征和发展方向:(1) 可靠性高;(2) 控制功能往往很强,数值计算交叉;(3) 指令系统比通用微处理器慢的多;(4) X系列芯片取代;(5) 抗干扰性强,工作温度范围宽。3.2.2 LCD1602液晶显示屏1、应用简介模块内部自带字符发生存储器(CGROM),字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是(41H),显示时模块把代码41H发给液晶模块,我们就能在液晶上看到字母“A”。1602液晶
22、模块内部的控制器共有11条控制指令,丰富的指令可以完成液晶的时序控制、工作方式式设置和数据显示等。2 、LCD的特点:(1)低压微功耗;(2)平板型结构;(3)被动显示型(无眩光,不刺激人眼,不会引起眼睛疲劳);(4)显示信息量大(因为像素可以做得很小);(5)易于彩色化(在色谱上可以非常准确的复现);(6)无电磁辐射(对人体安全,利于信息保密);(7)长寿命(这种器件几乎没有什么劣化问题,因此寿命极长,但是液晶背光寿命有限,不过背光部分可以更换)。第四章 设计原理分析4.1 设计方案的确定本设计需要使用LCD液晶显示屏和编码键盘。故选择静态显示和用编码键盘。使用LCD液晶显示屏显示运算结果。
23、 主程序进行初始化,其他的程序选择模块式的方式。首先对每个模块进行调试, 当模块调试成功后,逐一的加入主程序中,最后完成整个软件部分的设计。4.2计算器硬件方案与硬件资源分配4.2.1 硬件资源分配主要用到的硬件:AT89S52 LCD液晶显示屏 编码键盘 硬件分配:1、P0、P3口:做为输出口,控制LCD液晶显示屏显示数据的结果。2、P1口:做为输入口,与键盘连接,实现数据的输入。3、LCD液晶显示屏显示输出。4.2.2 系统的硬件设计为了更好的实现系统得功能,硬件电路的设计应该遵循以下原则:1、优化硬件电路采用软件设计与硬件设计相结合的方法;尽管采用软件来实现硬件系统的功能时,也许响应时间
24、会比单纯使用硬件时长,而且还要占用微处理器(MCU)的时间;但是,用软件实现硬件的功能可以简化硬件结构,提高电路的可靠性。所以,在设计本系统得时候,在满足可靠性和实时性的前提下,尽可能的通过软件来实现硬件功能。2、可靠性与抗干扰设计根据可靠性设计理论,系统所用芯片数量越少,系统的平均无故障时间越长。而且,所用芯片数量越少,地址和数据总线在电路板上受干扰的可能性也就越小。因此,系统的设计思想是在满足功能的情况下力争使用较少数量的芯片。3、灵活的功能扩展功能扩展是否灵活是衡量一个系统优劣的重要指标。一次设计往往不能完全考虑到系统的各个方面,系统需要不断完善以与进行功能升级。进行功能扩展时,应该在原
25、有设计的基础上,通过修改软件程序和少量硬件完成。对于本系统而言,就是要求在系统硬件不变的情况下,能够通过修改软件程序,完成功能的升级和扩展。根据第提出的系统设计方案,结合以上三条原则,确定了系统硬件的设计。计算器主要由以下一些功能模块构成:非编码键盘模块、LCD液晶显示屏模块等。该系统的硬件设计采用了模块化的设计方法。AT89S52 单片机与LCD液晶显示屏显示电路是整个电路的核心,它们实现系统的功能要求。简易计算器主要包括:键盘电路,显示电路。下图为总体硬件结构。(如图4.2.2 所示为整个系统的原理图) 图6 计算器原理图前面叙述了该系统的设计说明,系统采用了比较简单的设计方案,所以该系统
26、的硬件设计的总外围电路不会产生过多的干扰。在下面的阐述中,对系统的外围电路分别予以介绍。键盘部分采用编码键盘,显示部分采用LCD液晶显示屏完全能够很好的实现显示方面的要求。4.2.3 显示电路的设计当系统需要显示少量数据时,采用LCD液晶显示屏进行显示是一种经济实用的方法。P0口作为液晶显示的数据端口,P3.5-P3.7口作为其控制端口,控制LCD液晶显示屏显示输出数据。第五章 计算器的软件设计5.1计算器的软件规划简易计算器的程序主要包括以下功能模块: 1、键盘扫描和计算功能部分的程序; 2、基于LCD液晶显示屏的显示程序; 3、主模块,为系统的初始化。 5.2 键盘扫描的程序设计键盘扫描子
27、程序,首先读出P1的低四位,然后读出P1口的高四位。然后键值并显示缓存。然后将键如的值转换为ASCII码然后就可以软件来设置硬件按键各个键代表的内容。 读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。 5.3 显示模块的程序设计检测LED是否在忙显示模块程序首先要对显示模块进行初始化;然后控制光标的位置;定义液晶显示的控制端口,用SBIT指令完成;然后设置清屏、关闭显示、归位、开显示、显示位置
28、的首地址等等。开始延时程序结束液晶显示扫描键盘计算程序图9 模块的流程图5.4 主程序的设计 主程序主要是用来对LCD液晶显示屏进行初始化的。总结在硬件的设计过程中我走了好多的弯路,主要是对各个部分还没有完全了解时就开始开始动手仿真了。后来发现与设计的要求还有偏差,反复的改过了几次,浪费了大量的时间和体力。感受到设计人员要有耐心,要认真的从要求开始研究。软件的编写过程中费了很大的力气,因为软件的编写要求很高,要很细心,一不小心就会调用错误,很深刻的体会到作为软件编程人员是绝不能粗心大意的。一个程序的完成的速度和质量高低与细心与否有着很大联系。编程时,我充分使用了结构化的思想。这样因为语句较少,
29、程序调试比较方便,功能模块可以逐一的调试,充分体现了结构化编程的优势。当每个模块都完成时,将其功能加到一起就完成了整体的设计。参考文献【1】张靖武,周灵杉.单片机系统的PROTEUS设计与仿真M.北京:北京电子工业出版社【2】靳达.求是科技.单片机应用系统开发实例导航M.:人民邮电出版社,2006【3】刘守义. 单片机应用技术M.:西安电子科技大学出版社,2001【4】林志琦.基于PROTEUS的单片机可视化软硬件仿真M.北京:北京航空航天大学出版社,2006【5】胡汉才.单片机原理与接口技术.清华大学出版社,1996【6】徐江海.单片机实用教程M.北京:机械工业出版社,2007.【7】肖洪兵
30、. 跟我学用单片机. 北京:北京航空航天大学出版社,2002.8【8】夏继强. 单片机实验与实践教程. 北京:北京航空航天大学出版社, 2001【9】谭浩强. C语言程序设计M.北京:清华大学出版社,2000.【10】刘福基. C语言程序设计与实训教程M.北京:科学出版社,2004.【11】张磊. C语言程序设计M.北京:高等教育出版社,2005.【12】严桂兰. C语言程序设计M.厦门:厦门大学出版社,2006附录附录一:系统程序清单#include /头文件#define uint unsigned int #define uchar unsigned charsbit lcden=P26
31、; /LCD1602控制引脚sbit rs=P24;sbit rw=P25;sbit busy=P07;/LCD忙char i,j,temp,num,num_1;long a,b,c; /a,第一个数 b,第二个数 c,得数float a_c,b_c;uchar flag,fuhao;/flag表示是否有运算符键按下,fuhao表征按下的是哪个运算符/flag=1表示运算符键按下,flag=0表示运算符键没有按下;/fuhao=1为加法,fuhao=2为减法,fuhao=3为乘法,fuhao=4为除法。uchar code table=7,8,9,0,4,5,6,0,1,2,3,0,0,0,0
32、,0;/运算数字输入数组uchar code table1=/经处理后进行键输入显示准备的数组7,8,9,0x2f-0x30,/7,8,9,4,5,6,0x2a-0x30,/4, 5, 6,1,2,3,0x2d-0x30,/1, 2, 3,0x01-0x30,0,0x3d-0x30,0x2b-0x30/C,0,=,void delay(uchar z) / 延迟函数uchar y;for(z;z0;z-) for(y=0;y=1)/如果按过运算符键 b=b*10; write_date(0x30); break; case 14:j=1; /按下等于键,根据运算符号进行不同的算术处理 if(f
33、uhao=1) /加法运算 write_com(0x80+0x4f);/按下等于键,光标前进至第二行最后一个显示处 write_com(0x04); /设置从后住前写数据,每写完一个数据,光标后退一格 c=a+b; while(c!=0)write_date(0x30+c%10);c=c/10; write_date(0x3d); /再写= a=0;b=0;flag=0;fuhao=0; else if(fuhao=2) /减法运算 write_com(0x80+0x4f);/光标前进至第二行最后一个显示处 write_com(0x04); /设置从后住前写数据,每写完一个数据,光标后退一格
34、if(a-b0) c=a-b; else c=b-a; while(c!=0) write_date(0x30+c%10);c=c/10; if(a-b0) write_date(0x2d); write_date(0x3d); /再写= a=0;b=0;flag=0;fuhao=0; else if(fuhao=3)/乘法运算 write_com(0x80+0x4f); write_com(0x04); c=a*b; while(c!=0)write_date(0x30+c%10);c=c/10; write_date(0x3d); a=0;b=0;flag=0;fuhao=0; else if(fuhao=4)/除法运算 write_com(0x80+0x4f); write_com(0x04); i=0;if(b!=0)c=(long)(float)