|
不知道大家有没有发现白沙怀表在进位的时候和我们平常的有点不一样,就是秒和分在“显示”上是逢一进一而不是逢六十进一?把秒和分的显示函数改成如下就是:
void show_minute(unsigned char minute)
{
unsigned int temp_h,temp_b;
clr_display();
temp_h = minute / 5;
temp_b = minute % 5;
if(temp_b==0)
{
temp_b=4;
if(temp_h==0) temp_h=11;
else temp_h--;
}
else temp_b--;
switch_hm(temp_h); //
P4OUT &=~(1 << temp_b); // 此三行酌情修改,因我的是按照原理图焊接不是按照白沙的装配图
P4DIR |= (1 << temp_b); //
}
分钟的改动同样如此。
还有一个很严重的问题,就是功耗,也许是我的表反接过电源的原因,进入待机模式后耗电仍有惊人的200-300uA,我差点石化!最后发现是LED感光所致,增加以下函数解决,其实也就是把原来的清屏函数中端口的方向设置成输出“1”。
void display_off(void)
{
P1DIR = 1;
P1OUT = 1;
P2SEL = 0;
P2DIR = 0x60;
P2OUT = 0;
P3DIR = 1;
P3OUT = 1;
P4DIR = 1;
P4OUT = 1;
P5DIR = 1;
P5OUT = 1;
P6DIR = 1;
P6OUT = 1;
P7DIR = 1;
P7OUT = 1;
}
然后在主程序中判断怀表状态的函数里替换以下:
if(work_state == OFF)
{
// clr_display();
display_off();
twi_init();
twi_write_word(0x48,0x01,0x61a0);
twi_write(0x4c,6,0);
twi_write(0x4c,7,0);
__bis_SR_register(LPM3_bits + GIE); // Enter LPM4 w/interrupt (这个注释也有误吧,这应该不叫LPM4模式)
}
现在测试待机功耗30uA,虽达不到官方说明的那么低,也满足了,比那动不动300uA强得多。估计是怀表反接过电源的原因。
发现的问题暂时这么多,我买的是古铜色的,又在淘宝配了个银色外壳,明天到,届时开始总装。 |
|