|
學習、模仿、試驗、改進!
使用開發板的程序,做了一個調光燈,用一塊3.7V1500mAH的鋰電池做電源,用了幾次還行!
實測整機靜態電流20mA左右,不開燈放幾天就沒電了,就增加了開關機程序和電路,現在放一個月都沒問題!
現在還發現當電池電壓下降到2.7V以下時,燈會不受控的閃爍!我想可能是電池保護板的問題?以后再弄...
單片機源程序如下:
/********************************************************************************
* 標題: 開關機 以手提燈104為原型修改,實現待機電流為0,修改已通過! *
* 按鍵控制 由 低光--中光--強光--中光--關閉 循環,亮度由PMW控制。 *
* 長按3秒進入1.5HZ閃光,按鍵退出, *
*使用STC15F104 設置晶振頻率24M,(工作電壓2.8--5.5伏)(工作電流20mA) *
*關閉后,待機電流為0毫安!! *
*1腳 p3.4 開關機輸出; 2腳 +5V 輸入; 3腳 p3.5 空; 4腳 GND; *
*5腳 p3.0 RXD; 6腳 p3.1 TXD; 7腳 p3.2 輸出 ; 8腳 p3.3 調光按鍵 *
*實際使用STC15W204S 設置晶振頻率24M,(工作電壓2.8--5.5伏)(工作電流20mA) *
*關閉后,待機電流為0毫安!! *
*1腳 p5.4 開關機輸出; 2腳 +5V 輸入; 3腳 p5.5 空; 4腳 GND; *
*5腳 p3.0 RXD; 6腳 p3.1 TXD; 7腳 p3.2 輸出 ; 8腳 p3.3 調光按鍵 *
*使用P5先設置寄存器 sfr P5=0xC8;就可以使用,否則報錯 * **********************************************************************************/
#include <reg52.h>
#define uint unsigned int
sfr P5=0xC8;
uint a,b,c,d,e,f,L4,t,t1,t2,t3,t4,t5,t6;
sbit shuchu=P5^5; // 開關機輸出 控制 P2^2;
sbit PWM=P5^4; // 輸出P2^6;
sbit key= P3^3; // 調光按鍵
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=2480;y>0;y--); //10ms
}
void main()
{
/*-------------------定時器初始化-----------------------------*/
TMOD |= 0x01; //使用模式1,16位定時器,使用"|"符號可以在使用多個定時器時不受影響
TH0=(65536-100)/256; //給定初值 100us
TL0=(65536-100)%256;
// TH0=0xff;//70us以下輸出的方波不穩定
// TL0=0x9c;
EA=1; //總中斷打開
ET0=1; //定時器中斷打開
TR0=1; //定時器開關打開
a=b=c=d=e=t3=0;
L4=1;
shuchu=1;
while(1)
{
if(key==1)
{t5=0;t6=0;e=0;}
if((key==0)&(e==0))
{t5++;
if(t5>=5000)
{t6++;t5=0;
if(t6>=50){t6=0;L4=~L4;e++;}} //閃爍頻率
}
if(L4>=10){a=0;c=0;if(t2>=40000){t2=0;}
if(t2<20000)
{if(t>=20) {t=0;} //由10個t組成一個波,由N個(10個t)連續組成一串波,
if(t<1) {PWM=0;} // 由10個t組成的一個波中,t3個t使PWM=0;另外9-t3個t使PWM=1;
else {PWM=1;}
}else {PWM=1;}
}
/**********************************/
if(L4==1) // PMW控制
{if(key==1){t4=0;t1=0;b=0;} //4, K1彈起或未按下時,延時10ms,t2停止計時,計數器b為零,等待K1按下!
if((key==0)&(b==0)) //大燈按鍵按下,
{if(t1==2000) //t2開始計時,防抖延時100MS
{ a++;b++;} //a++去控制占空比,
}
if(a==0){t3=2;} //
if(a==1){t3=4;}
if(a==2){t3=9;}
if(a==3){t3=6;}
if(a>3){shuchu=0;} //關機 delay(500)延時5秒 t3=0; delay(500);shuchu=1;a=0;
if(t>=20) {t=0;}
if(t<t3) {PWM=0;}
else {PWM=1;}
}
}
}
/*------------------------------------------------
定時器中斷子程序
------------------------------------------------*/
void Timer0_isr(void) interrupt 1
{
TH0=(65536-100)/256;//重新賦值 100us
TL0=(65536-100)%256;
// TH0=0xff;//70us以下輸出的方波不穩定
// TL0=0x9c; //9c,100us;
t++;
t1++;
t2++;
t4++;
t5++;
}
|
-
-
燈控制電路圖.doc
2024-3-11 21:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
100.5 KB, 下載次數: 10, 下載積分: 黑幣 -5
評分
-
查看全部評分
|