夜里醒了不想动手,想知道几点怎么办?LED钟当然好,但要接220V才行,而且要做个很大的才行。普通的钟表,一节1.5V电池能走一年,省电,也比较准,但晚上看不见,整个LED照着表盘一直亮着同样费电,而且对睡眠不好。
整个呼吸灯一直照着,稍微舒服点,但还是费电。后来想给时针分针各装个led,就行了,发现得无线供电,复杂,成本高,效率低。
后来想给表针刷点荧光粉,发现很贵很麻烦,还得配,最后干脆买夜光表针好了,几毛钱一套三个,要邮费,干脆买了10套。后来发现依旧坑爹,这东东照一天也就亮一分钟,晚上关了灯不是不亮。
查了所有夜光技术,只有氚管技术靠谱,号称亮25年,但太贵了,1.5mmX6mm最少30大洋,时针分针最少60-100mm,买不起。。。
突然想到干脆用紫外线每分钟照几秒荧光表针,让它储存能量,然后发荧光,能亮一分钟就好,这样既省电,还不影响睡眠,还能看清时间。对,就这么干吧。从老爸的验钞小手电筒上拆了个紫外光的LED,接在8脚的STC15单片机的正极和第七脚(P3^2)上,再给单片机正负极接上手机锂电电路就完成了。
程序很简单,设置最大掉电时间,约14.7秒,计数每5次即72秒呼吸灯方式照亮9秒,每天晚上亮8小时,每天23点上电亮到第二天7点,掉电电流约2ua,呼吸灯0-20ma,就算平均10ma,亮9秒,一天亮1745/5*9/3600=0.87小时,一天只用8.7mah,一块普通的手机2000mah锂电池用半年应该不成问题了。
动态效果图:
程序直接贴在下面了,有兴趣的看看。
另外请教大神们,这种用法时钟还用分频么?能更省电么?
//本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//若无特别说明,工作频率一般为11.0592MHz
//紫外led每天晚上照亮8小时钟表夜光指针,每72秒呼吸灯方式照亮9秒。
#include "reg52.h"
#include "intrins.h"
//-----------------------------------------------
sfr WKTCL = 0xaa; //掉电唤醒定时器计时低字节
sfr WKTCH = 0xab; //掉电唤醒定时器计时高字节
sbit RED = P3^2; //接LED,正极接正极,负极接P32
//sfr CLK_DIV = 0x97; //时钟分频寄存器
//-----------------------------------------------
void Delay(unsigned int t)
{
while(--t);
}
//渐亮再渐灭全程9秒
void huxi(void)
{
unsigned int pwm , set = 2000 ;
for(pwm=1;pwm<set;pwm++)
{
RED = 1; //熄灭LED
Delay(set-pwm);//延时长度,500次循环中从599减至1
RED = 0;
Delay(pwm);//延时长度,500次循环中从1加至599
}
for(pwm=set-1;pwm>1;pwm--)
{
RED = 1; //熄灭LED
Delay(set-pwm);//延时长度,500次循环中从599减至1
RED = 0;
Delay(pwm);//延时长度,500次循环中从1加至599
}
}
void main()
{ int i=0;
WKTCL = 255; //设置唤醒周期为
WKTCH = 0xEF; //使能掉电唤醒定时器 大概14.7秒
// CLK_DIV = 0x06; //系统时钟为内部R/C振荡时钟/8
huxi();
RED=1;
while (1)
{
PCON = 0x02; //进入掉电模式
_nop_(); //掉电模式被唤醒后,直接从此语句开始向下执行,不进入中断服务程序
_nop_();
i++;
if ((i%5==0)&&(i<1745)) //14.7秒一次i++ 每5次72.5秒 亮一次 1745是8小时
{
huxi(); //呼吸灯亮一次9秒
RED=1;
}
if (i>=5663)i=0; //24小时清零,后16小时每次14.7秒
}
}
电路图: