工业控制 | 能源技术 | 汽车电子 | 通信网络 | 安防监控 | 智能电网 | 移动手持 | 无线技术 | 家用电器 | 数字广播 | 消费电子 | 应用软件 | 其他方案

电路设计->光电电路图->其他光电实用电路图->简易计算器的设计制作

简易计算器的设计制作

作者:dolphin时间:2016-09-20

  设计制作计算器时需要准备89C52单片机一片,8x8点阵LED显示屏一块,按键开关16个(或矩阵键盘一块),以及电容、电阻若干。
  
  一、矩阵键盘
  
  按键开关是单片机最常用的输入部件,通过单片机的I/O口可以很容易读入按键的开关状态。如果需要读取多个按键的状态,那么、为每个按键都配备一个I]O口将占用大量的系统资源。一种简单的解决办法是对按键进行编码,比如1号键编码0001、2号键0010-----这样四个I/O口可以检测16个按键的状态。但是编码的方法局限性很大,所有编码按键最多只能有一个按键被按下,否则无法进行编码。其原因是编码器从16个按键的216种开关状态中,忽略掉了多键状态,仅留下16种单键状态,才使资源利用效率得以提高。如何才能检测所有状态而又节省I/O口资源呢?矩阵键盘是明智之选。
  
  在键盘中按键数量较多时,为了减少I/O口的占用,通常将按键排列成矩阵形式、如下图所示。在矩阵式键盘中,每条行线和列线在交叉处不直接连通,而是通过一个按键加以连接。这样,一个端口(如Pl口)就可以构成4×4=16个按键,节约了50%的1/0口。同理,64个按键只需16个I/O口,节约了75%。可见,按键数量越多,矩阵键盘的优势越明显。
  
  判断矩阵键盘中有无键按下比较容易,将全部行线置低电平后,检测列线的状态即可。只要有一列的电平为低,则表示矩阵键盘中有键被按下,而且闭合的键位于低电平列线与行线相交叉的一列按钮之中。若所有列线均为高电平,则矩阵键盘中无键按下。参考程序如下:
  
  iNTCheck_key()∥检测按键是否被按下
  
  Iunsignedcharflag;//定义标志字节变量
  
  Pl=OxFO;//将全部行线(P1.O~P1.3)置低电平,同时P1.4~P1.7置为读状态
  
  flag=Pl;//读Pl口
  
  if(flag==OxFO)retum(0);//若P1.4~P1.7全为1,则所有列线均为高电平,矩阵键盘中无键被按下
  
  elsereturn(l);//否则,某列为低电平,该列中有按键被按下
  
  矩阵式结构虽然相对简单,但其按键识别比较复杂。因此,它对硬件资源的节省,是以增加时间复杂度为代价的。识别矩阵式键盘上何键被按下应采用“扫描法”:依次将行线置为低电平,即在置某根行线为低电平时,其他线为高电平。在确定某根行线位置为低电平后,再逐行检测各列线的电平状态。若某列为低,则该列线与置为低电平的行线交叉处的按钮就是闭合的按钮。扫描获得4x4矩阵键盘哪些按键被按下的参考程序如下:

4x4矩阵键盘程序

矩阵键盘电路原理图

  二、软件防抖
  
  机械式按键在按下或释放时,由于机械弹性作用的影响、通常伴随有触点的机械抖动,然后才能稳定下来。抖动时间的长短与开关的机械特性有关,一般为lO~lOOms。单个按键可采用在键输出端加R-S触发器(双稳态触发器)或单稳态触发器构成去抖动电路当按键较多时硬件去抖成本较高且结构复杂,可采取软件防抖:在检测到有按键按下时,执行一个20ms左右(具体时间应根据所使用的按键进行调整)的延时程序后,再确认该键电平是否仍保持闭合状态电平,若仍保持闭合状态电乎,则确认该键处于闭合状态;同理,在检测到该键释放后,也应采用相同的步骤进行确认,从而可消除抖动的影响。程序片断如下:

  三、扫描显示
  
  LED显示块由多个半导体发光二极管像素点均匀排列组成,最常见有5x7.7x9.8x8等封装结构,前两种主要用于显示各种西文字符,后一种常用于显示各种汉字字符,8x8点阵LED显示块的外观及引脚上如图所示。外观图中每个圆形代表一个发光二极管,这些发光二极管通过行共阳(阴)、列共阴(阳)的方式连接起来,共引出16个引脚。其中0~7引脚分别连接8个行共阳(阴)行输入,A~H引脚分别连接8个列共阴(阳)输入,通过行列输入高低电平进行显示控制。8x8点阵LED显示块内部结构如下图所示。

8x8点阵LED显示块的外观及引脚

8x8点阵LED显示块内部结构

  点阵LED显示块通过数字逻辑电路进行扫描驱动。LED显示块将发光灯按行按列布置,驱动时也按行按列驱动。在扫描驱动方式下可以按行扫描,按列控制;也可以按列扫描,按行控制。扫描时,一行一行地循环接通整行的LED器件,而不管这一行的哪一列的LED器件是否应该点亮,具体某一列的LED器件是否应该点亮,则由列控制电路来负责。8x8点阵每显示一屏需要分别扫描8行,而每行有8个像素点需要8比特即1个字节数据。因此,点阵显示块每显示一个字符,要分行扫描显示8字节数据。扫描速度不能太快,否则IED还没完全点亮就断了电,显示屏不亮;而扫描太慢则会造成显示闪烁。人眼的视觉暂留大约持续O.ls,所以一般选用25Hz的扫描频率,可知每行显示时间应为5ms。字符“0”的扫描显示程序如下:

  四、按键回显
  
  按键回显即每次按键后显示该按键所表示的符号,以便用户确认,这是人性化设计中常用的功能之一。本实例中计算器按键共有16个,对应字符包含0~9十个数字和+、一、×、÷、=等5个数学符号,以及CLR键,如下图所示。当按下数字或符号键后,单片机应扫描其键值,并根据键值将对应符号显示在点阵屏上。参考程序如下:

  unsigned char code dis_char[15l[8]={ /*15个符号显示数据,字符顺序根据按键设置调整*/

按键设置

  五、数据处理
  
  计算器需要先得到两个数据和一个运算符,再进行所需计算,最后得到结果数据。简易计算器仅能处理10以内的输人数据,参考程序如下:(多位数的四则运算处理程序较复杂,可根据例程自行编写)

  前面介绍了简易计算器的各部分技术实现,但要使程序顺利运行,还需合理的程序流程和各部分接口的正确连接,顺便提一句,集成封装的矩阵键盘跟16个按键成本相当,其面板界面品种各异,可自行选用并根据面板修改键值映射。上图为硬件连接示意图,若软件流程设计有问题可参照下图。

硬件连接示意图

简单计算器软件流程图



评论

技术专区