电源、控制、按键矩阵、数码管,键盘矩阵对外7个信号都接在控制模块的引脚上

  版权申明:本文为博主窗户(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

  首先,不要误会,作者那边的总计器是指硬件的总括器,至于纯软件的盘算程序,乃至有高级功用的,比如可以求解方程甚至可编程之类,小编后来找个小时的话说。那两日看到有人在博问里问类似的难点,原问是想设计2个负有数码管、有着4×4键盘的硬件里的次序,不知晓他具体想做什么样,只是给了一些提出。联想到还有计算器那一个东西,那应当很简单作为电子工程或许微电子专业的三个作业的花样出现。在此从前本人招实习生的时候,就像也早就叫其落实过总计器。那里给出一点方案,以供参考。

  首先,不要误会,作者那里的总括器是指硬件的总括器,至于纯软件的乘除程序,乃至有高档作用的,比如可以求解方程甚至可编程之类,作者从此找个时间来说说。那两日看到有人在博问里问类似的难点,原问是想设计1个存有数码管、有着4×4键盘的硬件里的次第,不亮堂她现实想做怎么着,只是给了一部分指出。联想到还有总括器这么些东西,那应该很简单作为电子工程照旧微电子专业的二个作业的花样出现。以前自身招实习生的时候,似乎也早就叫其落实过总计器。那里给出一点方案,以供参考。

 

 

  硬件

  硬件

     
 895959.com 1

     
 895959.com 2

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

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

  电源有各个方案,不难点可以用电池或许usb,那里不作详细座谈。

  电源有七种方案,简单点可以用电池只怕usb,那里不作详细谈论。

  数码管选用共阴或共阳,每1个人一个片选,选个6人的,一共1伍个引脚,都接在控制模块IO引脚上,注意控制信号电平,须求的时候阳级接上拉电阻。

  数码管采纳共阴或共阳,每壹位二个片选,选个七人的,一共十七个引脚,都接在控制模块IO引脚上,注意控制信号电平,要求的时候阳级接上拉电阻。

895959.com 3

895959.com 4

  键盘矩阵则是以下电路那样的东西,由一堆按键组成,键盘矩阵对外八个信号都接在控制模块的引脚上。别的,即便控制模块的引脚不大概配备上拉或下拉电阻,那么PD0/PD1/PD2/PD3照旧PD4/PD4/PD6/PD7/PD8就要接上拉电阻,那关系到键盘矩阵的检测原理。

  键盘矩阵则是以下电路那样的事物,由一堆按键组成,键盘矩阵对外八个信号都接在控制模块的引脚上。其余,假若决定模块的引脚无法配备上拉或下拉电阻,那么PD0/PD1/PD2/PD3依然PD4/PD4/PD6/PD7/PD8就要接上拉电阻,那事关到键盘矩阵的检测原理。

  895959.com 5

  895959.com 6

  控制模块,就看想用什么编程了,如果想用单片机,可以采用经典的51单片机、AV奥迪Q7单片机、PIC单片机都能够,STM32本来可以,只是A凯雷德M能够做远比这几个纷纷的事体,没须要杀鸡用牛刀。当然,想学学AHavalM尤其是STM32的编程,可以用STM32。PIC单片机和51单片机本人只玩过汇编,不过未来单片机帮衬C语言都援救的蛮不错,提议依然C语言编程。

  控制模块,就看想用什么编程了,即使想用单片机,可以拔取经典的51单片机、AV猎豹CS6单片机、PIC单片机都可以,STM32本来可以,只是A库罗德M可以做远比那一个纷纭的工作,没需求杀鸡用牛刀。当然,想学学ALacrosseM尤其是STM32的编程,能够用STM32。PIC单片机和51单片机自身只玩过汇编,但是以往单片机援救C语言都援救的蛮不错,提议照旧C语言编程。

  当然,也有想娱乐数字设计的,那么cpld对于那个需假若合适的,没需求上FPGA,可以用很早以前的,价格也有利。对于财富多少并未握住的话,你也可以先做数字设计,再来选器件。

  当然,也有想娱乐数字设计的,那么cpld对于那几个必要是合适的,没要求上FPGA,可以用很早此前的,价格也有利。对于财富多少并未握住的话,你也足以先做数字设计,再来选器件。

 

 

  固件

  固件

  硬件设计好了随后,需求规划固件。

  硬件设计好驾驭后,须求统筹固件。

  如若控制模块拔取的是单片机,那么我们一般是在裸机下编程,对于那三款单片机作者就像只玩过汇编,但以后都21世纪了,我想起码也理应用C语言来娱乐。

  假使控制模块采纳的是单片机,那么大家一般是在裸机下编程,对于这七款单片机我如同只玩过汇编,但以往都21世纪了,小编想起码也应该用C语言来娱乐。

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

  我们先是要精通数码管和键盘矩阵的原理:

895959.com 7

895959.com 8

  数码管相对不难一些,一般的话,数码管每一位展现的数字都差距。如本人图中的共阴伍人数码管,当要显得某位的时候,片选信号采纳是拉低,其余片选拉高,然后再把要体现的数字所要点亮的管的引脚拉高,那样,要出示的那1人就展现出了数字,而其他的2位没有此外呈现。然后快捷切换,每1个人都突显该呈现的数字,那么依照视觉暂留,大家就观望了完全的显得。

  数码管相对简便易行一些,一般的话,数码管每1人呈现的数字都差距。如作者图中的共阴6人数码管,当要突显某位的时候,片选信号采用是拉低,其余片选拉高,然后再把要显得的数字所要点亮的管的引脚拉高,那样,要显示的这几个人就显得出了数字,而其余的3位尚未其余展现。然后很快切换,每种人都来得该突显的数字,那么依据视觉暂留,我们就见到了全体的呈现。

895959.com 9

895959.com 10

  键盘矩阵或许要复杂那么一些。首先,大家若是大家这里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这些引脚每回只中间二个输出低电平,其余五个出口高阻状态,每一次都去读取PD伍 、PD六 、PD柒 、PD8,那么就可以依照数值来判定毕竟是哪些按键被按下。注意,此处PD壹 、PD二 、PD三 、PD4这5个引脚每回只中间三个输出低电平的时候,其余三个不能够出口高电平,而相应是高阻,否则,如果有五个按键被按下,则为封堵状态!

  键盘矩阵或许要复杂那么一些。首先,大家倘诺大家那里PD五 、PD⑥ 、PD柒 、PD8都被大家接了上拉电阻,并且IO都为高阻接收状态,而不出口。大家那边只考虑一个键的甄别,其实键盘矩阵也得以识别七个键。大家想一想,即便有个别键按下来,比如左上角的S3按下之后,会发出什么。在按下去从前,PD一 、PD贰 、PD③ 、PD4和PD伍 、PD⑥ 、PD⑦ 、PD8之内并不联通。但当S3按下去,PD1和PD4连在了一块儿。假设控制模块把PD4的输出射为高阻状态,那么一旦PD0输入低电平,那么PD4读取出来的应该为低电平,否则为高电平。于是大家把PD壹 、PD贰 、PD③ 、PD4那肆个引脚每便只中间1个输出低电平,其余五个出口高阻状态,每一次都去读取PD五 、PD⑥ 、PD七 、PD8,那么就足以依照数值来判定终究是哪些按键被按下。注意,此处PD壹 、PD② 、PD③ 、PD4那六个引脚每趟只中间多少个输出低电平的时候,其余三个不能出口高电平,而相应是高阻,否则,如若有七个按键被按下,则为封堵状态!

  其它要考虑按键的震荡难题,有三种化解格局,比如可以在认清到一次按键按下之后0.3秒内不另行判断按键被按下。

  别的要考虑按键的振荡难点,有多样搞定措施,比如可以在认清到一遍按键按下之后0.3秒内不重复判断按键被按下。

  既然数码管的显得需求定时去切换突显位,而键盘矩阵也亟需定时去切换输入,那么我们就足以安装1个定时器,把那多少个硬件的拍卖都挂在同贰个定时中断例程上作为驱动层,其逻辑使用上述的规律来贯彻,可以每一回中断给一个循环计数作为气象,做1个moore机简单明了,至于0.3秒内不另行在竞相里展现即可。程序中完成驱动层和应用层的层次分离,无论从调试硬件依然设计固件来说都以少不了的,当然你也可以分的更细,比如HAL层。当然,非要在此处把全数的凡事糅合在一块儿也是力所能及最后消除的,但层次感差很多,并且2个初专家真的设计不佳2个大的状态机。

  既然数码管的突显须求定时去切换显示位,而键盘矩阵也亟需定时去切换输入,那么咱们就可以安装三个定时器,把那八个硬件的处理都挂在同3个定时中断例程上作为驱动层,其逻辑使用上述的原理来落到实处,可以每一遍中断给二个循环计数作为气象,做2个moore机不难明了,至于0.3秒内不另行在互相里显示即可。程序中落实驱动层和应用层的层系分离,无论从调试硬件还是设计固件来说都以不可或缺的,当然你也足以分的更细,比如HAL层。当然,非要在这里把装有的全体糅合在协同也是力所能及最后消除的,但层次感差很多,并且八个初大方真的设计不好3个大的状态机。

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

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

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

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

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

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

  unsigned char
key;//以象征是哪个键按下,分别给0、壹 、二 、叁 、肆 、五 、陆 、柒 、⑧ 、⑨ 、+、-、*、/、=、退格编码为0~15

  unsigned char
key;//以象征是哪个键按下,分别给0、① 、二 、③ 、四 、⑤ 、⑥ 、柒 、捌 、⑨ 、+、-、*、/、=、退格编码为0~15

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

  以上数量有冗余,在RAM极端受限的情事下,可以裁剪数据。

895959.com,  而关于统计器所要达成的参天八人加减乘除,很简单已毕,根本不需求运气统计,结合呈现和按键,构成应用层程序,想想3个计算器的意义,你应当很不难的画出流程图,不是啊?

  而关于统计器所要完结的参天八个人加减乘除,很不难达成,根本不要求运气总结,结合显示和按键,构成应用层程序,想想八个计算器的作用,你应当很简单的画出流程图,不是啊?

  假若作为学生,你挑选的是cpld/fpga,小编也支撑您,作者觉着七个可以协调独自做出来的学员应当依旧不错的,但也和事先处理器的程序完成类似:分别安插键盘驱动模块、数码管驱动模块、计算模块,最终中间有1个中心模块以几个景况机方式存在,与其他几个模块都不止。当然,各个模块内部也足以分小模块,比如数码管模块里面最好把解码器单独完结三个小模块,而计量模块里加减乘除都是独自的小模块。

  假诺作为学生,你采纳的是cpld/fpga,作者也援助你,作者觉得1个方可本人单身做出来的学习者应该还是不错的,但也和从前处理器的程序完毕类似:分别安顿键盘驱动模块、数码管驱动模块、总结模块,最后中间有二个主导模块以壹个处境机方式存在,与任何七个模块都不停。当然,每一个模块内部也可以分小模块,比如数码管模块里面最好把解码器单独完毕壹个小模块,而计量模块里加减乘除都以单身的小模块。

  895959.com 11

  895959.com 12

 

 

我的博客即将搬运二只至腾讯云+社区,约请我们一同入驻:https://cloud.tencent.com/developer/support-plan

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