课程中心
HOME
课程中心
正文内容
8421plc编程 8421编码开关如何使用,请看这里
发布时间 : 2025-02-25
作者 : 小编
访问数量 : 23
扫码分享至微信

8421编码开关如何使用,请看这里

8421编码开关

8421编码开关种类繁多,按操作方式分有指拔式、旋转式;按制式分有二进制、十进制、十六进制等。每一位都有一个独立的BCD编码拨动盘,我们每选择的一个数字都由里面的印刷电路产生BCD编码,分别由下面的4个管脚输出。组合非常灵活,我们可以根据设计的需要,任意组合多个BCD编码拨动盘来组成多位的应用。

在单片机设计中,特别是工业应用的设计中,一些外部的数值设置我们经常会选择用到它。使用起来也比较方便。

一个8421编码拔动盘,如果是十进制的是数字0-9,如果是十六进制的数字是0-F。也就是说十进制有10个数字,十六进制有十六个数字。而8421编码正好可以编码16个数字,它的编码方式参考图1。

图1 8421编码方式

8421编码开关与单片机的硬件连接参考图2,这里以4位拔码盘为例。

图2 硬件连接方式

图2中的电阻为限流电阻,阻值选择300R。二极管,是为了防止各位编码盘数据位的相互窜扰,可以选择1N4001。

读取编码盘的工作原理

单片机上电复位时,W1-W4保持高电平。我们用它们来读取各数据位的状态,在工作期间不去变更它们的电平状态,它们的电平状态将由D0-D3来决定。

在读取数据时,首先把D0-D4全部拉到高电平。D0拉为低电平,延时一段时间再分别去读取W1-W4的状态就可以知道4位编码盘的D0是什么状态。W1-W4读到的是低电平,那么说明相应4位编码盘的D0被编码了。用相同的方式去操作D1-D3就可以把完整的数值读取出来。

下面用程序来说明这一操作过程

/***********************拔码开关应用程序*************************/

#include <STC15F2K60S2.H>

int t_1ms, t_50ms; //这里定义的是1ms和50ms定时器,详细说明在上一课中有详细介绍

unsigned int Read_Switch[2], Read_Switch_Dec[2]; //定义读取到编码开关的16进制和10进制值的存储数组

void Read_8421_Switch();

void main()

{

Read_8421_Switch();

}

void Read_8421_Switch() //指拔开关设置值读取

