我的计划有8位的寄存器即PC0,PC1,PC2,PC3,PC4,PC5,PC6,PC7.
ç位运算根据真值表
我不关心PC0,PC1,PC2,PC3.
我想根据真值表设置位提到:
PC4 PC5 PC6 (Ports)
Row1 : 0 0 0
Row2 : 0 0 1
Row3 : 0 1 0
Row4 : 0 1 1
Row5 : 1 0 0
Row6 : 1 0 1
设置钻头时不应更改PC7状态,应该不变。我可以单独设置位,但需要立即设置它们。 这里是我做了什么:
void Set(unsigned char Row)
{
if(Row == 1)
{
PC_ODR &= ~(0x40) //To Set 0 to PC6
PC_ODR &= ~(0x20) //To Set 0 to PC5
PC_ODR &= ~(0x10) //To Set 0 to PC4
}
if(Row == 2)
{
PC_ODR |= 0x40 //To Set 1 the PC6
PC_ODR &= ~(0x20) //To Set 0 to PC5
PC_ODR &= ~(0x10) //To Set 0 to PC4
}
// ......So on for Row 3, 4,5,6
}
对于所有的6行,代码会变得冗长,有没有什么办法,我可以使用移位运算符和AND/OR运算得到的东西在短期完成。
要设置:'a | =(1 << bitpos)',以取消设置:'a&=〜(1 << bitpos)' – iBug
我已经完成了。 –
使用按行索引的查找表。 –