在EC10上实现四位BCD拨码开关数据输入

合集下载

(完整word版)BCD拨码盘精选全文

(完整word版)BCD拨码盘精选全文

最新精选全文完整版(可编辑修改)BCD拨码盘在某些单片机应用系统中,有时只需要进行少量的十进制数据设定,例如,设定温度恒定在30℃。

这些参数具有两个特点:一是都由十进制数字(0~9)组成;二是设定值可能随时需要改变。

对于符合上述特点的输入场合,使用BCD拨码盘较为合适。

1.BCD拨码盘的构造精选全文,可以编辑修改文字!BCD拨码盘的构造如图1所示。

图1 BCD拨码盘阵列的构造它由处于前面板的拨码盘和处于后侧板的接线端组成.拨码盘由上下两个拨盘按钮和夹在按钮中间的拨位数码指示器组成。

拨位数码指示器是可随拨盘的拨动进行转动0~9十个数字,用以显示拨码盘当前数值。

上面的拨码按钮为增量按钮,每按下一次,拨码盘正相旋转1/10周,拨位数码指示器显示的数值加1,连续按十次,数据将被还原;下面的拨码按钮为减量按钮,每按下一次,拨码盘反相旋转1/10周,拨位数码指示器显示的数值减1.接线端向外引出标有8、4、2、1、A的五个引脚.在实际应用中,BCD拨码盘可以直接插入BCD拨码盘插座中使用,也可以采取从5个引脚上分别焊接引线的方式使用。

BCD拨码盘的接线端是当前拨码盘位置的反映,拨码盘数码显示的数值直接影响8、4、2、1四个引脚与公共引脚A的导通状态,例如,当前拨码盘拨位数码指示器的显示数据为7时,图1中的4、2、1引脚均与A导通,8引脚与A不导通;当前拨码盘拨位数码指示器的显示数据为4时,仅有4引脚与A导通,其余三个引脚与A均不导通.拨码盘从0拨到9,A引脚与8、4、2、1四个引脚的导通的状态如表1所示。

此表中的0表示输入控制线A与输出线不通,表中的1表示输入控制线A与输出线相通。

表1 BCD拨码盘状态表从表中可以看出,8、4、2、1四个端子与A是否导通所对应的数值与其BCD码完全一致.2.BCD拔码盘的接口方法实际应用BCD拨码盘时,如果A端接高电平,8、4、2、1引脚需要经下拉电阻拉低,这样,这四个引脚不与A接通时为低电平,与A接通时为高电平.从8、4、2、1引脚上读到的数值即为拨码盘输入对应的BCD 码.如果A端接低电平,8、4、2、1引脚需经上拉电阻拉高,这样,这四个引脚不与A接通时为高电平,与A 接通时为低电平。

练习4-四位BCD译码器

练习4-四位BCD译码器

1.4 4位BCD译码器的设计4位BCD译码器可将BCD码转换成数字显示码,有4个输入引脚和7个输出引脚。

4位BCD译码器可分为共阴与共阳两种,下面以设计共阳4位BCD译码器为例来说明其设计方法。

1.实验原理共阳4位BCD译码器有4个输入端用来输入BCD码,7个输出端分别对应到七段显示4位BCD译码器应具备的脚位:输入端:D3、D2、D1、D0:输出端:S6、S5、S4、S3、S2、Sl、S0。

2.原理图输入由于原理图输入法较复杂,所以在这里不再详述。

3.文本输入(1)建立新文件:选取窗口菜单File—New,出现对话框,选Text Editor file选项,单击OK按钮,进入文本编辑画面。

(2)保存:选取窗口菜单File—save,出现对话框,键入文件名sevenBcD.vhd,单击OK按钮。

(3)指定项目名称,要求与文件名相同:选取窗口菜单File—Project—Name,键入文件名sevenBCD,单击OK按钮。

或也可以通过如下操作把当前设计项目设置成工程文件:选择菜单File|Project|Set Project to Current File命令,即将当前设计文件设置成Project。

选择此项后可以看到标题栏显示出所设文件的路径。

