何以筹划一个电子计算器。如何筹划一个电子计算器。

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

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

  作者:窗户

  QQ:6679072

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

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

  作者:窗户

  QQ:6679072

  E-mail:6679072@qq.com

  首先,不要误会,我这里的计算器是乘硬件的计算器,至于纯软件之盘算程序,乃至有高档功能的,比如可求解方程甚至可编程之类,我从此找个时间吧说。这片上看有人当博问里问类似之问题,原问是眷恋设计一个享有数管、有着4×4键盘的硬件里之主次,不知底他现实想做什么,只是吃了有些建议。联想到还有计算器这个东西,这当怪爱当电子工程或者微电子专业的一个功课的花样出现。以前自己招实习生的早晚,似乎也早就被该落实了计算器。这里吃出一些方案,以供参考。

  首先,不要误会,我这边的计算器是因硬件的计算器,至于纯软件的乘除程序,乃至有高级功能的,比如可以求解方程甚至只是编程之类,我从此找个时间的话说。这简单上看有人当博问里发问类似之问题,原问是纪念设计一个备数管、有着4×4键盘的硬件里的先后,不明了他具体想做呀,只是被了部分建议。联想到还有计算器这个东西,这应当怪容易当电子工程或者微电子专业的一个学业的款式出现。以前自己招实习生的时段,似乎也早已受该实现了计算器。这里被起一点方案,以供参考。

 

 

  硬件

  硬件

     
 betway体育 1

     
 betway体育 2

  框图如齐,主要发生4深模块,电源、控制、按键矩阵、数码管。

  框图如达到,主要有4雅模块,电源、控制、按键矩阵、数码管。

  电源有多方案,简单点好为此电池要usb,这里不发详细讨论。

  电源有强方案,简单点好为此电池或usb,这里不发详细讨论。

  数码管使用一块阴或共阳,每一样号一个片选,选个6号的,一共14单引脚,都接在支配模块IO引脚上,注意控制信号电平,必要的时刻阳级接上拉电阻。

  数码管采用一块阴或共阳,每一样号一个片选,选个6各类之,一共14单引脚,都衔接在决定模块IO引脚上,注意控制信号电平,必要的时候阳级接上拖累电阻。

betway体育 3

betway体育 4

  键盘矩阵则是以下电路这样的东西,由同堆按键组成,键盘矩阵对外8只信号都通在决定模块的引脚上。另外,如果控制模块的引脚无法安排达到拖累还是下拉电阻,那么PD0/PD1/PD2/PD3或PD4/PD4/PD6/PD7/PD8哪怕如连接上拖累电阻,这涉及到键盘矩阵的检测原理。

  键盘矩阵则是以下电路这样的事物,由同积聚按键组成,键盘矩阵对外8只信号都接在控制模块的引脚上。另外,如果控制模块的引脚无法配备上拖累还是下拉电阻,那么PD0/PD1/PD2/PD3要么PD4/PD4/PD6/PD7/PD8不怕设接上拖累电阻,这关系到键盘矩阵的检测原理。

  betway体育 5

  betway体育 6

  控制模块,就扣留朝思暮想就此啊编程了,如果想用单片机,可以选取经典的51才片机、AVR单片机、PIC单片机都得,STM32当然可以,只是ARM可以做多较这纷繁的业务,没必要杀鸡用牛刀。当然,想学学ARM特别是STM32之编程,可以用STM32。PIC单片机和51单独片会自光打了汇编,不过本单片机支持C语言都支持的深不错,建议要C语言编程。

  控制模块,就扣留朝思暮想就此啊编程了,如果想用单片机,可以选经典的51就片机、AVR单片机、PIC单片机都得以,STM32当可以,只是ARM可以做多较这纷繁的事情,没必要杀鸡用牛刀。当然,想学学ARM特别是STM32的编程,可以用STM32。PIC单片机和51仅仅片会本身特玩了汇编,不过本单片机支持C语言都支持的百般不错,建议要C语言编程。

  当然,也有纪念玩数字设计的,那么cpld对于这需求是适用的,没必要上FPGA,可以用非常早以前的,价格也便于。对于资源多少并未握住的口舌,你啊得优先开数字设计,再来选器件。

  当然,也有想念娱乐数字设计之,那么cpld对于这需求是恰如其分的,没必要上FPGA,可以就此十分早以前的,价格为有利于。对于资源多少并未把的言辞,你吧足以预先举行数字设计,再来选器件。

 

 

  固件

  固件

  硬件设计好了然后,需要统筹固件。

  硬件设计好了之后,需要统筹固件。

  如果决定模块选用的凡单片机,那么我们一般是以裸机下编程,对于当下几乎慢单片机我像就打了汇编,但本犹21世纪了,我眷恋起码也应有用C语言来娱乐。

  如果决定模块选用的凡单片机,那么我们一般是在裸机下编程,对于当下几乎慢性单片机我似乎才打过汇编,但今天犹21世纪了,我思起码为应该用C语言来娱乐。

  我们率先要懂得数码管和键盘矩阵的规律:

  我们先是要明白数码管和键盘矩阵的法则:

