实现对四个两段8421拨码开关的读取,能否将下面的汇编改成C语言代码

2024-12-17 03:26:47
推荐回答(2个)
回答1:

两个及两个以上的BCD拨码盘可以使用公共引脚A动态扫吵昌描的方法
所有BCD拨码盘的公共引脚A分别作为不同的扫描线连接单升迟扒片机。
如果8、4、2、1数据线上拉,则A端采用低扫描;如果8、4、2、1数据线下拉,则A端采用高扫描。
这里的低扫描具有两层含义:
第一,任意时刻扫描线中只有一旦缺条为低电平,其余扫描线为高电平;
第二, 在扫描过程中,扫描线需要周期性地依次变为低电平。高扫描则与低扫描完全相反。
还要注意的就是高扫描时从8、4、2、1引脚上读到的数值即为拨码盘输入对应的BCD码,而低扫描是需要取反才得到正确的BCD码

DialChangeA=1;DialChangeB=0;//扫描个位
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
val=PINC;
val >>= 2;
i = val & 0x0f; //按位与,i得到个位值。

DialChangeA=0;DialChangeB=1;//扫描十位
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
__no_operation();__no_operation();__no_operation();__no_operation();
val=PINC;
val >>= 2;
l = val & 0x0f; //按位与,i得到十位值。

l *= 10; //十位值乘以10
i += l; //然后与个位值相加。
Dalay=1;
return i; //将得到的十进制数返回

回答2:

程序,有很多的错误。