2026.04.24
代码实现的功能:按下P33,P2口指示灯向一个方向顺序亮灭循环,按下P35,P2口指示灯向反方向亮灭循环。
遇到的问题:下边代码++计算的时候没有问题,可以正常循环亮灭。但是- -的时候出现了减到0溢出的问题。导致显示不正常。
- void cc(void)
- {
- if(zx==1)
- {
- P2 = ~ledNum[ledIndex]; //输出低驱动
- ledIndex++;
- if(ledIndex > 7)
- {
- ledIndex = 0;
- }
- delay_ms(50);
- delay_ms(50);
- }
- }
复制代码
- void ccw(void)
- {
- if(fx==1)
- {
- P2 = ~ledNum[ledIndex]; //输出低驱动
- ledIndex--;
- if(ledIndex < 0)
- {
- ledIndex = 7;
- }
- delay_ms(50);
- delay_ms(50);
- }
- }
复制代码
改后的- -代码
- void ccw(void)
- {
- if(fx==1)
- {
- P2 = ~ledNum[ledIndex2]; //输出低驱动
- ledIndex2--;
- if(ledIndex2 == 0xFF)
- {
- ledIndex2 = 7;
- }
-
- delay_ms(50);
- delay_ms(50);
- }
- }
复制代码 当减到0继续减的时候变为了0xff,就出现了溢出的情况,所以在出现0xff时强制把它赋值为7,重新开始。
完整代码:
复制代码
后来又想了一种办法,就是在数组中增加一项,
- u8 code ledNum[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
复制代码
改为
- u8 code ledNum[]={0xff,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
复制代码
然后加从1-8,减从8-1,当其为0时实际是0xff,灯灭状态。 |