ckvlhf 发表于 2010-4-21 22:10:07

白沙怀表程序小改

不知道大家有没有发现白沙怀表在进位的时候和我们平常的有点不一样,就是秒和分在“显示”上是逢一进一而不是逢六十进一?把秒和分的显示函数改成如下就是:
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强得多。估计是怀表反接过电源的原因。
发现的问题暂时这么多,我买的是古铜色的,又在淘宝配了个银色外壳,明天到,届时开始总装。

zzzzxxxx 发表于 2010-4-23 11:21:14

************又在淘宝配了个银色外壳*******************

有地址没啊

warbird 发表于 2010-4-26 12:10:42

用楼主的 display_off()后,怀表功耗降低了,最低只有6uA。
刷程序之前测得:V=3.06,I=7.7~8.3mA(开显示);I=76~160uA(关显示),大部分时间在84uA,(有时瞬间超量程200uA)。
刷后测得:      V=3.06,I=7.2~7.8mA(开显示);I=5.8~6.4uA(关显示),哈哈,很好!

abuzhu 发表于 2010-4-26 14:11:01

很好,很学习啊

ckvlhf 发表于 2010-5-5 17:34:28

回复【1楼】zzzzxxxx
************又在淘宝配了个银色外壳*******************
有地址没啊
-----------------------------------------------------------------------

这个有很多啊,随便找下,话说我买的不咋样,小杯具~~

wenjin0386 发表于 2011-5-23 09:57:31

mark

kaimoliang 发表于 2014-1-23 20:04:07

现在才看到,做了一个。

xiaoxiao88 发表于 2014-4-29 09:28:21

{:smile:}{:smile:}
页: [1]
查看完整版本: 白沙怀表程序小改