BCD码又称二/十进制码,即二进制编码的十进制码,在设计、测试数字电路硬件过程或是面对带有BCD码界面的集成电路时,常常希望方便、快速地产生BCD码来完成当前的工作,检验硬件电路的正确性,例如锁相频率合成集成电路MC145163P带有4位BCD编码界面,用于设置环路N分频器,透过本文介绍而制作完成后的BCD发生器可以提供4位BCD编码输出,方便地控制每位BCD输出,可以快速地得到BCD编码而完成测试或输出BCD编码接到集成电路的BCD编码界面,无需频繁跳线。
另外,BCD编码有8421码、2421码、余3码等多种形式,本文以常见的8421码为例介绍电路的实现和程序的编写。如果对程序略加修改则可以很方便地实现其它类型的编码模式(如2421码)。本电路以AT89C2051为核心设计了4×4的矩阵键盘(S0-S15),这样只需在键盘上按下相应的按键(S0-S9)即可以产生一个对应(十进制0-9)的BCD码,透过设置切换按键(S10-S13)可以随意地控制4位中任意的一位,期间用数码管实时地显示当前BCD码对应的十进制数。
电路功能和特点︰
4位BCD编码输出,利用单片机口线可以扩展位数。
改变软件中键号0-键号9(即S0-S9对应功能)的程序可以实现其它编码形式(如2421码)。参见软件部分。
电路以常用的8421码为例,并有数码显示出对应的十进制数(也可以省略)。
完整的4×4的矩阵键盘扫描执行程序,可以移植到其它应用电路中。
BCD编码由锁存器实现信号锁存,并引出界面,方便连接其它电路。
“位”控制和0-9编码输出互不影响,直接按下功能键就可以得到需要的BCD编码输出和“位数”选择。
2 电路框图
电路原理图如图1所示。
3 电路分析
AT89C2051的P1口组成4×4矩阵键盘(S0-S15),其中P1.0-P1.3作为行线,P1.4-P1.7作为列线,设计键盘扫描程序可以达到预先设想的功能(见软件设计部分)。按下S0-S9可以产生0-9十进制数对应的BCD码,S10-S13用作4位BCD码的切换按键,S14、S15暂未使用,可以不安装,P3.3-P3.0是BCD码的数据输出线,从电路中可以看出,因为功用键盘而实现4位BCD编码输出,显然P3.3-P3.0作为数据汇流排而同时并接在4个D锁存器(4042),透过S10-S13来切换,对于4个D锁存器(U3-U6)每次只有一个有效而把P3.3-P3.0的数据“读入”然后锁存。实际上S10-S13控制P3.4和P3.5的状态(P3.4和P3.5共有4种组合)并透过2-4线译码器(U2;74LS139)得到对应的U3-U6的有效信号,表1是S10-S13控制所对应的各芯片状态,可见,U3-U6中任意一个(例如U3)处于有效状态而“读入”P3.3-P3.0数据时,其余的(U4/U5/U6)处于锁存状态,保留原来数据,因此使用者可以在任意一位中改变所希望的BCD码输出。
normal style="LINE-HEIGHT: 150%" align=center>表 S10-S13控制对应的U3~U6芯片状态
normal style="LINE-HEIGHT: 150%">按键
normal style="LINE-HEIGHT: 150%">P3.4(B)
normal style="LINE-HEIGHT: 150%">P3.5(A)
normal style="LINE-HEIGHT: 150%">U2:74LS139输出
normal style="LINE-HEIGHT: 150%">实际功能
normal style="LINE-HEIGHT: 150%">Y0
normal style="LINE-HEIGHT: 150%">Y1
normal style="LINE-HEIGHT: 150%">Y2
normal style="LINE-HEIGHT: 150%">Y3
normal style="LINE-HEIGHT: 150%">U3有效,U4/U5/U6处于锁存状态,保持
normal style="LINE-HEIGHT: 150%">S10
normal style="LINE-HEIGHT: 150%">0
normal style="LINE-HEIGHT: 150%">0
normal style="LINE-HEIGHT: 150%">0
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">U3有效,U4/U5/U6处于锁存状态,保持
normal style="LINE-HEIGHT: 150%">S11
normal style="LINE-HEIGHT: 150%">0
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">0
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">U4有效,U3/U5/U6处于锁存状态,保持
normal style="LINE-HEIGHT: 150%">S12
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">0
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">0
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">U5有效,U3/U4/U6处于锁存状态,保持
normal style="LINE-HEIGHT: 150%">S13
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">1
normal style="LINE-HEIGHT: 150%">0
normal style="LINE-HEIGHT: 150%">U6有效,U3/U4/U5处于锁存状态,保持
U2(74LS139)是2-4线译码器,功能见上表,他的输入端B,A分别接至P3.4,P3.5,输出端Y0-Y3取决于输入端的组合,每种组合下只有一个输出端(Y0-Y3)以低电平有效输出。U3-U6是D锁存器,主要是其中的5脚和6脚关系决定他们的工作状态,查阅资料得知,当5脚和6脚逻辑电位相同时,该芯片可以把D3-D0数据输出到Q3-Q0;当5脚和6脚逻辑电位不同时,该芯片处于锁存原来数据的状态,而不会“读入”当前的D3-D0数据,电路中把U3-U6的6脚固定接低电位,而5脚分别用U2(74LS139)的输出信号来控制,不难实现“可以单独实现对各位BCD码的设置”。4511是译码驱动,接共阴数码管显示当前每位的BCD码所对应的十进制数,方便观察,显示部分很简单,此处不在赘述,同时,显示部分在电路上不是必须的,可省略,BCD码透过J3和J2引出,之所以用两个链接器是为了更灵活、方便使用。
4 软件设计
主要是实现键盘处理,程序中必须确认是哪一个按键被按下,然后转到相应的处理程序中执行,实际上该程序是一个完整的键盘扫描程序,如果改动其中的处理次程序完全可以应用到其它的控制电路中。
键盘扫描程序的任务简单讲就是︰首先确认是否有按键按下,然后透过扫描判断来得到是在哪一行的按键,最后透过比较预先设定的4行表格查找并计算得到具体的按键,从而转到相应的功能程序。
关于各键的相应处理功能就较简单,只要对应不同的按键输入相应的控制命令,对于S0-S9是控制P3.3-P3.0不同的状态以得到所对应的BCD编码,对于S10-S13则是控制P3.4,P3.5的状态以实现对U3-U6的控制,限于篇幅,详细内容可以参见程序,程序开始执行时是逐个控制4位BCD编码输出,对应的数码管依次显示,初始状态为0001,0000,0000,0000 4位BCD码分别从J3,J2引出,数码管显示为1,0,0,0。
5 利用NSD绝对式位置编码器搭配专用控制器应用实例图解:
元件组合图:
传统与NSD产品检测差异图
NSD控制器及绝对式位置编码器图
传统式检测方式图
6 结论:
(1)传统式检测方式:功能受限,需多管配线,实用效果不佳,较难达到小差异工件之检测动作。
(2)NSD产品检测方式:功能较广泛,单一回授线与单一控制线,即可达成0~32组程序呼叫机能及各自0~15组(ON/OFF)开关,开关范围任意设定,工件勿差异值大于0.004mm以上皆可判定,实用性高。