![简易计算器 - 单片机课程设计说明书_潍坊学院课件_第1页](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/dd7a08ae-ecff-4322-9dba-c45b2b0c0673/dd7a08ae-ecff-4322-9dba-c45b2b0c06731.gif)
![简易计算器 - 单片机课程设计说明书_潍坊学院课件_第2页](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/dd7a08ae-ecff-4322-9dba-c45b2b0c0673/dd7a08ae-ecff-4322-9dba-c45b2b0c06732.gif)
![简易计算器 - 单片机课程设计说明书_潍坊学院课件_第3页](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/dd7a08ae-ecff-4322-9dba-c45b2b0c0673/dd7a08ae-ecff-4322-9dba-c45b2b0c06733.gif)
![简易计算器 - 单片机课程设计说明书_潍坊学院课件_第4页](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/dd7a08ae-ecff-4322-9dba-c45b2b0c0673/dd7a08ae-ecff-4322-9dba-c45b2b0c06734.gif)
![简易计算器 - 单片机课程设计说明书_潍坊学院课件_第5页](http://file3.renrendoc.com/fileroot_temp3/2022-1/21/dd7a08ae-ecff-4322-9dba-c45b2b0c0673/dd7a08ae-ecff-4322-9dba-c45b2b0c06735.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机课程设计说明书 题 目: 简易计算器 系 部: 信息与控制工程学院 专 业: 测控技术与仪器 班 级: 2015级1班 学生姓名: 吕前阔 学 号:导教师: 谷善茂 2017年 11月14日单片机课程设计说明书目 录1 设计任务与要求11.1 设计任务11.2 设计要求12 设计方案13 硬件电路设计23.1 键盘接口电路23.2 显示模块43.4.1 LCD的选择43.4.2 LCD1602显示器的管脚功能43.3 单片机介绍63.5 复位电路84 软件设计94.1 系统总设计流程104.2 按键程序流程
2、设计104.3 LCD1602显示流程设计114.5 计算器扩展功能的实现124.5.1 三角函数的实现134.5.2 对数和指数函数的实现134.5.3 平方根与倒数以及余数的实现135 功能仿真及其结果155.1 软件简介155.1.1 KEIL软件简介155.1.2 PPOTUES ISIS简介155.2 仿真结果与操作说明155.2.1 系统总体仿真155.2.2 系统的操作说明166 实物制作186.
3、1 实物布局图186.2 实物PCB布线图196.3 实物运行图217 结论21附录231 设计任务与要求1.1 设计任务1.以MCS-52系列单片机为核心器件,组成一个简单的计算器。 2.电压显示采用LCD1602液晶屏显示。 3.所用的元件较少,成本低,且测量精度和可靠性较高。1.2 设计要求 1.能实现加、减、乘、除基本的四则运算 2.数码0-9及运算符号通过按键盘输入,并在液晶显示器上显示算式及运算 3.用PROTEUS仿真 4.焊接电路板并调试运行 2 设计方案本设计是实现一个有四则运算及函数运算的多功能计算器。它的硬件部分包括:一个AT89C52单片
4、机芯片,一块LCD1602液晶显示器,一个4*4的键盘,外加4个功能设置按键。AT89C52单片机为核心控制电路,LCD1602负责显示输入输出数据,利用4*4矩阵键盘加上一些功能键完成电路的键入操作部分。电路简单,功能齐全。模块图如图2.1所示。图 2.1 系统模块图根据简易计算器的功能和指标要求,本设计系统选用MCS-52系列单片机STC89C52为主控机。通过扩展必要的外围接口电路,实现对简易计算器的设计。计算器电路包括三个部分:显示电路、4*4键扫描电路、单片机微控制电路。具体设计如下:(1)由于要设计的是简单的计算器,可以进行四则运算,为了得到较好的显示效果,采用LCD1602液晶显
5、示器显示数据和结果。(2)另外键盘包括数字键(09)、符号键(+、-、×、÷)、小数点和等号键。(3)执行过程:开机显示个人信息,等待键入数值,当键入数字,通过LCD显示出来,当键入+、-、*、/运算符,计算器在内部执行数值转换和存储,并等待再次键入数值,当再键入数值后将显示键入的数值,按等号就会在LCD上输出运算结果。 52系列单片机系统4*4键盘LCD显示 晶振电路复位电路图2.2线路原理框图3 硬件电路设计3.1 键盘接口电路键盘有独立键盘和矩阵键盘。本次设计需要的按键较多,如果使用独立键盘会占用较多的I/O口。因此,本次输入键盘设计采用矩阵键盘。矩阵键盘的按键设置在
6、键盘行列线交点上,行列线分别连接到按键开关两端。当没有键按下时,行线处于高电平的状态;而当有按键按下时,行线电平则由与此行线相连的列线电平决定。运用行列扫描法可以确定按键具体位置,从而得到按键数值。键盘部分的设计如图3.1所示。 图3.1 矩阵按键输入如图3.1所示,按键输入采用4*4矩阵键盘,键盘接在单片机的P2口,可以看出16个按键共用8个I/O,相对较节约I/O口。本人在简易计算器的基础上还增加了一键多用的功能。键盘中除了包含“09”数字键,“+”“-”“×”“÷”运算键以及“.”之外,还包括了三角函数,指数函数,开根,求余数,倒数等
7、,为了实现这一个复用功能,需要进行按键的扩展。此时,则需要几个独立按键做扩展使用。独立按键的设计如图3.2所示。 图3.2 独立复用按键由3.2图可知,四个独立按键各有功能,从左往右分别是:计算器复用功能键,用来对矩阵键盘进行复用;删除键,用来撤销错误输入;存储键,用来存储结果数据;复位键,用于数据的复位;3.2 显示模块3.4.1 LCD的选择 LCD是一种工业型字符液晶,它能够显示32个字符(16列×2行),工作电压为3.3V或5V,对比度可自行调节,LCD的内部内部含有复位电路,用来提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示
8、移位等多种功能。由于LCD1602功耗低、体积小、显示多样,常用在微型仪表和低功耗应用中。市面上字符液晶绝大多数是基于HD44780液晶芯片,LCD1602控制原理也基于HD44780。LCD1602采用标准14脚(无背光)或16脚(有背光)接口,它的管脚如图3.6所示。3.4.2 LCD1602显示器的管脚功能 LCD1602采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如下表3.1所示。表3.1 LCD1602显示器引脚说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D
9、5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极 图3.3 LCD1602管脚图 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。 第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,
10、当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。第714脚:D0D7为8位双向数据线。 第15脚:背光源正极。第16脚:背光源负极。液晶与单片机的连接电路如图3.4所示。图3.4 液晶与单片机的连接电路 3.3 单片机介绍 MCS-52单片机是在一块芯片中集成了CPU、RAM、ROM、定时器/计数器和多功能I/O等一台计算机所需要的基本功能部件。如果按功能划分,它由如下功能部件组成,即微处理器(CPU)、数据存储器(RAM)、程序存储器(ROM/EPROM)、并行I/O 口、串行口、定时器/计数器、中断系统
11、及特殊功能寄存器(SFR)。单片机是靠程序运行的,并且可以修改。通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,通过使用单片机编写的程序可以实现高智能,高效率,以及高可靠性!因此我们采用单片机STC89C52作为计算器的主要功能部件,可以很快地实现运算功能。STC89C52RC引脚功能说明如图3.5所示。 图3.5 STC89C52管脚图VCC(40引脚):电源电压。VSS(20引脚):接地。P0端口(P0.0P0.7,3932引脚):P0口是一个漏极开路的8位双向I/O口。作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。在访问外部程序和数据存
12、储器时,P0口也可以提供低8位地址和8位数据的复用总线。此时,P0口内部上拉电阻有效。在Flash ROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。验证时,要求外接上拉电阻。P1端口(P1.0P1.7,18引脚):P1口是一个带内部上拉电阻的8位双向I/O口。P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流()。此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发
13、输入(P1.1/T2EX)。在对Flash ROM编程和程序校验时,P1接收低8位地址。P2端口(P2.0P2.7,2128引脚):P2口是一个带内部上拉电阻的8位双向I/O端口。P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流()。在访问外部程序存储器和16位地址的外部数据存储器(如执行“MOVX DPTR”指令)时,P2送出高8位地址。在访问8位地址的外部数据存储器(如执行“MOVX R1”指令)时,P2口引脚上的内容(就是专
14、用寄存器(SFR)区中的P2寄存器的内容),在整个访问期间不会改变。在对Flash ROM编程和程序校验期间,P2也接收高位地址和一些控制信号。P3端口(P3.0P3.7,1017引脚):P3是一个带内部上拉电阻的8位双向I/O端口。P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流()。在对Flash ROM编程或程序校验时,P3还接收一些控制信号。P3口除作为一般I/O口外,还有其他一些复用功能,如下表3.2所示:表3.2 P3口引
15、脚复用功能RST(9引脚):复位输入。当输入连续两个机器周期以上高电平时为有效,用来完成单片机单片机的复位初始化操作。看门狗计时完成后,RST引脚输出96个晶振周期的高电平。特殊寄存器AUXR(地址8EH)上的DISRTO位可以使此功能无效。DISRTO默认状态下,复位高电平有效。ALE/(30引脚):地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8位地址的输出脉冲。在Flash编程时,此引脚()也用作编程输入脉冲。在一般情况下,ALE以晶振六分之一的固定频率输出脉冲,可用来作为外部定时器或时钟使用。然而,特别强调,在每次访问外部数据存储器时,ALE脉冲将会跳过。如果需要,通过将地址
16、位8EH的SFR的第0位置“1”,ALE操作将无效。这一位置“1”,ALE仅在执行MOVX或MOV指令时有效。否则,ALE将被微弱拉高。这个ALE使能标志位(地址位8EH的SFR的第0位)的设置对微控制器处于外部执行模式下无效。3.5 复位电路复位是单片机的初始化操作,其功能是把系统初始化。当系统由于非正常操作而处于死锁状态时,为恢复正常工作状态,也需要复位重启。 RST引脚用于输入单片机的复位信号,RST复位高电平有效。在时钟电路工作后,在RST引脚应出现宽度不小于2个机器周期的高电平信号,单片机才会进入复位状态,此时,如果RST一直处于高电平状态,那么单片机也会一直处于复位状态。
17、复位操作有自动复位和手动复位两种方式。自动复位是通过外部复位电路的电容上电来实现的,也称上电复位。按键电平复位是通过使复位端经电阻与Vcc电源接通而实现的,按键电平复位也称为开关复位。目前,一些结构简单的系统中,单片机都采用按键电平复位的方式,此方式方便快捷。本次设计便采用这种方式,其复位电路如图3.6。图3.6单片机复位系统4 软件设计软件设计部分主要介绍计算器个模块的软件设计流程。设计统一采用C语言编程,C语言功能强大,同时具有高级语言和汇编语言的特点,并且可以直接对硬件进行操作。C语言运算符和数据类型相当丰富,用C语言配合单片机来进行计算器设计相当便捷。 4.1 系
18、统总设计流程 图4.1 系统运行总流程图如图4.1所示,系统主要主要由主程序、按键输入子程序、显示子程序、运算部分组成。主程序主要完成初始化功能;液晶主要负责显示输入数据和输出结果的工作;按键主要负责键入数据,进行数据运算。系统进入工作时首先进行初始化工作,之后系统将在循环以下这一过程:显示,按键扫描,键码处理,检测输入数据是否能够正确进行运算处理,如果数据正确则进行数据运算,反之,则返回到按键,重新扫描。4.2 按键程序流程设计 按键模块的的子程序执行流程为:首先需要进行行列按键扫描,此时需要一个按键消抖的过程,然后确定按键位置,在进入对应
19、键码内的数据进行处理。按键模块子程序流程图如图4.2所示。4.3 LCD1602显示流程设计当按键键入数值和结果显示时,都需要用到LCD1602作为显示屏,LCD1602显示流程如图4.3所示。图4.3 显示流程图4.5 计算器扩展功能的实现完成基本的四则运算之后,考虑扩展问题,简易计算器的扩展主要是面向科学计算器发展。因此,除了实现加减乘除四则运算,设计出能够完成一些如三角函数运算的计算器也是计算器设计的目的。 本次设计的扩展部分上面已经提到,包括三角函数,指数函数,对数函数,sqrt 平方根,倒数等。经过仿真以及C语言代码编程,上述函数已经可以实现。
20、;当我们需要进行按键复用时,按下TS&S键,此时,液晶屏左下角会出现复用标志,如图4.4所示。图4.4按键复用标志按下TS&S复用键,屏幕左下角出现“S”标志,再按一次可以复用的函数按键,即可在原计算器基础上进行一些扩展运算。因为C语言强大的math.h库函数,使得三角函数可以很方便的执行。下面来介绍扩展部分的运算情况。 4.5.1 三角函数的实现 C语言math.h库函数也能够实现三角函数,需要注意的是输入的数据要注意的是角度数据。要运算三角函数要先按一下复用键,然后再输入三角函数,再输入数字,然后在按下复用键输入角度。我们以60
21、176;角为例,来计算三角函数三角函数的运算。计算结果如图4.5所示。09图4.5 sin30°计算以上结果基本完成了计算器三角函数的实现,在每次运算结束时,可以按C键进行清零进行下一次运算。4.5.2 对数和指数函数的实现 实现三角函数功能之后,再进行下一步的函数运算展示。下面就介绍对数函数在此设计中的实现。计算器已经可以完成“lg”、“ln”和“exp”函数的计算。计算结果如图4.6所示。图4.6 lg100的计算4.5.3 平方根与倒数以及余数的实现 平方根与倒数也都可以在该计算器中实现。如图4
22、.7和4.8所示。图4.7 开根号计算开根号后数据为无穷小数时,保存到小数点后5位。图4.8显示了倒数的计算。 图4.8 倒数计算除此之外,计算器还支持求余数计算,我们以6%5为例。计算结果如图4.9所示。图4.9 6%5余数计算由以上截图可知,本次设计的计算器已经可以完成大部分基本功能,扩展部分也基本能够达到要求。5 功能仿真及其结果根据各个模块介绍以及软件设计流程图,进行硬件仿真,从而达到计算器的基本功能,并且在此基础上进行功能扩展。5.1 软件简介5.1.1 KEIL软件简介 KEIL C51是基于51系列单片机为内
23、核的,由美国KEIL Software公司研制的一款智能、实用的开发系统软件。KEIL C51为80C51系列的单片机不但提供了C语言编译环境,而且也保留了汇编环境。uVision2是由KEIL Software公司研制的51系列兼容单片机C语言软件开发工具,uVision2的集成开发环境囊括了:汇编器、编译器、实时操作系统、调试器和项目管理器。uVision2可以为用户提供一个单一而又方便的开发环境。 5.1.2 PPOTUES ISIS简介 PROTUES软件是由英国Labcenter Electr
24、onics公司研发的EDA系统设计工具软件,它可以帮助设计者进行电路分析和仿真。该软件包含其它EDA工具软件的仿真功能,而且还可以仿真单片机和外围电路。PROTUES不仅是当今最好的单片机和外围电路仿真的工具软件,而且还提供设计、仿真数字电路和分析、模拟电路及模/数混合电路的平台,真正的实现了从概念到产品的完整设计。PROTUES可以仿真51系列、PIC和AVR等主流单片机。该软件可以直接在原理图的虚拟原型上进行编译,然后配合显示和输出可以看到仿真的结果。ISIS是一款操作智能、简便,可完成系统仿真的实用软件。5.2 仿真结果与操作说明5.2.1 系
25、统总体仿真 本系统以AT89C52单片机为核心,选用11.0592MHz的晶振,利用液晶和键盘来做计算器设计,应用范围广泛而且方便实用。通过Proteus仿真环境,keil编程环境的支持,用主程序初始化系统,其他程序模块化选择的方式,进行软件调试,当各个模块都调试成功之后,添加入主程序,最后完成计算器的设计。 本设计应当达到一般计算器所具有的加、减、乘、除四则运算功能,并且在此基础上拥有一定的扩展。因此,本设计需要优化硬件电路的设计,减少串口的使用,合理的分配单片机硬件资源,在保证计算器功能正常实现的同时还需要保证计算器拥有一定的抗干扰性。根据模块需求以及计算器的工作流程基
26、本确定计算器总体的仿真设计图,系统的总体仿真图如图5.1所示。图5.1 总体仿真图 仿真图中的硬件分配: (1)P2口与P3.6、P3.7口:为输出端口,连接LCD1602的D0D7,显示数据。 (2)P1口:为输入端口,与4*4矩阵键盘连接,实现计算器的按键输入。 (3)P3.0P3.3口:连接4个独立按键,做计算器的扩展使用。 整个计算器包括键盘电路与显示电路。 运用C语言math.h函数库可以在软件方面实现四则运算,并通过KEIL软件编程生成.hex文件,然后通过PROTEUS中单片机链接.hex文件,从而使整个仿真系
27、统工作。 根据硬件仿真和软件语言编程,系统基本完成了简易计算器的功能,并且在此基础上进行了功能扩展。下面分别介绍所取得的研究成果。 5.2.2 系统的操作说明 (1)开机默认LCD1602显示屏亮起并显示本人信息,做屏保使用,按清除键可清除信息做计算器使用。 (2)计算器:09和.为数字按键;“”“”“×”“÷”为运算符号;C 是清除键,也做计算器复位使用;DEL是删除键,用于撤销上次键入的错误数据,可以连续按DEL进行连续撤销;M+键用于存储上次计算的数据和结果,按一次M+输出上次结果,按
28、TS&S 后再按此键可以输出数据。如果以M+TS&SM+'的顺序按下键盘,那么M+中的数据将会更新;TS&S键为复用键,先按下TS&S,再按下数字上标明的函数即可进行函数运算。 (3)运算格式:(符号)A 运算符(符号)B 格式中A、B是运算数据,可以是键入的数字,也可以是函数或者M+中的数据;符号即+、-号,可以随意添加减;如果本次计算没有按等号键而是继续按运算符,则结果会显示,成为下次运算的A运算符,通过这种按键方式可以进行连续运算。 函数说明:Func (符号)C,Func为函数,符号为+
29、、-,C只能是数字、M+或者是。 函数主要包括: 1)sin 正弦函数 2)Cos 余弦函数 3)tan 正切函数 4)exp 以e为底的指数函数 5)ln 自然对数值 6)lg 以10为底的对数 7)sqrt 平方根 8)dao 倒数 9) 圆周率,可以带加权 10)度 角度输入 11)xy x的y次方 12)f%
30、60; A/B的余数(双精度6 实物制作6.1 实物布局图 图6.1实物正面焊接图6.2 实物PCB布线图图6.2 实物PCB图图6.3 实物背面走线图6.3 实物运行图 图6.4 实物运算图7 结论本次课程设计是基于单片机的计算器设计,在完成基本的四则运算之后,在此基础进行了一定的功能扩展。计算器以矩阵键做数据输入,4个独立按键做多功能按键,LCD1602作为显示输出,STC89C52单片机作为系统核心进行控制。计算器能够实现14位以内的浮点数运算和1012位浮点数函数运算,具有撤销操、复位、连续计算、角度转换等功能。计算结果10-6106以内以f%方式显示,超过范围以e%方式显示
31、,保留有六位有效数字,但是计算结果范围不能超过10-381038。 本次课程设计使我清楚的认识到查资料做对比的重要性,完善自己的设计需要经过很多次的修改,不管是硬件设计还是软件设计都需查阅相关资料,这会使得效果事半功倍。通过这次课程设计,使我对计算器软硬件有了更深的理解,同时也提高了对对的单片机的内部结构以及接口电路的了解,在进行编写LCD1602液晶程序代码时,需要熟悉LCD1602的内部结构和一些常用的代码指令,要有一个清晰的逻辑思路。在调试阶段,更需要严谨细心,错误是会有的,不过只要通过仔细排错,问题总是可以解决,最终做出理想的结果,完成这次单片机课程设计。 参考文献1 谭浩强
32、.C 程序设计. 北京:清华大学出版社,2002。2 王为青,程国刚. 单片机 Keil Cx51 应用开发技术.北京:人民邮电大学出版 ,社,2007。 3 百度文库 基于单片机的信号发生器设计、基于51单片机的简易计算器设计。4 张友德,赵志英,涂时亮. 单片机微型机原理、应用和实验. 5 黄惟公.单片机原理与应用技术M.西安:西安电子科技大学出版社,2007. 6 贾立新. 电子系统设计与实践M. 北京:清华大学出版社, 2007 . 附录C程序#include "reg52.h" #in
33、clude <stdlib.h> /包含atof(),字符串->实数 #include <stdio.h> /包含sprintf(),实数->字符串 #include <string.h> /包含strcpy(),字符串复制 #include <math.h> /数学函数头文件 #define uchar unsigned char #define uint unsigned int uchar num; /*lcd*/ sbit lcdrs=P20; /LCD控制脚 sbit lcdrw=P21; sbit lcden=P22; b
34、it form; /lcd显示方式切换 uchar idata state; /lcd状态字存储 /*计算器*/ sbit reset=P33; /计算器复位 sbit back=P31; /撤销上次键入键 sbit save=P32; /存储键,存储有上次的结果和另外某次计算值 bit eqsign; /按等号标志 bit press; /键按标志 bit savesign; /可存储结果标志 bit sc; /复用标志 uchar idata process30,proc; /记忆计算过程,以便错误恢复和撤销输入 uchar idata continu=0; /连续计算运算符号存储 uch
35、ar idata pai22; / 前有数据标志 uchar idata ferror; /计算检错标志 uchar idata ywei; /屏幕移位 uchar idata count=0; /输入计数 uchar idata count_num=0; /组号计数 uchar idata result15; /计算结果立存,save uchar idata saveresult15;/存储结果数组, sc+save uchar idata jieguo15; /结果字符串 uchar idata bdate214; /待计算字符串二维组 uchar idata on_symbol; /运算
36、符号 uchar idata fsym2; /函数前符号 uchar idata ssym2; /存储组前符号 uchar idata bfun2; /计算值调用函数选择 uchar idata futojiao2; /幅度 to 角度变换 double idata date2; /计算值双精度变量组 double idata resultdate; /双精度结果值 sbit sfyong=P30; /计算器复用键 /*函数声明*/ /*延时*/void delay(uchar z); /*lcd写命令*/ void write_com(uchar com); /*lcd写数据*/ void
37、write_date(uchar date); /*lcd读状态*/ void read_date(void); /*lcd写字符串*/ void write_str(uchar *str); /*液晶初始化*/ void init(void ); /*移屏*/ void write(); /*复用提示开关*/ void shift(void); /*键盘扫描*/ uchar keyscan(void); /*计算器复位*/ void fuwei(); /*error处理*/ void callerror(void); /*撤销键入*/ void huifu(void); /*函数组前符号处理
38、*/ uchar funqian(void); /*运算符预处理*/ void cullars(uchar); /*输出存储数据预处理*/ char memory(void); /*按键功能主处理*/ void process_date(uchar press_date); /*按键功能子处理*/ void calculator(uchar press_date); /*/ void write() for(num=0;num<16;num+) write_com(0x18); delay(200); /*LCD程序*/ /*延时*/ void delay(uchar z) uchar
39、x,y; for(x=z;x>0;x-) for(y=100;y>0;y-); /*写命令*/ void write_com(uchar com) lcdrs=0; lcdrw=0; lcden=0; P0=com;/ delay(5); lcden=1; delay(5); lcden=0; /*写数据*/ void write_date(uchar date) lcdrs=1; lcdrw=0; lcden=0; P0=date;/ delay(5); lcden=1; delay(5); lcden=0; /*读AC 地址*/ void read_date(void) lcd
40、rs=0; lcdrw=1; delay(5); P0=0xff;/ lcden=1; delay(5); state=P0;/ delay(5); lcden=0;delay(5); state=state&127;/*写字符串*/ void write_str(uchar *str) uchar idata i; for(i=0;stri!='0'i+) write_date(stri); /*液晶初始化*/ void init(void ) write_com(0x38); /模式:8位数据,两行,5*7字体 write_com(0x0c); /开显示,无光标 w
41、rite_com(0x06); /向左增量移动 write_com(0x01); /清屏 /*复用提示开关*/ void shift(void) if(sc=1) read_date(); /读状态 write_com(0xc0); /显示复用提示,左下角's' write_date('s'); write_com(state+0x80);/光标还回原来位置 else read_date(); write_com(0xc0); /关闭复用提示 write_date(' '); write_com(state+0x80); return; /*键盘
42、扫描*/ uchar keyscan(void) /按行扫描,有键按下则返回键符号,否则返回null uchar idata key0,key1,keyment=0; P1=0XFe; /行1 key0=P1; key0=key0&0xf0; key1=key0; if(key0!=0xf0) delay(10); /键抖动处理 P1=0XFe; key0=P1; key0=key0&0xf0; if(key0=key1) switch(key0) case 0xe0:keyment='7'break; case 0xd0:keyment='8'
43、break; case 0xb0:keyment='9'break; case 0x70:keyment=0xfd;break; /0xfd除号在1602液晶中的代码 while(key0!=0xf0) /键释放处理 key0=P1; key0=key0&0xf0; press=1; /键按标志置1 return(keyment); P1=0XFd; /行2 key0=P1; key0=key0&0xf0; key1=key0; if(key0!=0xf0) delay(10); P1=0XFd; key0=P1; key0=key0&0xf0; if(
44、key0=key1) switch(key0) case 0xe0:keyment='4'break; case 0xd0:keyment='5'break; case 0xb0:keyment='6'break; case 0x70:keyment='*'break; while(key0!=0xf0) key0=P1; key0=key0&0xf0; press=1; return(keyment); P1=0XFb; /行3 key0=P1; key0=key0&0xf0; key1=key0; if(key
45、0!=0xf0) delay(10); P1=0XFb; key0=P1; key0=key0&0xf0; if(key0=key1) switch(key0) case 0xe0:keyment='1'break; case 0xd0:keyment='2'break; case 0xb0:keyment='3'break; case 0x70:keyment='-'break; while(key0!=0xf0) key0=P1; key0=key0&0xf0; press=1; return(keyment)
46、; P1=0XF7; /行4 key0=P1; key0=key0&0xf0; key1=key0; if(key0!=0xf0) delay(10); P1=0XF7; key0=P1; key0=key0&0xf0; if(key0=key1) switch(key0) case 0xe0:keyment='.'break; case 0xd0:keyment='0'break; case 0xb0:keyment='='break; case 0x70:keyment='+'break; while(key0!=0xf0) key0=P1; key0=key0&0xf0; press=1; return(keyment); if(reset=0) /复位键 delay(10);if(reset=0) keyment=' ' press=1; while(reset=0);/键释放 return(keyment); else if(back=0) /撤销前次输入 delay(10)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论