(4)选择实际编程器件型号:选取窗口菜单Assign—Device,出现对话框,选择ACEXlK 系列的EPlK30TCl44一3。

(5)输入VHDL源程序:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY sevenBCD ISPORT(D:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S :OUT STD_LOGIC_VECTOR(6 DOWNTO 0));END sevenBCD;ARCHITECTURE a OF sevenBCD ISBEGINPROCESS (D)BEGINCASE D ISWHEN 0000=>S<=“0000001”;一0WHEN 0001l=>S<=“1001111”;一1WHEN 0010=>S<=“0010010”;一2WHEN 0011=>S<=“0000110”;—3WHEN 0100=>S<:“1001100”;一4WHEN 0101=>S<=“0100lOO”;—5WHEN 0110=>S<=“0100000”;—6WHEN 0111=>S<=“0001111”;一7WHEN 1000=>S<=“0000000”;一8WHEN 1001=>S<=“0000100”;一9WHEN OTHERS=>S<=“111111l”;END CASE;END PROCESS;END a;(6)保存并查错:选取窗口菜单File—Project—Save&Check,即可针对电路文件进行检查。

7、协议设置:4位拔码开关-JM-2003 内置解码板说明

7、协议设置:4位拔码开关-JM-2003 内置解码板说明

JM-2003内置解码板说明VER2.1中文板(2006.12.20)一、主要参数:1. RS485通迅,最远1200M2. 多种控制协议,(可以根据用户要求定做协议)3. 体积:110×80×14mm4. 可以按装到7寸以上的室内外球机上。

5. AC24V 供电,适用于AC24V 的球形云台。

6. 内置10W 开关模块电源,可提供DC12V/500ma 稳压电源给摄像机供电。

7. 可控制三可变镜头、全向云台和一组辅助开关二、协议设置:4位拔码开关ON =1 OFF =0序号协 议拔码开关位置波特率适用范围备注0 PELCO-D Pelcod-2400 派尔高系列/康银主机Hc-96001 HY9600 德加拉、康银系列2 VICON( surveyor99) 4800 PICO2000系统 唯康主机3 Kalatel(kdt-312) DCW0601 9600 卡拉特设备 DCW 系统DCW 系统4 DH 大华//KCL 2400/19200大华/凯创嵌入式KCL -19200 DH -24005 NEOCAM 9600 耐康姆系统6 PIH1016 (利凌) 2400 利凌矩阵7 B01 9600 明景/维多8 PELCO-P 9600 派尔高主机/德加拉主机9 HN-C 9600 华南光电系列10 SAMSUNG9600 三星快球11 KODICOM –RX KRE-301RX 9600 PICASO 主机 Kodicom 主机增加光圈控制功能12 RM110/S1601 9600 诚丰系列/三乐系列13 红苹果 9600 红苹果矩阵14 银信V1200/ 9600 银信矩阵地址码从0开始15SANTACHI-450/9600 卡拉特KDT348矩阵48009600/ 4800三立矩阵 卡拉特矩阵Kdt304 -4800注:KODICOM 和PIACSO 卡增加了控制光圈功能,详见底页说明。

东北大学数字电子课程设计(四位十进制密码锁)

东北大学数字电子课程设计(四位十进制密码锁)

课程设计报告设计题目:四位十进制密码锁班级:学号:姓名:指导教师:日期:摘要锁,是一种保护隐私和秘密的重要工具。

如今大到国家机关,小到居民住宅,锁无处不在。

密码锁是锁的一种,开启时用的是一系列的数字或符号组成的密码。

而电子密码锁是一种通过密码输入来控制电路或是芯片工作,从而控制机械开关的闭合,完成开锁、闭锁任务的电子产品。

它的种类很多,有简易的电路产品,也有基于芯片的性价比较高的产品。

现在应用较广的电子密码锁是以芯片为核心,通过编程来实现锁的功能的。

在本课程设计中,我设计了一个四位十进制密码锁。

主要分为如下几个部分:1.用户密码输入单元:位于密码锁外部,为用户提供按键式输入密码的方式。

