怎么规划一个电子总结器

  假诺作为学生,你选择的是cpld/fpga,小编也补助您,作者觉着三个方可协调独自做出来的学生应当如故不错的,但也和事先处理器的程序完结类似:分别安顿键盘驱动模块、数码管驱动模块、计算模块,最后中间有二个主干模块以一个意况机格局存在,与任何多个模块都不止。当然,每一种模块内部也足以分小模块,比如数码管模块里面最佳把解码器单独达成三个小模块,而计量模块里加减乘除都是单身的小模块。

  别的要考虑按键的抖动难题,有多样消除方式,比如可以在认清到1回按键按下之后0.3秒内不另行判断按键被按下。

  大家率先要清楚数码管和键盘矩阵的原理:

图片 1

  当然,也有想娱乐数字设计的,那么cpld对于那个必要是适合的,没须要上FPGA,能够用很早在此之前的,价格也惠及。对于财富多少并未把握的话,你也能够先做数字设计,再来选器件。

  图片 2

  键盘矩阵大概要复杂那么有个别。首先,我们只要大家那边PD五 、PD陆 、PD柒 、PD8都被大家接了上拉电阻,并且IO都为高阻接收状态,而不出口。我们那边只考虑2个键的辨认,其实键盘矩阵也足以辨认多少个键。大家想一想,要是有个别键按下去,比如左上角的S3按下之后,会产生哪些。在按下来此前,PD一 、PD② 、PD三 、PD4和PD伍 、PD陆 、PD柒 、PD8里面并不联通。但当S3按下去,PD1和PD4连在了联合。倘诺控制模块把PD4的输出射为高阻状态,那么只要PD0输入低电平,那么PD4读取出来的相应为低电平,不然为高电平。于是我们把PD壹 、PD二 、PD叁 、PD4那六个引脚每回只中间3个输出低电平,别的四个出口高阻状态,每一趟都去读取PD五 、PD陆 、PD七 、PD8,那么就足以根据数值来判断终归是哪个按键被按下。注意,此处PD壹 、PD② 、PD③ 、PD4这一个引脚每回只中间多少个出口低电平的时候,其余七个不能够出口高电平,而相应是高阻,不然,尽管有七个按键被按下,则为打断状态!

  框图如上,首要有4大模块,电源、控制、按键矩阵、数码管。

  数码管相对简单一些,一般的话,数码管每种人彰显的数字都不等同。如本身图中的共阴陆人数码管,当要出示某位的时候,片选信号选取是拉低,其余片选拉高,然后再把要显得的数字所要点亮的管的引脚拉高,那样,要来得的这么些人就显示出了数字,而任何的二位尚未别的展现。然后急忙切换,每1位都显得该展现的数字,那么依据视觉暂留,大家就见到了完全的显示。

  键盘矩阵则是以下电路那样的东西,由一堆按键组成,键盘矩阵对外七个信号都接在控制模块的引脚上。其余,假使决定模块的引脚不能够配备上拉或下拉电阻,那么PD0/PD1/PD2/PD3照旧PD4/PD4/PD6/PD7/PD8就要接上拉电阻,那涉及到键盘矩阵的检查和测试原理。

  而有关总结器所要达成的参天七个人加减乘除,很不难落成,根本不供给运气总括,结合显示和按键,构成应用层程序,想想二个计算器的作用,你应该很简单的画出流程图,不是吧?

  控制模块,就看想用什么编程了,借使想用单片机,可以选择经典的51单片机、AV帕杰罗单片机、PIC单片机都能够,STM32当然能够,只是ACR-VM能够做远比那几个复杂的工作,没须求杀鸡用牛刀。当然,想学学A宝马X5M尤其是STM32的编制程序,能够用STM32。PIC单片机和51单片机本人只玩过汇编,可是今后单片机支持C语言都帮助的蛮不错,提议照旧C语言编制程序。

  unsigned char
key;//以象征是哪个键按下,分别给0、① 、二 、叁 、四 、伍 、六 、七 、八 、⑨ 、+、-、*、/、=、退格编码为0~15

  图片 3

  硬件

图片 4

  就算控制模块选择的是单片机,那么大家一般是在裸机下编程,对于那六款单片机我如同只玩过汇编,但将来都21世纪了,笔者想起码也相应用C语言来娱乐。

 

  设计有个别全局变量用来应用层和驱动层交互呈现数据和所按按键。

  unsigned char
flag;//flag=0的时候,驱动层能够安装key,并把flag设为1;flag=1的时候,应用层能够读取key,并把flag设置为0

图片 5

  硬件设计好通晓后,需求统一筹划固件。

  以上数量有冗余,在RAM极端受限的意况下,能够裁剪数据。

自个儿的博客即将搬运三只至腾讯云+社区,特邀大家一同入驻:https://cloud.tencent.com/developer/support-plan

  固件

  版权申明:本文为博主窗户(Colin Cai)原创,欢迎转帖。如要转贴,必须注明原文网址

  http://www.cnblogs.com/Colin-Cai/p/8185972.html 

  作者:窗户

  QQ:6679072

  E-mail:6679072@qq.com

  电源有各类方案,不难点能够用电池大概usb,那里不作详细谈论。

     
 图片 6

  既然数码管的显得需求定时去切换展现位,而键盘矩阵也须要定时去切换输入,那么大家就足以安装多个定时器,把那四个硬件的处理都挂在同2个定时中断例程上作为驱动层,其逻辑使用上述的原理来完成,能够每一回中断给三个循环计数作为气象,做二个moore机简单明了,至于0.3秒内不重复在交互里体现即可。程序中达成驱动层和应用层的层系分离,无论从调节和测试硬件还是设计固件来说都是必备的,当然你也能够分的更细,比如HAL层。当然,非要在此间把拥有的整个糅合在一齐也是能够最后消除的,但层次感差很多,并且2个初大方真的设计不佳二个大的状态机。

 

 

  首先,不要误会,笔者这边的总计器是指硬件的总括器,至于纯软件的计量程序,乃至有高级成效的,比如能够求解方程甚至可编制程序之类,作者从此找个小时的话说。那二日看到有人在博问里问类似的题目,原问是想设计一个负有数码管、有着4×4键盘的硬件里的次序,不精晓他具体想做如何,只是给了一部分提出。联想到还有总括器这一个东西,那应该很不难作为电子工程还是微电子专业的二个作业的花样出现。在此从前本身招实习生的时候,就像也早就叫其落到实处过总计器。那里给出一点方案,以供参考。

  数码管接纳共阴或共阳,每一位多少个片选,选个陆位的,一共十六个引脚,都接在控制模块IO引脚上,注意控制信号电平,必要的时候阳级接上拉电阻。

  unsigned char
num[6] ;//应用层写,驱动层读,用于四个人数据的来得