{

static float scantime = 0;

static bit reachtime = 0, savetime = 0, R_W = 0;

static char switch_bite = 1;

char turnchar = 0, turncnt = 1, i;

static int turnchartmp[1], Read_Switch[1];

int turnmul = 0;

if(!savetime)

{

scantime = t_1ms;

savetime = 1;

}

if((t_1ms - scantime) < 0) //防止定时寄存器溢出时出现负数的情况

scantime = t_1ms;

if(savetime && t_1ms - scantime > 5) //5ms等待延时

reachtime = 1;

if(!reachtime)

goto Read__out;

//这一段设置了一个5ms的状态保持时间,在时间到了之后才会去读取W1-W4的状态

switch(switch_bite) //选择去拉低D0-D3中的哪一个

{

case 1: //操作D0

if(R_W) //决定是去拉低D0的电平,还是去读取W1的状态

{

//读取D0状态并写入暂存寄存器

if(P33)

Read_Switch[0] &= 0xEFFF;

else

Read_Switch[0] |= 0x1000;

if(P35)

Read_Switch[0] &= 0xFEFF;

else

Read_Switch[0] |= 0x100;

if(P36)

Read_Switch[0] &= 0xFFEF;

else

Read_Switch[0] |= 0x10;

if(P37)

Read_Switch[0] &= 0xFFFE;

else

Read_Switch[0] |= 0x1;

P15 = 1; //读取完成时重新拉高D0,以备下一次的读取

}else{

P15 = 0; //拉低D0

}

break;

case 2: //操作D1

if(R_W) //决定是去拉低D1的电平,还是去读取W2的状态

{

//读取D1状态并写入暂存寄存器

if(P33)

Read_Switch[0] &= 0xDFFF;

else

Read_Switch[0] |= 0x2000;

if(P35)

Read_Switch[0] &= 0xFDFF;

else

Read_Switch[0] |= 0x200;

if(P36)

Read_Switch[0] &= 0xFFDF;

else

Read_Switch[0] |= 0x20;

if(P37)

Read_Switch[0] &= 0xFFFD;

else

Read_Switch[0] |= 0x2;

P16 = 1; //读取完成时重新拉高D1,以备下一次的读取

}else{

P16 = 0; //拉低D1

}

break;

case 3: //操作D2

if(R_W) //决定是去拉低D2的电平,还是去读取W3的状态

{

//读取D2状态并写入暂存寄存器

if(P33)

Read_Switch[0] &= 0xBFFF;

else

Read_Switch[0] |= 0x4000;

if(P35)

Read_Switch[0] &= 0xFBFF;

else

Read_Switch[0] |= 0x400;

if(P36)

Read_Switch[0] &= 0xFFBF;

else

Read_Switch[0] |= 0x40;

if(P37)

Read_Switch[0] &= 0xFFFB;

else

Read_Switch[0] |= 0x4;

P17 = 1; //读取完成时重新拉高D2,以备下一次的读取

}else{

P17 = 0; //拉低D2

}

break;

case 4: //操作D3

if(R_W) //决定是去拉低D3的电平,还是去读取W4的状态

{

//读取D3状态并写入暂存寄存器

if(P33)

Read_Switch[0] &= 0x7FFF;

else

Read_Switch[0] |= 0x8000;

if(P35)

Read_Switch[0] &= 0xF7FF;

else

Read_Switch[0] |= 0x800;

if(P36)

Read_Switch[0] &= 0xFF7F;

else

Read_Switch[0] |= 0x80;

if(P37)

Read_Switch[0] &= 0xFFF7;

else

Read_Switch[0] |= 0x8;

P32 = 1; //读取完成时重新拉高D3,以备下一次的读取

}else{

P32 = 0; //拉低D3

}

break;

}

savetime = 0; //5ms定时时间到后的操作完成,等待下一次5ms定时

reachtime = 0; //重置定时标志

R_W = ~R_W; //拉低D0-D3或读取W1-W4标志转换

if(!R_W)

switch_bite++; //D0-D3循环

if(switch_bite > 4) //D0-D3全部读取完成进行数据处理,把十六进制值转换为我们设置的十进制值

{

switch_bite = 1;

Read_Switch_Dec[0] = 0;

turnchartmp[0] = Read_Switch[0];

for(i = 0; i < 4; i++)

{

switch(i)

{

case 0:

turnmul = 1;

break;

case 1:

turnmul = 10;

break;

case 2:

turnmul = 100;

break;

case 3:

turnmul = 1000;

break;

}

turnchar = turnchartmp[0] & 0xF;

Read_Switch_Dec[0] = Read_Switch_Dec[0] + turnchar * turnmul;

turncnt = (i + 1) * 4;

turnchartmp[0] = Read_Switch[0] >> turncnt;

}

turnchartmp[0] = Read_Switch[0];

}

Read__out:

_nop_();

}

学习PLC,就要懂得常用进制在PLC编程中的应用

PLC也是一台微电脑,许多功能指令离不开进制转换,同时也是为了增加程序的可读性,想要对PLC进行编程,那么必须得清楚数制的设置以及转化和对应的符号。

当然,人们输入计算机的十进制被转换成二进制进行计算,计算后的结果又由二进制转换成十进制,这都由操作系统自动完成,并不需要人们手工去做。人们通常采用的数制有十进制二进制、八进制和十六进制。

常用进制对应表

常用进制使用场合