2.密码显示单元:位于密码锁外部,一组数码管对密码输入状态进行显示。

3.真实密码存储单元:位于密码锁内部,存储真实密码,且该密码可以被用户修改。

4.密码正误判定单元:位于密码锁内部,判断用户密码是否输入正确。

5.计时报警单元:位于密码锁内部,计时器配合一个蜂鸣器当计时结束后还没有正确的密码输入,则蜂鸣器报警。

关键词:计数器,计时器,锁存器,数值比较器,触发器目录第1章概述 (1)第2章课程设计任务及要求 (2)2.1 设计任务 (2)2.2 设计要求 (2)第3章系统设计 (3)3.1方案论证 (3)3.2 系统设计 (5)3.2.1 结构框图及说明 (5)3.2.2 系统原理图及工作原理 (6)3.3 单元电路设计 (6)3.3.1单元电路工作原理 (6)3.3.2元件参数选择 (9)第4章软件仿真 (10)4.1 仿真电路图 (10)4.2 仿真过程 (11)4.3 仿真结果 (12)第5章安装调试 (21)5.1 安装调试过程 (21)5.2 故障分析 (21)第6章结论 (22)第7章使用仪器设备清单 (23)参考文献 (24)收获、体会和建议 (25)第1章概述锁,是一种保护隐私和秘密的重要工具。

如今大到国家机关,小到居民住宅,锁无处不在。

四位拨动开关控制数码管显示系统设计书

四位拨动开关控制数码管显示系统设计书

四位拨动开关控制数码管显示系统设计书1.设计背景单片机具有人机对话功能,开关,键盘是实现人机对话的主要输入设备,也是最常用的设备,通过它能发出各种控制指令和数据到单片机。

而二极管,数码管,LED显示器是常用的输出设备,单片机接受一系列指令到,执行一定功能后,可通过这些设备输出。

为了更好的掌握单片机的硬件特性以及用汇编语言进行编程设计,我们运用目前所学的知识,来设计了一个单片机最小系统——用拨码开关控制数码管显示系统。

2.设计方案2.1方案一使用单片机P1口,由4位DIP开关从P1口低四位输入,高四位输出,译码部分采用74LS247译码器,送往共阳极数码管显示。

本方案编程简单,占用I/O端口少,但电路设计较复杂,硬件增多,成本增高。

2.2方案二本方案的译码部分由单片机编程实现,P1口接共阳数码管,由4位DIP开关从P0口低四位输入,经软件译码,送往P1口,在数码管显示相应的数字。

由于译码部分采用了软件实现,省去了译码电路,成本降低,电路设计简单,但编程较方案一复杂,而且占用I/O端口多,占用系统资源。

综合考虑,确定采用方案二实现。

3.方案实施3.1输入输出电路设计该设计以AT89S52单片机为核心部件,AT89S52单片机有4个双向的8位并行I/0口,分别记为P0、P1、P2和P3口。

本次设计中主要使用P0作为输入口,P1作为输出口。

P0口:P0口为一个8位漏级开路双向I/O口,每个脚可吸收8TTL门电流。

当P1口的管脚第一次写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。

P1口:P1口是一个部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL 门电流。

P1口管脚写入1后,被部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于部上拉的缘故。

易控EC510恒压供水说明书

