基于stc89c52单片机简易计算器的设计内容摘要:

液晶模块内部的控制器共有 11 条控制指令,丰富的指令可以完成液晶的时序控制、工作方式设置和数据显示等。 采用的 LCD1602 液晶模块是标准 16 针插座,接口电路如图 26 所示,及各引脚说明如表 26 所示。 11 61 51 41 31 21 11 098675432V S SER / WR SV LV D DD 2D 1D 0D 7D 6D 5D 4D 3B L KB L A1 6 0 2+ 5 DR 2 = 2 0 0P 1 7P 1 6P 1 5P 1 4P 1 3P 1 2P 1 0P 2 2P 2 1P 2 00 . 1 u FC 6+ 5 DI P 2 图 26 LCD1602 的引脚接口电路图 10 表 22 LCD1602 的引脚说明 第 1 脚 Vss 为地电源 第 2 脚 VDD 接 5V 正电源 第 3 脚 Vo 为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生 “鬼影 ”,使用时可以通过一个10K 的电位器调整对比度。 第 4 脚 Rs 为寄存器选择,高电平选择数据寄存器、低电平选择指令寄存器。 第 5 脚 Rw 为读写信号线,高电平时进行读操作,低电平时选择指令寄存器。 第 6 脚 E 端为使能端,当 E 端由高电平跳变成低电平时,液晶模块执行命令。 第 714 脚 D0D7 为 8 位双向数据线。 第 1516 脚 背 光阳极和背光阴极。 其他方面简介 DDRAM 用来暂存显示字符的代码,共 80 个字节, DDRAM 的各个单元对应着显示屏上的各个字符位,如图 226 所示。 因此, DDRAM 的地址也就意味着显示字符的地址,显示字符时首先要向 LCD 送显示字符地址。 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D OE OF 10 …… 27 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 …… 67 图 226 DDRAM 单元地址与显示屏字符位的对应关系 LCD1602 的主要技术参数: ( 1)显示容量为 16*2 个字符; ( 2)芯片工作电压为 ; ( 3)工作电流为 ( ); ( 4)模块最佳工作电压为 ; ( 5)字符尺寸为 *( W*H) mm。 LCD 的特点: LCD 16 字 *2 行 11 ( 1)低压微功耗; ( 2)平板型结构; ( 3)被动显示型(无眩光,不刺激人眼,不会引起眼睛疲劳); ( 4)显示信息量大(因为像素可以做得很小); ( 5)易于彩色化(在色谱上可以非常准确的复现); ( 6)无电磁辐 射(对人体安全,利于信息保密); ( 7)长寿命(这种器件几乎没有什么劣化问题,因此寿命极长,但是液晶背光寿命有限,不过背光部分可以更换)。 3. 计 算器设计原理分析 设计方案 一 本设计需要使用 LCD 液晶显示屏和编码键盘。 故选择静态显示和用 4*4 的按键键盘,使用 LCD1602 液晶显示屏来显示运算过程和运算结果。 主程序进行初始化,其他的程序选择模块式的方式。 首先对每个模块进行调试,当模块调试成功后,逐一地加入主程序中,最后完成整个软件部分的设计。 计算器硬件方案及硬件资源分配 硬件 资源分配 主要用到的硬件:单片机 STC89C52 、液晶显示屏 LCD1602 、 4*4 按键键盘硬件分配: P3 口:作为输入口,与键盘连接,实现数据的输入; P0、 P2 口:作为输出口( P2 口为高位, P0 口为低位),控制 LCD 液晶显示屏显示数据的结果; 液晶显示屏 LCD1602 显示输出。 系统的硬件设计 为了更好地实现系统的功能,硬件电路的设计应该遵循以下原则: 优化硬件电路 采用软件设计与硬件设计相结合的方法。 尽管采用软件来实现硬件系统的功能时,也许响应的时间会比单纯使用硬件时长,而且还要占用 微处理器( MCU)的时间;但是,用软件实现硬件的功能可以简化硬件结构,提高电路的可靠性。 所以,在设计本系统的时候,在满足可靠性和实时性的前提下,尽可能地通过软件来实现硬件功能。 可靠性及抗干扰设计 12 根据可靠性设计理论,系统所用芯片数量越少,系统的平均无故障时间越长。 而且,所用芯片数量越少,地址和数据总线在电路板上受干扰的可能性也就越小。 因此,系统的设计思想是在满足功能的情况下争取较少数量的芯片。 功能扩展是否灵活是衡量一个系统优劣的重要指标。 一次设计往往不能完全考虑到系统的各个方面,系统需要不断完善以及 进行功能升级。 进行功能扩展时,应该在原有设计的基础上,通过修改软件程序和少量硬件完成。 对于本系统而言,就是要求在系统硬件不变的情况下,能够通过修改软件程序,完成功能的升级和扩展。 根据提出的系统设计方案,结合以上三条原则,确定了系统硬件的设计。 计算器主要由以下一些功能模块组成:非编码键盘模块、运算模块(单片机内部)、 LCD 液晶显示模块等。 该系统的硬件设计采用了模块化的设计方法。 STC89C52 单片机与 LCD 液晶显示屏显示电路是整个电路的核心,它们能实现系统的功能要求。 简易计算器主要包括:键盘电路、运算电路 、输出显示电路。 前面说明了该系统的设计,系统采用了比较简单的设计方案,所以该系统的硬件设计的总外围电路不会产生过多的干扰。 下面对系统的外围电路分别作了说明。 键盘部分采用4*4 按键键盘,显示部分采用 LCD 液晶显示屏完全能够很好地实现显示方面的要求。 键盘电路的设计 键盘可分为两类:编码键盘和非编码键盘。 编码键盘是较多按键( 20 个以上)和专用驱动芯片的组合;当按下某个按键时,它能够处理按键抖动、连击等问题,直接输出按键的编码,无需系统软件干预。 P 3 0P 3 1P 3 2P 3 31 2 34 5 67 8 90 =.+*/ 图 31 键盘电路 13 通用计算机使用的键盘就是编码 键盘。 在智能仪器中,使用并行接口芯片 8279 或串行接口 HD7279 均可以组成编码键盘,同时还可以兼顾数码管的显示驱动,其相关的接口电路和接口软件均可在芯片资料中得到。 当系统功能比较复杂,按键数量很多时,采用编码键盘可以简化软件设计。 非编码键盘成本低廉。 从成本角度出发,本设计选用的是非编码键盘。 如图 31 所示。 显示电路 的结构 当系统需要显示少量数据时,采用 LCD 液晶显示屏进行显示是一种经济实用的方法。 P0 口作为液晶显示的数据端口, 口作为其控制端口,控制 LCD 液晶显示屏显示输出数 据。 最终显示电路如图 32 所示。 图 32 LCD 液晶显示屏显示 4. 计算器软件设计 计算器的软件规划 简易计算器的程序主要包括以下功能模块: 读键程序、判键程序段、运算操作子程序等部分; 基于 LCD 液晶显示屏的显示模块; 主模块,为系统的初始化 主模块的程序设计 主程序主要用来对 LCD 液晶显示屏进行初始化的。 在考虑主程序编写之前,先应对计 算器的运作流程有一个大致的了解,之后依次为依据画出大致的流程图 如图 41 所示 ,以便于编写其主模块的程序,这样看来,会比较清晰 、 更加方便。 14 图 41 主程序框图 本来在考虑主模块流程时,曾考虑到在初始化 LCD 显示后应该进入中断服务的,当然也这么画上去了;可经过老师的提点,之后又反复推敲了好几遍,再将流程好好地走了几遍,发现的确存在着问题。 在主程序中的确不用中断服务,它其实也属于一个子程序,是与键盘程序有关,之后会加以说明。 既然是计算器,只要反复地进行四则运算,其过程与结果并在液晶显示屏上显示出来。 通过这个详细的主模块程序框图,即能够很快地编写出其程序: void main() { uchar i,j。 init()。 write_cmd(0x80)。 //将液晶指针定位在第一行第一个单元 key=15。 i=flag1=0。 while(1) { ………… write_cmd(0x80+0x40)。 //将液晶指针定位在第二行第一个单元 jscl()。 } flag1=0。 开始初始化参数初始化 LED 显示数值运算LED 显示 15 } } 在以上的程序中 “write_cmd(0x80)。 ”,被赋值为 “0x80”,则是根据图 226 DDRAM 单元地址与显示屏字符位的对应关系中便能找到,第一行第一个单元的值为 80H,则第二行第 一个单元的值就为 80H+40H,即得出 “write_cmd(0x80+0x40)。 ”。 显示模块的程序设计 开 始延 时 程 序L E D 是 否 忙。 键 盘 扫 描加 减 乘 除 运 算 程 序L E D 液 晶 显 示结 束 图 42 显示程序框图 显示模块程序首先要对显示模块进行初始化;然后控制光标的位置;定义液晶显示的控制端口,用 SBIT 指令完成;然后设置清屏、关闭显示、归位、开显示、显示位置的首地址等等。 16 显示模块的流程图如图 42 所示。 根据以上的显示程序的流程框图,便能编写出其显示子程序: void jscl() //计算并显示函数 { uchar i,j,n。 ………… { for(j=0。 jk1+1。 j++) //存放第一操作数 { for(i=0。 ik1j。 i++) ………… } for(j=k1+1。 jk2+1。 j++) //存放第二操作数 { ………… if(js==10) //判断是什么运算,并执行运算 { s=s1+s2。 ………… if(js==13) { s=(s1*)/(s2*)。 ………… temp1=(long int)(s)。 //以下部分处理结果 temp2=stemp1。 ………… for(i=n。 i0。 i) //在液晶上显示结果 { write_data(table[b[i1]])。 ………… } 通过其显示子程序,发现要显示其最终结果,就必须先存放第一操作数、第二操作数,之后来判定使用四则运算中的哪一种运算,其后进行运算处理,最后便能在 LCD 液晶显示屏上显示其最终结果。 键盘模块的程序设计 键盘扫描子程序,首先读出 P3 口的低四位,然后读出 P3 口的 高四位。 然后键值并显示缓存。 而后,将键盘上的值转换为 ASCII 码,最后就可以用软件来设置硬件按键各个键 17 所代表的内容。 读键程序使用的是反转法读键,不管键盘矩阵的规模大小,均进行两次读键。 第一次所有行线均输出低电平,从所有读入键盘信息(列信息);第二次所有列线均输出低电平,从所有行线读入键盘信息(行信息)。 系统中连接的是 4*4 行列式按键键盘,其中 “09”为数字键; “+、 、 *、 /、 =”为符号键;“ON/C”为功能键(清屏键),在程序中会加入一个记忆功能键,而与其搭配的硬件按键为符号键中的 “=”,以为求方便。 有 键 输 入。 YYYYNNNNNN数 字 键。 号 码 键。 功 能 键。 清 零。 记 忆。 输 入 清 理 键 送清 零 缓 冲 区输 入 记 忆 键 送记 忆 缓 冲 区数 值 输 入 , 送数 值 缓 冲 器符 号 输 入 , 送 符号 缓 冲 器综 合 结 果 送 综 合缓 冲 区返 回 图 43 中断服务程序框图 数字键按下则将相应的数字送入数字缓冲区;符号键按下则将送入符号缓冲区;功能键按下则执行相应的程序;最终进行运算后,综合结果将送入结果缓冲区,并在 LCD 液晶显示屏上显示出来。 键盘模块程序也可相当于一个中断服务子程序,如图 43 所示。 18 通过以上的中断服务程序框图,来编写其子程序: void keyscan() //键盘扫描程序 { uchar temp,uu=0xf7。 uint i。 for(i=0。 i4。 i++) {uu=_crol_(uu,1)。 //_crol_为左移函数 ………… { case 0xee: key=0。 break。 case 0xde: key=1。 break。 ……………… case 0x77: key=15。 break。 } 在以上的程序中,其中的 “key=0……key=15” 是。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。