编程目的:7个开关量变成3个输出量。
7个开关量任意相加组合,任意组合后有1个开关量闭合时,继电器Q0.5输出。任意组合后有2个开关量闭合后,继电器Q0.4输出。
任意组合后有3个开关量闭合后,继电器Q0.5 Q0.4同时输出。任意组合后有4个开关量闭合后,继电器Q0.3输出。任意组合后有5个开关量闭合后,继电器Q0.3 Q0.5同时输出。任意组合后有6个开关量闭合后,继电器Q0.3 Q0.4同时输出。任意组合后有7个开关量闭合后,Q0.3 Q0.4 Q0.5同时输出。
我是一菜鸟,请大家帮忙。,我感觉就是8421码和实属转换比较的问题。请高手指教。
用C 语言实现,大概是这样的,
定义 , BYTE(CHAR) 类型变量 VB1,假设VB1里面存储了 7位变量,I0.0~I0.6, 那么用一个For循环,检测每一位是否是1,然后计数,在循环完成后,判断计数值,即可知道有几个 位时1 了;然后根据计数值做相应的输出即可;
示例 :
unsigned char VB1; //定义 变量,假设VB1中存储了 7位BOOL 量;
int CheckBit(unsignedcharVB1) // 检测VB1中有几个位是1 ,做计数,然后返回计数值;
{
int i=0;
unsigned char nBYTE;
int count;
nBYTE=VB1;
for(i=1;i<7;i++)
{
if(nBYTE & 0x1) // 检测最低位是否是1,如果是 计数加1
count++;
nBYTE=nBYTE>>1; // 变量向右移动 一位,1 BIT 位,
}
return count; / / 返回计数值,就是变量里面 有几个位 是 1;
}
int main()
{
if(1==CheckBit)
........ 1 个开关闭合,输出一个Q 0.5点;
if(2==CheckBit)
........ 1 个开关闭合,输出一个Q0.4 点;
if(3==CheckBit)
........ 1 个开关闭合,输出Q0.4 ,Q0.5点;
}