易控EC510恒压供水说明书
4.在加速,运行,减速中出现跳变频器故障
1.检查电机,电机输出线绝缘情况 2.延长减速时间。 3.加装制动电阻或制动单元。检查制动单元或电阻是否 合理与损坏 4.检查电源电压,确认变频器没坏再次上电
5.联系送修
输出短路SC
1.上电待机跳SC,OC,变频器故障
(电流超过IGBI的 安全工作电流值)
2.运行跳SC,OC A.电机,电机线相间短路.
0
0:故障
1:运行中
22:辅泵1
23:辅泵2
1
24:D12设置为4,5功能时此参数自动更改为24(1#电机变频触点)
25:D12设置为4,5功能时此参数自动更改为25(1#电机工频触点)
2
26:D12设置为4,5功能时此参数自动更改为26(2#电机变频触点)
3
27:D12设置为4,5功能时此参数自动更改为27(2#电机工频触点)
1
0:减速停车
1:滑行停车
1
0:允许反转
1:禁止反转
按实际定
按实际定
0
A03控制方式选择2,3外部模拟量为目标值时此参数有效
0:FI是0~10V输入,主板拨码开关(SW1到V,出厂设置位置)
0
1:FI是4~20MA输入,主板拨码开关(SW1到I)
0
0:S1端子正转(2线制) 1:S1正转,S2停止(3线制)
接点输入 输出功能
B01 S2功能 B08 Y1功能 B09 Y2功能 B10 Y3功能 B11 Y4功能
D01 PID选择
PID控制
D02 反馈增益 D03 比例增益 D04 积分时间 D05 比例增益 D06 PID偏置
D07 积分限值 D08 滤波时间 D09 反馈检测 D10 丢失基准 D11 丢失时间

4位BCD码运算.doc

4位BCD码运算.doc

ORG 0000HAJMP MAINORG 0030MAIN: MOV 7AH,#09H //置显示缓冲区MOV 7BH,#09HMOV 7CH,#09HMOV 7DH,#09HMOV 7EH,#09HMOV 7FH,#09HMOV A,#43H //8155 方式字MOV DPTR,#0FF20H //8155 方式字地址MOVX @DPTR,A //初始化8155MOV R5,#00HLOOP0:ACALL KEY1 //调键盘程序LINK: ACALL DIR //调显示程序ACALL DLT //调延时程序SJMP LOOP0//键盘扫描程序KEY1: ACALL KS1 //判断有无健闭合JNZ LK1 //有健闭合((A)≠0),转去抖动 AJMP NS //无健闭合,延时6msLK1: ACALL DLT //延时6msACALL DLT //延时6msACALL KS1 //再判断有无健闭合JNZ LK2 //有健闭合((A)≠0),求健码ACALL DLT //延时6msAJMP KEY1 //无健闭合,返回LK2: MOV R2,#0FEH //R2<-扫描码MOV R4,#00H //R4?列号LK3: MOV DPTR,#0FF21H //DPTR<-A 口地址MOV A, R2 ;MOVX @DPTR,A //A 口<-扫描码INC DPTRINC DPTR //指向C 口MOVX A,@DPTR //读C 口JB ACC.0, L1 //PC0=1 转,第一行无键闭合 MOV A, #00H //PC0=0,第一行有键闭合AJMP LK //转去求键号L1: JB ACC.1, L2 //PC1=1 转,第2 行无键闭合 MOV A, #08H //置行号AJMP LKL2: JB ACC.2 , L3 // PC1=1 转,第3 行无键闭合 MOV A, #10H //置行号AJMP LKL3: JB ACC.3 , NEXT //PC1=1 转下列,第4 行无键闭合 MOV A, #18H //置行号LK: ADD A,R4 //键号=行号+列号MOV R1,#64HMOV @R1,AACALL NUMDEC R1MOV A,@R1PUSH ACC //保存在堆栈中LK4: ACALL DLTACALL DIR //调显示程序ACALL KS1JNZ LK4 //等待键释放POP ACCMOV 7FH,7EH //显示缓冲区左移一位MOV 7EH,7DHMOV 7DH,7CHMOV 7CH,7BHMOV 7BH,7AHMOV 7AH,AMOV R0,#65H //存储键盘输入的ascii码MOV A,@R0MOV 3EH,3DH //35H-3EH存输入的所有键盘号的ASCII码 MOV 3DH,3CHMOV 3CH,3BHMOV 3BH,3AHMOV 3AH,39HMOV 39H,38HMOV 38H,37HMOV 37H,36HMOV 36H,35HMOV 35H,AINC R5 //记录输入几位数据CJNE A,#45H,NS //有无等于号?MOV R1,#35H //末位数据存储地址AJMP RESULT //有等号转去求结果NS: RETNEXT: INC R4 //形成新的列号,指向下一列MOV A, R2 //A 口<-扫描码JNB ACC.7, NS //判断6 列扫描是否完毕RL A //形成新的扫描码MOV R2, AAJMP LK3 //转去扫描下一列//查是否有键闭合子程序KS1: MOV DPTR, #0FF21HMOV A,#00HMOVX @DPTR, AINC DPTRINC DPTRMOVX A,@DPTRCPL AANL A, #0FHRET//显示程序DIR: MOV R0, #7AH //置显示缓冲区首地址MOV R3, #01H //置位选码MOV A, R3LOOP: CPL AMOV DPTR, #0FF21H //A 口地址MOVX @DPTR,AINC DPTR //B 口地址AJMP JUDGE //先去判断现实的是否为运算符CON: MOV A, @R0 //取显示数据ADD A,#13H //表首的的地址MOVC A, @A+PC //转换为显示码JNB PSW.7, DIR1 //F0=1,显示小数点SETB ACC.7DIR1: CPL AMOVX @DPTR, A //从B 口输出显示ACALL DLT //延时INC R0 // 下一个显示数据MOV A, R3 //取位选码JB ACC.5, LOOP1 //六位显示完毕?RL A //新的位选码MOV R3, AAJMP LOOPLOOP1:RET;显示代码表DB 07H,66H,7FH,6DHDB 6FH,7DH,7DH,7CHDB 06H,3FH,5BH,71HDB 4FH,79H,39H,5EHDB 40H;延时程序:DLT: MOV R7, #04HDLT1: MOV R6, #0FFHDLT2: DJNZ R6,DLT2DJNZ R7, DLT1RETJUDGE: MOV R1,#65H //判断是否为符号MOV A,@R1CJNE A,#41H,J1 //加号?AJMP SIGNALJ1: CJNE A,#42H,J2 //减号?AJMP SIGNALJ2: CJNE A,#43H,J3 //乘号?AJMP SIGNALJ3: CJNE A,#44H,J5 //除法?AJMP SIGNALJ5: CJNE A,#46H,J6 //按F键复位?MOV R1,#92H //复位MOV @R1,#00HMOV 35H,#00HMOV 36H,#00HMOV 37H,#00HMOV 38H,#00HMOV 39H,#00HMOV 3AH,#00HMOV 3BH,#00HMOV 3CH,#00HMOV 3DH,#00HMOV 3EH,#00HMOV 60H,#00HMOV 61H,#00HMOV 51H,#00HMOV 50H,#00HAJMP SIGNALJ6: AJMP CONRESULT:INC R1 //求结果MOV A,@R1CJNE A,#41H,ARITH1 //有加号?AJMP AD1ARITH1: MOV A,@R1CJNE A,#42H,ARITH2 //有减号?AJMP SUB1ARITH2:CJNE A,#43H,ARITH3 //有乘号?AJMP AL1ARITH3:CJNE A,#44H,ARITH4 //有除号?AJMP DI1ARITH4:DJNZ R5,RESULT //都无,再取前一位数据 AJMP NSNUM: ANL A,#0FH //求键号ASCII码MOV DPTR,#TABMOVC A,@A+DPTRINC R1MOV @R1,A //ASCll码存83HRETTAB: DB '748596AB'DB '102F3ECD'SIGNAL:MOV 7AH,#09H //置显示缓冲区MOV 7BH,#09HMOV 7CH,#09HMOV 7DH,#09HMOV 7EH,#09HMOV 7FH,#09HAJMP CON//加法AD1: ACALL TRANS //将存在35-3EH中的数压缩到51,50与61,60H中ACALL AD12 //加法运算ACALL SPR //90-92H中的结果拆成六位放20-28HACALL XIANSHI //结果显示RET//减法SUB1: ACALL TRANSACALL SUB12ACALL SPRACALL XIANSHIRET//乘法AL1: ACALL TRANSACALL AL12ACALL SPRACALL XIANSHIRET//除法DI1: ACALL TRANSACALL DI12ACALL SPRACALL XIANSHIRETTRANS: MOV 3FH,#00H //翻译程序将ASCII变为BCD,并将四位合并为两地址中 MOV 30H,R1 //翻译输入的二位MOV R2,#60H //第二位数高两位地址NE1: MOV R3,#02H //计数单位LOO: DEC R1 //取等号前一位数据MOV A,@R1CJNE A,#45H,LOO0 //是否译到等于号?AJMP LOO1LOO0: AJMP CO1CO1: CLR CYSUBB A,#30H //减去30,将ASCII转为运算数 ADD A,3FH //低位高位相加SWAP A //交换高低MOV 3FH,A //低位存高位DJNZ R3,LOO //第二位新储存地址MOV 31H,R1 //取数的地址暂存MOV 33H,R2 //存储地址暂存MOV R1,33HSWAP A //交换高低位MOV @R1,A //存入MOV 3FH,#00H //存高位的暂存地址清零INC R2 //下一存储地址MOV R1,31H //暂存的取数地址还原AJMP NE1LOO1: DEC R5 //翻译第一个输入数MOV 3FH,#00H // 置取数,存数地址MOV R1,30HMOV R2,#51HNE2: MOV R3,#02HLOO2: INC R1MOV A,@R1DJNZ R5,LOO3 //输入数据是否译完RETLOO3: AJMP CO2 //跟loo0作用相似CO2: SUBB A,#30HANL A,#0FHADD A,3FHSWAP AMOV 3FH,ADJNZ R3,LOO2MOV 32H,R1MOV 33H,R2MOV R1,33HMOV @R1,AMOV 3FH,#00HDEC R2MOV R1 ,32HAJMP NE2AD12: CLR C //加法计算MOV A,51HADDC A,61HDA AMOV R0,#90H //低位相加MOV @R0,AMOV A,50HADDC A,60HDA AINC R0 //高位相加MOV @R0,AMOV A,#00HADDC A,#00HINC R0MOV @R0,ARETSUB12:MOV A,51H //减法计算SUBB A,61HMOV A,50HSUBB A,60HJNC SUB13 //比较两个数大小 MOV R0,#92H //做负数运算MOV @R0,#0F0HMOV R1,#61H //减数,被减数交换 MOV R0,#51HAJMP SUB14SUB13:MOV R1,#51H //正常取数MOV R0,#61HSUB14:CLR C //运算开始ACALL BSUBMOV 11H,R0MOV R0,#90HMOV @R0,AMOV R0,11HACALL BSUBMOV R1,#91HMOV @R1,ARETBSUB: MOV A,#9AHSUBB A,@R0ADD A,@R1DA ADEC R0DEC R1CPL CRETSPR: MOV 20H,#00H //将三地址中的数拆为六位MOV 21H,#00H //储存地址清零MOV 22H,#00HMOV 23H,#00HMOV 24H,#00HMOV 25H,#00HMOV R0,#90H //初始化,r0运算结果最低位 MOV R1,#20H //r1新存储地址,r2循环量 MOV R2,#04HCLR CLOW1: MOV A,@R0ANL A,#0FH //屏蔽高位MOV @R1,A //存储AINC R1 // 下一存储地址MOV A,@R0ANL A,#0F0H //屏蔽低位SWAP AMOV @R1,AINC R0INC R1DJNZ R2,LOW1 //是否全部拆完?RETXIANSHI://MOV 83H,#00H //显示结果MOV R0,#20H //取数地址MOV R1,#29H //显示存储地址MOV R2,#06H //设置循坏变量XIAN: MOV A,@R0CJNE A,#00H,H1 //将结果变换为显示码MOV @R1,#09HH1: CJNE A,#01H,H2MOV @R1,#08HH2: CJNE A,#02H,H3MOV @R1,#0AHH3: CJNE A,#03H,H4MOV @R1,#0CHH4: CJNE A,#04H,H5MOV @R1,#01HH5: CJNE A,#05H,H6MOV @R1,#03HH6: CJNE A,#06H,H7MOV @R1,#05HH7: CJNE A,#07H,H8MOV @R1,#00HH8: CJNE A,#08H,H9MOV @R1,#02HH9: CJNE A,#09H,H101MOV @R1,#04HH101: CJNE A,#0FH,H10MOV @R1,#10HH10: INC R0INC R1DJNZ R2,XIAN //是否全部转完?MOV 7AH,29H //将转换码放入显示缓冲区MOV 7BH,2AHMOV 7CH,2BHMOV 7DH,2CHMOV 7EH,2DHMOV 7FH,2EHAJMP DIRAL12: LCALL CHANGE10TO16 //乘法运算压缩BCD码转十六进制CLR CMOV A,73HMOV B,74HMUL ABMOV 73H,A //16进制积的低八位MOV 74H,B //16进制积的高八位LJMP CHANGE16TO10 //十六进制转压缩BCD码, 分开到各单元,显示CHANGE10TO16:MOV B,#16MOV A,51HDIV ABMOV R3,AMOV R4,BMOV B,#10MUL ABADD A,R4MOV 73H,A //第一操作数--73HMOV B,#16MOV A,61HDIV ABMOV R3,AMOV R4,BMOV B,#10MUL ABADD A,R4MOV 74H,A // 第二操作数--74HRETCHANGE16TO10:CLR AMOV R3,AMOV R4,AMOV R5,AMOV R2,#10HMOV R7,73HMOV R6,74HHB: MOV A,R7RLC A //带进位循环左移 MOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3MOV R3,ADJNZ R2,HBLJMP PREXSPREXS: MOV R0,#91H //将高位存入 MOV A,R4MOV @R0,AMOV R0,#90H //将低位存入 MOV A,R5MOV @R0,ARETDI12: LCALL CHANGE10TO16 //除法运算 MOV A,74HCLR CMOV A,73HMOV B,74HDIV ABMOV 73H,A //73H存商MOV 74H,B //74H存余数LJMP CHANGE2CHANGE2:MOV A,73H精品文档。

基于单片机的四位BCD编码器电路设计

基于单片机的四位BCD编码器电路设计

基于单片机的四位BCD编码器电路设计1 引言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作为列线,设计键盘扫描程序可以达到预先设想的功能(见软件设计部分)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在EC10上实现四位BCD拨码开关设定值输入
概要:
本文使用EC10的源型输入功能,利用四个输入口和四个输出口来实现一组四位拨码开关设定值的读入,并且可以在此基础上实现更多位拨码开关设定值的读入,还可在这个程序编制过程中体会到如何在PLC控制系统中节省输入口的一些技巧。

关键词:BCD码、拨码开关、PLC、源型输入、漏型输入
一、拨码开关简介
如果PLC控制系统中的某些控制参数或数据经常需要人工修改,可使用拨码开关与PLC进行连接,在PLC外部进行数据设定或修改。

如下图所示的四位一组的拨码开关,每一位拨码开关可以输入十进制的0-9,或者是十六进制的0-A。

BCD拨码开关是十进制输入,BCD码(即2-10十进制)输出,又称为8421拨码开关。

每位BCD拨码开关可输入1位10进制数,4片BCD拨码开关拼接可得4位10进制输入拨码组。

每个BCD拨码开关后面有5个接点,其中C为输入控制线,另外4根是BCD 码输出信号线。

拨盘拨到不同的位置时,输入控制线C分别与4根BCD码输出线中的某根或某几根接通。

其接通的BCD码输出线状态正好与拨盘指示的10进制数相一致,符合2-10进制编码关系。

拨码开关外形图拨码开关接线端子图
二、PLC的源型输入
EC10系列PLC提供给用户进行输入方式的选择,端子排上的S/S端子用来选择信号的输入方式,可以设置成源型输入方式或漏型输入方式。

将S/S端子与+24V端子相连,即设置为漏型输入方式,可以连接NPN型传感器,PLC的+24V端子和COM端子配合,提供给输入元件24V直流电源;将S/S端子和COM端子相连,即设置为源型输入方式,可以连
接PNP 型传感器,这时外部输入元件将使用外部辅助电源。

EC20出厂设置为漏型输入,但可通过改焊PLC 内部接口板上的JP0、JP1、JP2三个跳线(0欧姆SMT 电阻)来实现源型输入,参照板上的丝印说明(√表示焊接,×表示断开):
JP0 JP1 JP2 源型输入方式
√ × × 漏型输入方式(出厂设置) × √ √
在主模块中,所以的输入端口只能采用同一种输入方式(源型或漏型),如果EC20需要采用源型输入方式,请在订货时咨询供应商,不要擅自改动,以免造成损坏。

在本文中,要利用四个PLC 输入端口实现四位拨码开关设定值的读入,因此将使用四个PLC 输出口来分别控制四位拨码开关的依次读入,所以对于PLC 输入口而言,是采用源型输入方式。

下图为源型输入方式的EC10主模块输入端口内部等效电路图
三、设备及连线
设备器材说明:EC10-1614BTA 1台
四位拨码开关 1只
二极管IN4001 16只
PLC 接线图:
各种信号输入设备
四、PLC程序及设计要点
1、D30中的数据,即为4位BCD拨码开关的设定值。

2、在程序中设计了一个数据输入按钮X0,当X0置为ON时,PLC依次读入拨码开关各位的设定值一次,避免重复读数,减少PLC的运算量及输入、输出端口的通断次数。

3、用Y2、Y3、Y
4、Y5的依次输出,来控制在X1-X4端口分别输入四位拨码开关每一位设定值的依次读入:在仅有Y2输出时,X1-X4读入的是第一位即个位拨码开关的设定值,在仅有Y3输出时,X1-X4读入的是第二位即十位拨码开关的设定值……
4、十位拨码开关的读数应乘以10,百位拨码开关的读数应乘以100,千位拨码开关的读数应乘以1000,应注意整数乘法运算的结果是32位的整数,本文中最大输入值为9999,故所有的乘积(32位数)的高位都是0,在合并各位的读数时,只需对各32位数的低位进行处理。

5、程序中采用了SFTL字串左移指令,配合SM11周期为100ms的时钟振荡,来实现Y2-Y5的依次输出和拨码开关各位设定值的读入。

五、注意事项
1、建议使用晶体管输出型的PLC。

2、在程序中,拨码开关每一位的设定值,是采用将K1X1的值送入相应的D寄存器,来读进到PLC的,因此在接线的时候,X1对应的是每一位拨码开关的1脚,X4对应的是每一位拨码开关的8脚。

3、在编制程序时,如果用SM15,即一个扫描周期振荡一次的输出来控制STFL指令,由于这个时间间隔过短,容易造成数据刷新和输入输出口的刷新出现问题,会出现读错数据的情况。

改用SM11,每100ms振荡一次,这个时间间隔在实际运用上也是允许的,而且不会出现读数混乱的问题。

4、在PLC接线图中可以看到,如果在拨码开关的1、2、4、8脚和PLC的输入口中间如果没有二极管,先假设个位开关的拨码设定是3,即个位开关的1脚和2脚与C脚之间接通,在Y2输出一个高电平到个位开关C脚并读取个位的设定值后,Y2输出终止,Y3输出高电平到十位开关的C脚,这个时候本应该是读取十位开关的设定值,但Y3输出的高电平可能会通过个位开关的1脚和2脚流到C脚,等同于Y2也输出了一个高电平加在个位开关的C脚上,这样将会导致读数混乱。

在拨码开关的1、2、4、8脚和PLC输入口之间焊焊上二极管IN4001(参见PLC接线图),隔断四片开关相应的四个脚,可解决这个问题。

因此在应用中如果要使用到这种拨码开关,建议选购内部带有二极管的,不过要注意二极管的极型(共阴极或共阳极)是否符合要求。

参考书籍:
1、EC10系列可编程控制器用户手册
2、EC1020系列可编程控制器编程参考手册
3、欧姆龙A7系列拨码开关产品样本。

相关文档
最新文档