【发布时间】:2019-04-07 06:42:45
【问题描述】:
我正在为微控制器设计点击计数器,并使用 C 语言开发代码。
这里发生的情况是,当我单击第一个按钮时,它会计算按钮按下的次数。然后我必须按下第二个按钮以显示点亮 LED 的二进制计数。例如,如果我按第一个按钮 10 次,它将点亮第二个 LED 和第四个 LED。
由于有 8 个 LED,我使用了 2 个不同的端口。(来自 PORTB 的 6 位和来自 PORTD 的 2 位)。 为此,我使用 if/else 开发了一个代码。但我想在没有多个 if/else 操作的情况下实现此操作,因为这种方法似乎效率不高。
while(PIND & 0b00100000){ //while PD5 switch is not pressed
if(clickCount>=128){ //if click count>=128
PORTB = PORTB | 0b00100000; //set PB5 HIGH
clickCount-=128; //deduct 128 from clickCount
}else if(clickCount>=64){
PORTB = PORTB | 0b00010000;
clickCount-=64;
}else if(clickCount>=32){
PORTB = PORTB | 0b00001000;
clickCount-=32;
}else if(clickCount>=16){
PORTB = PORTB | 0b00000100;
clickCount-=16;
}else if(clickCount>=8){
PORTB = PORTB | 0b00000010;
clickCount-=8;
}else if(clickCount>=4){
PORTB = PORTB | 0b00000001;
clickCount-=4;
}else if(clickCount>=2){
PORTD = PORTD | 0b10000000;
clickCount-=2;
}else if(clickCount==1){
PORTD = PORTD | 0b01000000;
clickCount = 0;
}
}
而且我想用更少的字节数制作这段代码。那么有没有什么办法可以用for循环或者其他方法开发这段代码呢?
【问题讨论】:
-
您应该更新您的问题,指出您实际上使用了 2 个端口 - 最后 2 位来自 portD。
-
已经更新了。
标签: c arduino atmelstudio