Pic 显示循环在 5 和 0 之间
Pic Display cycle between 5 and 0
这是我们的代码。我们试图让显示周期在 5-0 之间,但它停留在 5。
void main()
{
unsigned char count=0;
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
TRISC=0;
while(1) {
for(count=0;count<6;count++) {
PORTC=table[count];
delay_ms(59);
if(count==5 && count>=0)
{
count -= count;
}
}
}
}
它转到 5,但不会回到 0。
我们的 proteus 设计和其他东西都是真实的。唯一的问题是我们写的代码。
图片16F877A
您的 if 语句将计数从 5 减少到 4,但是 for 循环随后将值增加回 5。一旦 count
达到 5,这将永远重复。您需要重新设计逻辑以获得 up-ramp/down-ramp 行为(在 0 和 5 之间循环)。尝试这样的事情:
void main()
{
unsigned char count=0;
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
TRISC=0;
bool increment = true;
while(1) {
PORTC=table[count];
delay_ms(59);
// Increment or decrement.
count += increment ? 1 : -1;
// Switch from incrementing to decrementing (or vice versa).
if (count >= 5 || count <= 0) {
increment = !increment;
}
}
}
这定义了一个布尔标志 increment
来指定我们是递增还是递减 count
变量。当 count
到达上限或下限时,increment
标志被反转。
这是我们的代码。我们试图让显示周期在 5-0 之间,但它停留在 5。
void main()
{
unsigned char count=0;
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
TRISC=0;
while(1) {
for(count=0;count<6;count++) {
PORTC=table[count];
delay_ms(59);
if(count==5 && count>=0)
{
count -= count;
}
}
}
}
它转到 5,但不会回到 0。
我们的 proteus 设计和其他东西都是真实的。唯一的问题是我们写的代码。
图片16F877A
您的 if 语句将计数从 5 减少到 4,但是 for 循环随后将值增加回 5。一旦 count
达到 5,这将永远重复。您需要重新设计逻辑以获得 up-ramp/down-ramp 行为(在 0 和 5 之间循环)。尝试这样的事情:
void main()
{
unsigned char count=0;
unsigned char table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
TRISC=0;
bool increment = true;
while(1) {
PORTC=table[count];
delay_ms(59);
// Increment or decrement.
count += increment ? 1 : -1;
// Switch from incrementing to decrementing (or vice versa).
if (count >= 5 || count <= 0) {
increment = !increment;
}
}
}
这定义了一个布尔标志 increment
来指定我们是递增还是递减 count
变量。当 count
到达上限或下限时,increment
标志被反转。