betway体育 7

betway体育 8

  数码管相对简单有,一般的话,数码管各一样位显示的数字还不同等。如我贪图中之一块阴6各类数码管,当要展示某位的上,片选信号选择是拉低,其他片选拉大,然后重新管要出示的数字所设点亮的不论的引脚拉高,这样,要显得的立同一号就展示有了数字,而另外的几乎各项没有外显示。然后很快切换,每一样各都显得该显示的数字,那么根据视觉暂留,我们就算盼了整的来得。

  数码管相对简单有,一般的话,数码管各一样号显示的数字都未一致。如己图被的同台阴6各项数码管,当要显得某位的时段,片选信号选择是拉低,其他片选拉大,然后再度把要显的数字所要点亮的管的引脚拉高,这样,要显示的当下同样各项即显示出了数字,而别的几乎各尚未另外显示。然后快速切换,每一样员还展示该显示的数字,那么根据视觉暂留,我们即便看了整机的显得。

betway体育 9

betway体育 10

  键盘矩阵可能使复杂那么一些。首先,我们设我们这里PD5、PD6、PD7、PD8且让我们对接了上拉电阻,并且IO都为高阻接收状态,而休出口。我们这边就考虑一个键底甄别,其实键盘矩阵也得分辨多只键。我们纪念同一想,如果某只键按下,比如左上角的S3按下之后,会出啊。在按下来之前,PD1、PD2、PD3、PD4和PD5、PD6、PD7、PD8里面并无联通。但当S3据下来,PD1暨PD4并于了一块儿。如果控制模块把PD4的输出射为高阻状态,那么一旦PD0输入低电平,那么PD4诵读博出来的应当吗没有电平,否则也强电平。于是我们管PD1、PD2、PD3、PD4立4个引脚每次只有中间一个输出低电平,其他三只出口高阻状态,每次都去读取PD5、PD6、PD7、PD8,那么就算可根据数值来判定究竟是哪位按键被依下。注意,此处PD1、PD2、PD3、PD4马上4独引脚每次只有中一个出口低电平的早晚,其他三单不可知出口高电平,而应是高阻,否则,如果出三三两两独按键被仍下,则也绿灯状态!

  键盘矩阵可能要复杂那么有些。首先,我们要我们这里PD5、PD6、PD7、PD8还为我们连了上拉电阻,并且IO都为高阻接收状态,而不出口。我们这边只考虑一个键的辨别,其实键盘矩阵也得以辨认多个键。我们怀念同一纪念,如果有只键按下去,比如左上角的S3按下后,会时有发生啊。在遵照下之前,PD1、PD2、PD3、PD4和PD5、PD6、PD7、PD8里并无联通。但当S3依下,PD1同PD4并以了旅。如果决定模块把PD4的输出射为高阻状态,那么只要PD0输入低电平,那么PD4念博出来的应有为低电平,否则也胜电平。于是我们将PD1、PD2、PD3、PD4应声4独引脚每次只有中一个出口低电平,其他三单出口高阻状态,每次都去读取PD5、PD6、PD7、PD8,那么就是得根据数值来判断究竟是何许人也按键被依下。注意,此处PD1、PD2、PD3、PD4立即4个引脚每次只有中一个输出低电平的时刻,其他三只非能够出口高电平,而当是高阻,否则,如果出少数个按键被仍下,则为阻隔状态!

  另外要考虑按键的振荡问题,有多化解方法,比如可以在认清及均等不成按键按下之后0.3秒内不又判断按键被依下。

  另外假如考虑按键的振动问题,有强化解办法,比如可以认清及均等浅按键按下之后0.3秒内不重判断按键被仍下。

  既然数码管的来得得定时去切换显示位,而键盘矩阵也用定时去切换输入,那么我们虽可装一个定时器,把立即半单硬件的处理都挂于与一个定时中断例程上作为驱动层,其论理下上述的规律来促成,可以每次中断给一个循环计数作为状态,做一个moore机简单明了,至于0.3秒内不又在互相里体现即可。程序中贯彻驱动层和应用层的层次分离,无论由调试硬件还是设计固件来说还是不可或缺的,当然你也可分的复细致,比如HAL层。当然,非要是于这边拿具备的普糅合在一起也是会最后搞定的,但层次感差很多,并且一个新大方真的设计不好一个很之状态机。

  既然数码管的显示得定时去切换显示位,而键盘矩阵也得定时去切换输入,那么我们尽管得安装一个定时器,把当时简单单硬件的拍卖还挂于同一个定时中断例程上作为驱动层,其逻辑下上述的法则来贯彻,可以每次中断给一个循环计数作为状态,做一个moore机简单明了,至于0.3秒内不又在相互里体现即可。程序中落实驱动层和应用层的层系分离,无论从调试硬件还是设计固件来说还是必需之,当然你吧足以分开的复细,比如HAL层。当然,非要在这里将有的百分之百糅合在一起也是会最终搞定的,但层次感差很多,并且一个初大家真的设计不好一个雅之状态机。

  设计有些全局变量用来应用层和教层交互显示数据及所据按键。

  设计有些全局变量用来应用层和叫层交互显示数据及所依按键。

  unsigned char