二进制只有 0 和 1 两个符号,按照逢二进一的规则运算。0和1用来表示开关量(或称数字量)的两种不同状态,如触点的断开和接通,线圈的得电和失电等。

所有数据的运算、存储都是采用二进制进行

西门子PLC上的输入输出编号是采用八进制方式命名

MODBUS-RTU通信数据发送与接收是采用了十六进制

某变频器的参数地址以十六进制分配

进制之间的相互转换

方法:二进制数从低位到高位(即从右往左)计算,第0位的权值是2的0次方,第1位的权值是2的1次方,第2位的权值是2的2次方,依次递增下去,把最后的结果相加的值就是十进制的值了!

方法:将二进制数从最低位开始( 从右到左 ),以4位二进制数为一组进行分组,最左边不足4位的补零。然后对每组分别运用“8421”法则快速运算。

方法:十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为止。

方法:对于每一位十六进制数,分别运用“8421”法则快速运算,逐位展开成4位二进制数,不足四位的补零,最后最左边的零可省略。

方法:要从右到左用二进制的每个数去乘以16的相应次方,然后这些数字相加就是了。

以上,欢迎动动手分享及收藏!

相关问答

8421开关怎么接PLC?

每一只4位拨码开关的线路板一共有5个输出点,需要占用PLC的4个位。线路板上标着8421字样,可以这样接:1接PLC的00位、2接PLC的01位、4接PLC的03位、8接PLC的03...

8421码如何在plc中使用?

你好,要在PLC中使用8421码,首先需要了解8421码的含义和应用场景。8421码是一种二进制编码,常用于数字显示器和BCD码器中。在数码管和BCD码器中,每个数码管的7...

三菱plc怎么用8421去表示十进制数,可以将这个数值存在D中吗,别喷我,我是菜鸟?

8421其实是代表4位二进制数对应十进制数的,比如一个存储通道内的低4位数为1001,用8421代表就是,8所在的位为1,1所在的位为1,也就是8+0+0+1=9,二进制的1001...

8421编码器原理?

01这十种状太,分别表示0~9这十个十进制数...我们把所使用的每一种二进制代码状态都赋于特定的含义,表示一个特定的信号或对象,叫编码。如用四位二进制数的000...

现在设备plc指令都不用步进,用的是什么编程法?

应该是说编程语言吧PLC的编程语言1.所谓程序编制,就是用户根据控制对象的要求,利用PLC厂家提供的程序编制语言,将一个控制要求描述出来的过程。PLC最常用的...

如何学习PLC?

如何学习PLC我来分享一下之前自己学习PLC的经历。读书的时候没有接触过PLC实物,看看书了解了一下梯形图。但具体怎么样,系统架构和工作原理怎样都不懂。后来参...

三菱plc里二进制怎么表明-ZOL问答

BCD码是由8421组成任何一个十进制数都可以用BCD码表示比如十进制数8421就可以用BCD码表示成8000040000200001也就是0到9的十进制用8421相加得到的...

bcd码是什么?BCD码用在哪方面?-樱桃沙儿的回答-懂得

一、BCD码BCD码进数或二-十进制代码。用4位二进制数来的0~9这10个数码,是一种二进制的数字编码形式,用二进制编码的十进制代码。二、BCD码的应用1、...

电子秤传感器接线方法谁了解?_住范儿家装官网

电子秤传感器的接线方法:正规传感器厂家的产品,利用导线颜色可以简单辨别。红=E+[传感器激励电压+]黑=E-[传感器激励电压-]绿=S+[传感器输出信...

e-mail是不是邮箱?邮箱地址正确格式是什么?-ZOL问答

为什么8421浏览6回答华硕的笔记本电脑X53B好不好?求详细参数,和报价!1.3...S7系列的PLC的编程语言LAD、STL、SCL、GRAPH、HIGRAPH、CFC分别是什么意思...

 国尊会所  青岛聂磊黑社会纪实 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2025  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部