




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、辽 宁 工 业 大 学 单片机原理及接口技术 课程设计(论文)题目: 简易计算器的设计 院(系): 电气工程学院 专业班级: 自动化132班 学 号: 130302044 学生姓名: 陆强 指导教师: (签字)起止时间: 2016.6.6-2016.6.17 课程设计(论文)任务及评语院(系):电气工程学院 教研室:自动化 学 号130302044学生姓名陆强专业班级自动化132班课程设计(论文)题目简易计算器的设计课程设计(论文)任务课题完成的功能、设计任务及要求、技术参数实现功能简易计算器采用4*4键盘输入要计算的数字及要进行的计算操作,并显示上次输入的数据及结果,能够进行加、减、乘、除的
2、运算,并存储上次计算的值。硬件设计包括CPU选型、最小系统电路、按键电路、显示电路等。设计任务及要求1、确定设计方案,画出方案框图。2、进行硬件电路的设计,包括元器件选择,绘制原理图。3、进行实物的制作4、绘出程序流程图,并编写完整程序。5、要求认真独立完成所规定的全部内容;所设计的内容要求正确、合理。6、按学校规定的格式,撰写、打印设计说明书一份;设计说明书应在4000字以上。技术参数密码长度可修改,密码可修改,密码输入正确,在显示屏上出现Right,并控制开锁;密码错误出现Error,连续输入错误三次,隔30S才能再次输入。进度计划1、布置任务,查阅资料,确定系统设计方案(2天)2、系统硬
3、件设计及实物制作(3天)3、系统软件设计及编写功能程序及调试(3天)4、撰写、打印设计说明书(1天)5、验收及答辩。(1天)指导教师评语及成绩 平时: 论文质量: 答辩: 总成绩: 指导教师签字: 年 月 日注:成绩:平时20% 论文质量60% 答辩20% 以百分制计算摘 要计算器是日常生活中比较的常见的电子产品之一。在各种智能化产品中也常常会用到计算器,而且在现代化系统中人们对计算器技术要求更加的严格和精确,因此计算器已成为生产中必不可少的设备。本设计的硬件包括4*4键盘、单片机最小系统、液晶显示器,软件包括C语言编程和KeiluVision5。简易计算器的设计使得计算器的技术更加的成熟、简
4、单。简易计算器设计是以AT89C52单片机为核心的,输入采用4*4矩阵键盘,简易计算器不仅可以进行加、减、乘、除带符号数字运算(八位整数),还可以进行负数运算和错误提示,并在液晶显示器LCD1602上显示操作结果。计算器的出现不仅使计算数据越来越方便,而且在算术方面节省了大量的计算时间。关键词:单片机;矩阵键盘;液晶显示;计算器 目 录第1章 绪论1第2章 课程设计的方案22.1 概述22.2 系统组成总体结构2第3章 硬件设计33.1 单片机最小系统设计33.1.1 AT89S52单片机简介33.1.2 AT89C52单片机的引脚功能及说明3 单片机最小系统设计53.2 液晶显示器电路设计6
5、3.2.1 1602液晶显示器的简介6 液晶引脚说明7 液晶显示模块电路73.3 电源电路的设计83.4 按键电路设计83.5 总体电路图设计9第4章 软件设计104.1 主程序流程图设计104.2 子程序流程图设计10第5章 系统分析与调试125.1 系统调试125.2 实验数据与分析12第6章 课程设计总结15参考文献16附录I17附录II18第1章 绪论计算工具最早诞生于中国,中国古代最早采用的一种计算工具叫筹策,也被叫做算筹。这种算筹多用竹子制成,也有用木头,兽骨充当材料的,约二百七十枚一束,放在布袋里可随身携带。另外直到今天仍在使用的珠算盘,是中国古代计算工具领域中的另一项发明,明代
6、时的珠算盘已经与现代的珠算盘几乎相同。 17世纪初,西方国家的计算工具有了较大的发展,英国数学家纳皮尔发明的“纳皮尔算筹”,英国牧师奥却德发明了圆柱型对数计算尺,这种计算尺不仅能做加、减、乘、除、乘方和开方运算,甚至可以计算三角函数、指数函数和对数函数。这些计算工具不仅带动了计算器的发展,也为现代计算器发展奠定了良好的基础,成为现代社会应用广泛的计算工具。1642年,年仅19岁的法国伟大科学家帕斯卡引用算盘的原理,发明了第一部机械式计算器,在他的计算器中有一些互相联锁的齿轮,一个转过十位的齿轮会使另一个齿轮转过一位,人们可以像拨电话号码盘那样,把数字拨进去,计算结果就会出现在另一个窗口中,但是
7、它只能做加减运算。1694年,莱布尼兹在德国将其改进成可以进行乘除的计算。此后,一直到20世纪50年代末才有电子计算器的出现。电子计算器的出现给人们带来了很大的方便,不仅使计算更为方便,而且使计算结果更加准确,人们的日常生活中已经离不开计算器了,社会的各个角落都有它的身影,比如商店,办公室,学校等计算器电源采用交流转换器或电池,电池可用交流转换器或太阳能转换器再充电。为节省电能,计算器都采用CMOS工艺制作的大规模集成电路(见互补金属-氧化物-半导体集成电路),并在内部装有定时不操作自动断电电路。计算器可选用的外围设备有微型打印机、盒式磁带机和磁卡机等。现在社会大部分使用的是都是科学计算器,简
8、易计算器在我们日常生活中已经不常见了,但是它的设计非常重要,科学计算器只是在简易计算器的设计的基础上加以改动,加部分功能,但是如是没有简易计算器的出现,科学计算器也不会出现及普及,因为简易计算器是最基础的,但同时也是最重要的,所以简易计算器的设计显得尤为重要。第2章 课程设计的方案2.1 概述计算器一般由运算器、控制器、存储器、键盘、显示器、电源和一些可选外围设备及电子配件通过人工或机器设备组成。低档计算器的运算器、控制器由数字逻辑电路实现简单的串行运算,其随机存储器只有一、二个单元,提供累加存储用。键盘是计算器的输入部件,一般采用接触式或传感式。为减少计算器的尺寸,一键常常有很多功能。显示器
9、是计算器的输出部件,有发光二极管显示器或液晶显示器等。除显示加、减、乘、除的计算结果外,还有负数运算、错误显示等。2.2 系统组成总体结构AT89C52主控制模块液晶显示模块晶振模块 矩阵键盘模块电源模块图2.1系统框图本设计是以STC89C52单片机为核心器件,配合电阻电容晶振等器件,构成单片机的最小系统。其它个模块围绕着单片机最小系统展开。其中包括,显示设备采用1602液晶,该液晶可以进行2行内容的显示。对于本设计来说,第1行显示输入的内容,第2行显示计算结果。输入设备采用4*4的矩阵键盘,共16个按键,除去10个数字键后,剩下的六个按键功能分别为加、减、乘、除、等于、清除。电源供电则采用
10、USB的形式,常用的供电电源可以是手机充电器、移动电源、电脑USB口等。第3章 硬件设计3.1 单片机最小系统设计3.1.1 AT89S52单片机简介单片机是单片微型机的简称,故又称为微控制器MCU(Micro Control Unit)。通常由单块集成电路芯片组成,内部包含有计算机的基本功能部件:中央处理器CPU,存储器和I/O接口电路等。因此,单片机只要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机广泛用于智能产品,智能仪表,测控技术,智能接口等,具有操作简单,实用方便,价格便宜等优点,而其中AT89S52以MCS-51为内核,是单片机中最典型的代表,应用于各种控制领域。
11、 AT89S52单片机是一种低功耗高性能的CMOS8位微控制器,内置8KB可在线编程闪存。该器件采用Atmel公司的高密度非易失性存储技术生产,其指令与工业标准的80C51指令集兼容。片内程序存储器允许重复在线编程,允许程序存储器在系统内通过SPI串行口改写或用同用的非易失性存储器改写。通过把通用的8位CPU与可在线下载的Flash集成在一个芯片上,AT89S52便成为一个高效的微型计算机。它的应用范围广,可用于解决复杂的控制问题,且成本较低。AT89S52单片机如图3.1所示。 图3.1 单片机AT89C523.1.2 AT89C52单片机的引脚功能及说明STC89C52有40个引脚,32个
12、外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。STC89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。AT89C52的主要功能特性如下:1)兼容MCS51指令系统;2)8k可反复擦写(1000次)Flash ROM; 3)32个双向I/O口; 4)256*8bit内部RAM ;5)3个16位可编程定时/计数器
13、中断;6)时钟频率0-24MHz; 7)2个串行中断;8)可编程UART串行通道; 9)2个外部中断源; 10)共8个中断源; 11)2个读写中断口线; 12)3级加密位; 13)低功耗空闲和掉电模式; 14)软件设置睡眠和唤醒功能;AT89C52系列单片机一般采用40个引脚,双列直插式封装,用HMOS工艺制造,其外部引脚排列如图3.2所示。其中,各引脚的功能为: 图3.2 AT89C52的引脚图 1)主电源引脚VCC(40脚),接5V电源正端;GND(20脚),接5V电源地端;2)外接晶体或外部振荡器引脚XTAL1(19脚),接外部晶振和微调电容的一个引脚。在单片机内部,它是振荡电路的一个反
14、相放大器的输入端,振荡电路的频率就是晶体的固有频率。当采用外部振荡器时,此引脚应接地。XTAL2(18脚),接外部晶振和微调电容的另一个引脚。在片内接至反相放大器的输出端和内部时钟电路的输入端。当采用外部振荡器时,此脚接外部振荡器的输出端。3)控制信号线RESET(9脚),复位信号输入端,复位/掉电时内部RAM的备用电源输入端。ALE(30脚),地址锁存允许/编程脉冲输入,用ALE锁存从P0口输出的低8位地址。在对片内EPROM编程时,编程脉冲由此输入。PSEN (29脚),外部程序存储器读选通信号,PSEN端可以驱动8个LSTTL门电路,低电平有效。EA(31脚),访问外部存储器允许/编程电
15、压输入。EA为高电平时,访问内部存储器;低电平时,访问外部存储器。3.1.3 单片机最小系统设计基于ST89C52的单片机最小系统如图3.3所示,整个单片机最小系统由复位电路部分、晶振电路部分、辅助电路等三个部分组成。复位电路是由极性电容C1和电阻R3组成的,其中电容C1为10uF,电阻R3的阻值为10K,复位电路的工作原理是利用电容电压不能突变的性质进行设计的,一旦供电,RESET脚就会出现高电平,并且高电平持续时间是由R和C的大小决定的,只有当RESET引脚上出现两次及两次以上的高电平才会复位,所以选取适当的R和C就可以保证及精准又可靠的复位。晶振电路是由两个电容及一个晶振组成的,其中两个
16、电容分别为C2和C3,其大小为30pF,晶振X1的大小为12M。电容的作用是帮助晶振更加容易的起振,所以电容的大小将影响起振的效果,晶振越大效果越好,取值范围为15-33pF,所以我们取整数30pF。而晶振的取值也可以是24M,因为晶振越大单片机的执行速度就越快,所以在设计单片机最小系统时,晶振电路离单片机越近越好。辅助电路是由一个10K大的排阻R1和电源组成,其作用就是在扩展I/O口时使用,以便接LCD1602液晶显示器。因为STC89C52的P0口是漏极开路输出,所以在P0口接了一个10K的排阻R1,这样子就可以使P0口作为普通的I/O口使用,而且P0口还得以充分利用,P2口用作扩展用,用
17、于接外部扩展的RAM和ROM,本设计用P0口来做液晶的数据口。单片机最小系统如图3.3所示。图3.3 单片机最小系统电路3.2 液晶显示器电路设计3.2.1 1602液晶显示器的简介液晶显示器是一种显示器件,具有小体积、轻重量、低功耗等特色。由于其功耗低、显示的信息量大(例如,文本,图形,曲线等)、无电磁辐射、使用寿命长,它已被广泛应用在便携式电子产品。本系统采用的1602是一款物美价廉的液晶显示屏,可以显示2行标准字符,每行共有16个字符。在通信系统,智能操作仪表和办公设备的自动化中被广泛的应用,主要功能是显示ASCII字符,因此被称为“字符型显示装置”。当在内部没有适合的汉字库的液晶类型显
18、示器想要表达汉字的时候,第一步就是要获得想要的汉文或者图形的子模数据。子模块的软件不能直接提取子模块的数据5*8点阵,可以从手工提取汉字的字体以模具。第二步,把取得的汉字子模数据保存在液晶存储器里面。1602LCD主要技术参数:u1)显示容量:16*2个字符u2)芯片工作电压:4.55.5Vu3)工作电流:2.0mA(5.0V)u4)模块最佳工作电压:5.0Vu5)字符尺寸:2.95*4.35(W*H)mm3.2.2 液晶引脚说明第1脚:接地电源VSS。 第2脚:5V正电源为VDD。 第3脚:VL为液晶显示器对比度调整的端口,对比度的强弱由接电源的不同决定,对比度的调整可以通过一个10k的电位
19、器。 第4脚:RS是寄存器选择,高水平的数据寄存器,低选择指令寄存器。 第5脚:R / W的读和写信号线,高水平低的读操作,写操作。 第6脚:使能端E,当E端由1至0时,液晶模块中的命令开始被运行。 第7至14脚:D0-D7为8位双向数据线。第15脚:背光源正极。 第16脚:背光源负极。3.2.3 液晶显示模块电路液晶模块的电路的连接图如图3.4所示,LCD1602一共有16个引脚,引脚1和引脚2分别接到了电路的地和电源,这2个脚是液晶工作时电源输入端引脚。而第3引脚则是通过一个10K的滑动电阻器连接到地端,可通过调节该电位器来调节液晶的清晰度。第4脚是液晶的寄存器控制脚,接到了单片机的P12
20、脚上。第5脚是液晶的读写控制脚,接到了单片机的P13脚上。第6脚是液晶的使能端脚,接到了单片机的P14脚上。第7脚到第14脚是液晶的数据/地址8位总线,接到了单片机的P0口上。最后第15脚和第16脚是液晶的背光电源脚,直接连接系统VCC和GND。 图3.4 液晶模块连接图3.3 电源电路的设计本设计是采用USB借口提供电源供电的,由于通过USB的电源输出的电压都为5V,符合给单片机和液晶的供电电压,所以可以直接给单片机和液晶供电,电源电路设计较为简单,不需要加稳压和降压电路,只需要一个USB接口和按键开关即可,电源电路的连接图如图3.5所示。 图3.5 电源电路3.4 按键电路设计按键电路的设
21、计是采用4*4的是16个按键的矩阵式按键。键盘是单片机系统中最常用的人机对话输入设备,用户通过键盘向单片机输入数据或指令。键盘控制程序需完成的任务有:监测是否有键按下,有键按下时,在无硬件去抖的动电路时,应用软件延时方法消除按键抖动影响;当有多个键同时按下时,只处理一个按键,不管一次按键持续多长时间,仅执行一次按键功能程序。矩阵按键扫描程序是一种节省I/O口的方法,按键数目越多节省I/O口就越可观,思路:先判断某一列(行)是否有按键按下,再判断该行(列)是那一只键按下。但是,在程序的写法上,采用了最简单的方法,使得程序效率最高。本程序中,如果检测到某键按下了,就不再检测其它的按键,这完全能满足
22、绝大多数需要,又能节省大量的CPU时间。本键盘扫描程序的优点在于:不用专门的按键延时程序,提高了CPU效率,也不用中断来扫描键盘,节省了硬件资源。另外,本键盘扫描程序,每次扫描占用CPU时最短,不论有键按下或者无键按下都可以在很短的时间完成一次扫描。本设计由于用到的按键比较多,故采用矩阵键盘的方式和单片机进行连接,不同按键按下具有不同的按键功能,本设计共用到的按键共16个,除去10个数字键后,剩下的六个按键功能分别为加、减、乘、除、等于、清除。按键的连接图3.6所示。 图3.6 按键电路3.5 总体电路图设计总体电路图见附录I所示。第4章 软件设计4.1 主程序流程图设计主程序的功能主要是LC
23、D显示与清屏、液晶的光标定位、液晶初始化、键盘扫描、按键处理、子程序调用和判断当前状态等。主程序的设计是整个程序设计的最重要的部分,不仅可以体现设计人的思想结构,还可以体现出设计人对设计理解的深度和认识的程度。主程序流程图如下图4.1所示。开始系统初始化LCD显示按键处理判断当前状态是否继续进行?Y是否N结束图4.1 主程序流程图4.2 子程序流程图设计子程序设计包括键盘扫描子程序和显示模块子程序的设计。键盘扫描子程序,首先读出P1的低四位,然后读出P1口的高四位。然后键值并显示缓存。然后将键如的值转换为ASCII码然后就可以软件来设置硬件按键各个键代表的内容。读键程序使用的是反转法读键,不管
24、键盘矩阵的规模大小,均进行两次读键。第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。数字键按下则将相应的数字送入缓存区,功能键按下则执行相应的程序。显示模块程序首先要对显示模块进行初始化;然后控制光标的位置;定义液晶显示的控制端口,用SBIT指令完成;然后设置清屏、关闭显示、归位、开显示、显示位置的首地址等等。子程序的设计是整个设计的中间部分,用于主程序中的指令的调用,主要是运算部分的加、减、乘、除和功能部分的等于、清零等。除此之外,在本设计中又添加了错误显示和负数运算的功能。子程序流程图如下图4.2所示。开始 清屏扫描键
25、盘加减乘除运算子程序液晶显示显示结束?N Y 返回图4.2 子程序流程图第5章 系统调试与分析5.1 系统调试调试是整个系统功能否实现的关键步骤,我们将整个调试过程分为两大部分:硬件调试和软件调试。硬件调试主要工具是万用表和烙铁等工具,主要是为了排查板子焊错线、焊少线、短路和断路等情况。可通过电压、电流、电阻等物理量的测量,再进行推测,最终发现存在问题的地方,利用烙铁进行维修。通常软件调试应具备四种技能,跟踪、断点、查看变量和更改数值等。整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各
26、个子程序模块进行分别调试。5.2 实验数据与分析本设计是简易计算器的设计,由单片机最小系统、矩阵键盘、液晶显示、晶振电路等部分组成,具体实物如下图5.1所示。 图5.1 实物图 此设计是简易计算器的设计,除存在一些简单的运算如:加、减、乘、除等基本运算外,还有错误显示、负数运算等部分功能,以下为实物运行状态下的简单运行的结果:1)加减法运算:例如9加6等于15得运算如下图5.2所示,9减4等于5的运算如图5.3所示。图5.2 加法运算 图5.3 减法运算2)乘除法运算:例如2乘以8等于16的运算如下图5.4所示,99除以9等于11的运算如下图5.5所示。图5.4 乘法运算图5.5 除法运算 本
27、次设计加减法的最高位只能为4位数,超过四位数将不显示,运行结果将只会运行之前显示的前四位数之间的运算,也就是说当按键被按下五次,五次之间没有运算符号键的按下时,将只显示前四次的按键结果,同时不显示的数也不会参与运算。 简易计算器的设计不仅只有加、减、乘、除等基本运算,而且还有负数运算和错误显示的功能,使得计算器更加灵活,应用更为方便,所适用的场合也越来越多。3)错误显示:当除数为0时出现错误显示,例如22除以0出现错误的运算如下图5.6所示。 图5.6错误显示4)负数运算:例如3减去9等于负6的运算如下图5.7所示。图5.7负数运算以上为简易计算器的加、减、乘、除及负数运算和错误显示的结果,从
28、显示中可以看出来本次设计的程序是对的,运算结果没有错误,这也间接告诉我们中间的焊接过程也没有出现问题,所以总结来说,本次设计还是比较成功的。第6章 课程设计总结单片机课程设计终于结束了,通过紧张的工作,完成了我的设计任务-简易计算器的设计。总的来说,这次课程设计是还算成功的。当然,这其中也经历了许多坎坷,但是在我的坚持不懈下,在郭老师的细心指导下,在同学们的热情帮助下,最终克服了种种困难,取得了成功。 刚开始接到这个计算器的课程设计任务时,因为以前动手实践做过类似的题目,于是在脑海中初步构建了编写程序的一些控制程序。但是由于缺乏编写大量程序的经验,不能如行云流水般的将全部的各部分代码写出,于是
29、去网上查找相关资料,了解计算器的输入控制原理、运算处理以及显示的原理。了解之后自己尝试编写程序,在此过程中,其中键盘扫描和动态扫描显示扫描程序困扰了我很久,经过几天的辛苦工作,终于初步把所需要的程序编好了,于是就用Keil uversion5进行仿真,在仿真期间也发现了许多错误,基本上都是平日容易犯的错误,比如忘记了子程序标号、死循环程序、标点符号的漏写等。经过反复的编译差错,仿真编译通过后,Keil生成的Hex文件.然后将Hex文件导入仿真软件进行仿真,发现软件与硬件不能够对应协调工作,于是分别对软件和硬件进行检查,经过反复的仿真调试,并且在郭老师和同学的热心帮助和自己对每个子程序进行仿真观
30、察下,终于在设计快结束时成功的调试出结果了。这就是我的课程设计的经过,看似简单,过程却曲折艰辛。通过这次单片机课程设计,我进一步加深了对单片机的了解。并进一步熟练了对Keil软件的操作。在编写程序的过程中,遇到了很多问题,使我发现自己以前学习上存在的不足,对以前所学过的知识理解得不够深刻,掌握得不够牢固,对C语言掌握得不够好。通过与同学探讨和请教老师,终于把问题都解决了,并加深了对计算器工作的原理的了解。做单片机课程设计时,先查阅相关知识,把原理吃透,确定一个大的设计方向,在按照这个方向分模块的把要实现的功能用流程图的形式展示。学会了怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中
31、怎么样去克服心理上的不良情绪。总之,通过这次课程的设计,进一步了解了单片机的应用及原理,收获很大,对软件编程、排错调试、查阅资料等方面得到较全面的锻炼和提高。参考文献1 楼然苗,李光飞.单片机课程设计指导M.北京:北京航空航天大学出版社,2012. 2 梅丽凤,王艳秋.单片机原理及接口技术M.北京:清华大学出版社,2015.3 颜晖.C语言程序设计M.北京:高等教育出版社,2012.4 徐昆良,基于AT89C52单片机的简易计算器设计与仿真J.电脑知识与技术.2015,24(16):14-20.5 槽瑞,徐森.基于单片机的计算器的设计J.科技视界.2012,12(4):121-121. 6 宋
32、慧超.简易计算器的设计与仿真J.科技创新导报.2015,23(29):7-9.7 吴洋.基于单片机的建议计算器的设计J.电子世界.2016,34(8):56-56.8 李峡.基于单片机控制的简易计算器J.电子产品世界.2012,39(9):10-11.9 吴芳琴.基于单片机的简易计算器设计J.电子世界.2015,17(19):20-22.10 刘利华.简易计算器的设计与制作J.无线互联网科技.2014,13(4):17-19.11 程晓艳.基于单片机控制的计算器设计J.才智创新.2013,13(4):5-7.12 董雷刚.基于单片机的计算器的设计J.电脑知识技术.2012,31(4):42-4
33、4.13 周怀芳.简易计算器的设计与实现J.天津联合学报.2013,25(6):11-12.14 王丽琴.数字式计算器设计与仿真J.现代制造技术.2015,21(6):75-75.15 李嘉诚.简易数学计算器设计与实现J.软件导刊.2015,35(5):14-16.附录I 总体电路图附录II #include / 包含51单片机相关的头文件#define uchar unsigned char/ 以后unsigned char 就可以用uchar代替#define uint unsigned int/ 以后unsigned int 就可以用uint 代替#define ulong unsign
34、ed long/ 以后unsigned ulong就可以用ulong代替sbit LcdRs_P = P27; / 1602液晶的RS管脚 sbit LcdRw_P = P26; / 1602液晶的RW管脚 sbit LcdEn_P = P25; / 1602液晶的EN管脚uint num1;/ 运算数1uint num2; / 运算数2ulong num3; / 计算结果uchar cal; / 运算符号,1加,2减,3乘,4除uchar num1_flag;/ 运算数1的输入标志uchar num2_flag;/ 运算数2的输入标志void DelayMs(uint time)uint i
35、,j;for(i=0;itime;i+)for(j=0;j112;j+);/ 1602液晶写命令函数,cmd就是要写入的命令void LcdWriteCmd(uchar cmd) LcdRs_P = 0; LcdRw_P = 0; LcdEn_P = 0; P0=cmd;DelayMs(2); LcdEn_P = 1; DelayMs(2); LcdEn_P = 0; / 1602液晶写数据函数,dat就是要写入的命令void LcdWriteData(uchar dat) LcdRs_P = 1; LcdRw_P = 0; LcdEn_P = 0; P0=dat;DelayMs(2); Lc
36、dEn_P = 1; DelayMs(2); LcdEn_P = 0; / 1602液晶初始化函数void LcdInit() LcdWriteCmd(0x38); / 16*2显示,5*7点阵,8位数据口 LcdWriteCmd(0x0C); / 开显示,不显示光标 LcdWriteCmd(0x06); / 地址加1,当写入数据后光标右移 LcdWriteCmd(0x01); / 清屏 / 液晶光标定位函数void LcdGotoXY(uchar line,uchar column)/ 第一行 if(line=0) LcdWriteCmd(0x80+column); / 第二行 if(lin
37、e=1) LcdWriteCmd(0x80+0x40+column); / 液晶输出字符串函数void LcdPrintStr(uchar *str) while(*str!=0) LcdWriteData(*str+);/ 液晶输出数字void LcdPrintNum(uchar num)LcdWriteData(num+0x30); / 矩阵键盘扫描程序,按键对应的返回值如下所示:/ | 第1列 第2列 第3列 第4列 |/ |第1行 1 2 310 |/ |第2行 4 5 6 11 |/ |第3行 7 8 9 12 |/ |第4行 13 0 14 15 |/ -/ 如果扫描不到有按键按下
38、,则返回99 char KeyScanf() uchar ret=99; uchar temp;/*第一行按键的判断*/ P1=0xfe;/ 让P10口为低电平 temp=P1&0xf0;/ 变量temp保存P1口高4位的电平状态 switch(temp)/ 根据temp变量的值,判断不同的按键case 0x70: ret=1; break;/ 第一个按键被按下case 0xb0: ret=2; break;/ 第二个按键被按下case 0xd0: ret=3; break;/ 第三个按键被按下case 0xe0: ret=10; break; / 第四个按键被按下/*第二行按键的判断*/ P
39、1=0xfd;/ 让P11口为低电平 temp=P1&0xf0;/ 变量temp保存P1口高4位的电平状态 switch(temp)/ 根据temp变量的值,判断不同的按键case 0x70: ret=4; break;/ 第一个按键被按下case 0xb0: ret=5; break;/ 第二个按键被按下case 0xd0: ret=6; break;/ 第三个按键被按下case 0xe0: ret=11; break; / 第四个按键被按下/*第三行按键的判断*/ P1=0xfb;/ 让P12口为低电平 temp=P1&0xf0;/ 变量temp保存P1口高4位的电平状态 switch(t
40、emp)/ 根据temp变量的值,判断不同的按键case 0x70: ret=7; break;/ 第一个按键被按下case 0xb0: ret=8; break;/ 第二个按键被按下case 0xd0: ret=9; break;/ 第三个按键被按下case 0xe0: ret=12; break; / 第四个按键被按下/*第四行按键的判断*/ P1=0xf7;/ 让P13口为低电平 temp=P1&0xf0;/ 变量temp保存P1口高4位的电平状态 switch(temp)/ 根据temp变量的值,判断不同的按键case 0x70: ret=13; break;/ 第一个按键被按下cas
41、e 0xb0: ret=0; break;/ 第二个按键被按下case 0xd0: ret=14; break;/ 第三个按键被按下case 0xe0: ret=15; break; / 第四个按键被按下return ret; / 返回按键的扫描结果/ 主函数void main() uchar ret; uchar i; LcdInit();while(1) LcdWriteCmd(0x01); / 清除屏幕显示LcdWriteCmd(0x0f); / 开启光标闪烁num1=0; / 运算数1 清零num2=0;/ 运算数2 清零num3=0; / 计算结果 清零cal=0; / 运算符号 清零i=0; / 临时变量 清零num1_flag=0;/ 运算数1输入标志 清零num2_flag=0; / 运算数2输入标志 清零while(1)ret=KeyScanf(); / 读取矩阵键盘的扫描结果if(ret!=99)/ 返回值不等于99,说明有按键按下了 /*检测到
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 六一儿童节超市活动方案
- 医学院考试试题及答案
- 六一图书活动方案
- 六一学校班级活动方案
- 六一文具促销活动方案
- 六一活动泡泡画活动方案
- 六一活动篮球赛活动方案
- 六一特色签到活动方案
- 六一糖果义卖活动方案
- 六一节日活动方案
- 国家公务员考试准考证模板
- 设备采购质量保证措施
- 机房设备安装工程及移动通信工程施工工艺图解
- 国内生态工业园区发展分析
- YY/T 0292.1-1997医用诊断X射线辐射防护器具第1部分:材料衰减性能的测定
- LY/T 1697-2017饰面木质墙板
- GB/T 97.1-2002平垫圈A级
- GB/T 5121.27-2008铜及铜合金化学分析方法第27部分:电感耦合等离子体原子发射光谱法
- GB/T 1449-2005纤维增强塑料弯曲性能试验方法
- 【空间分析】01基于ArcGIS污水处理厂选址分析
- 叠合板监理实施细则
评论
0/150
提交评论