num[6] ;//应用层写,驱动层读,用于6各项数据的亮

  unsigned char
num[6] ;//应用层写,驱动层读,用于6员数据的显得

  unsigned char
flag;//flag=0的时段,驱动层可以安装key,并将flag设为1;flag=1的时节,应用层可以读取key,并把flag设置为0

  unsigned char
flag;//flag=0的时光,驱动层可以设置key,并将flagbetway体育设为1;flag=1的下,应用层可以读取key,并将flag设置为0

  unsigned char
key;//以表示是啊个键按下,分别给0、1、2、3、4、5、6、7、8、9、+、-、*、/、=、退格编码为0~15

  unsigned char
key;//以表示是哪个键按下,分别给0、1、2、3、4、5、6、7、8、9、+、-、*、/、=、退格编码为0~15

  以上数据有冗余,在RAM极端受限的状下,可以剪数据。

  以上数量来冗余,在RAM极端受限的状态下,可以推数据。

  而至于计算器所设促成的万丈6位加减乘除,很轻实现,根本未需数计算,结合显示和按键,构成应用层程序,想想一个计算器的职能,你应当特别易之画有流程图,不是为?

  而有关计算器所假设落实的危6位加减乘除,很易实现,根本无待数计算,结合显示和按键,构成应用层程序,想想一个计算器的功用,你应有挺轻之作画起流程图,不是啊?

  如果当学生,你挑选的凡cpld/fpga,我啊支撑公,我觉着一个好团结单独做下的学生该还是对的,但也和前处理器的程序实现类似:分别计划键盘驱动模块、数码管驱动模块、计算模块,最后中间产生一个中心模块以一个态机形式存在,与其余三独模块都不住。当然,每个模块内部也可分小模块,比如数码管模块里面太好拿解码器单独实现一个微模块,而计量模块里加减乘除都是单独的有些模块。

  如果当学生,你选择的是cpld/fpga,我呢支持而,我以为一个得自己单身做出来的生应当要不错的,但为与事先处理器的程序实现类似:分别计划键盘驱动模块、数码管驱动模块、计算模块,最后中间闹一个中坚模块以一个状态机形式存在,与另三只模块都持续。当然,每个模块内部也可以分小模块,比如数码管模块里面太好管解码器单独实现一个略带模块,而计量模块里加减乘除都是独立的略模块。

  betway体育 11

  betway体育 12

 

 

自之博客即将搬运一头到腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan

本身的博客即将搬运一头到腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website