標(biāo)題:
stc15f104w七彩呼吸燈程序
[打印本頁]
作者:
mckk52088
時間:
2018-1-27 21:35
標(biāo)題:
stc15f104w七彩呼吸燈程序
#include<reg52.h>
#define N 20 //亮暗的速率
#define T 3000 //PWM的周期
#define uchar
sbit led1=P3^0; // 輪流七彩變色 3.0 紅色
sbit led2=P3^1;// 3.1 綠色
sbit led3=P3^2; // 3.2 藍(lán)色
bit vvv=1; //檢測是否完成了一次呼吸。
bit aaa=0; //這3路當(dāng)作BCD開關(guān)來使用
bit bbb=0;
bit ccc=0;
uchar Time_50ms;//
uchar Time_3ms; //
void Init (void) //中斷初始化
{
TMOD = 0x01; //12M 50000
TH0 = 0x4C;
TL0 = 0x00;
EA=1;
ET0=1;
TR0=1;
}
void timer0(void) interrupt 1 using 1 //***********定時器t0中斷子函數(shù)**************
{
TH0 = 0x0DC;
TL0 = 0x00;
Time_50ms++; // 加1
if(vvv==0) //每呼吸完一次,計時器就工作一下。等待呼吸完后再計時。
if(Time_50ms>=100)
{
Time_50ms=0; //清零復(fù)位
Time_3ms++;//計時器每工作一次Time_3ms就加一。
}
if(Time_3ms>=7) //七種顏色輪流呼吸
{
Time_3ms=0;
}
if(Time_3ms==0) // AAA BBB CCC 用來切換亮什么顏色 這里的==0 ==1 ==2,,,, 3 4 5 6 可以理解為7個開關(guān)
{
aaa=1;
bbb=1;
ccc=1;
}
else if(Time_3ms==1)
{
aaa=0;
bbb=1;
ccc=1;
}
else if(Time_3ms==2)
{
aaa=1;
bbb=0;
ccc=1;
}
else if(Time_3ms==3)
{
aaa=1;
bbb=1;
ccc=0;
}
else if(Time_3ms==4)
{
aaa=0;
bbb=0;
ccc=1;
}
else if(Time_3ms==5)
{
aaa=1;
bbb=0;
ccc=0;
}
else if(Time_3ms==6)
{
aaa=0;
bbb=1;
ccc=0;
}
}
//●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●//
void pwm(int x)
{
while(x--)
{
;
}
}
void main()
{
int t=0;
char f=0;//亮暗標(biāo)志,0為亮
Init();
while(1) //主循環(huán)。
{
//111111111111111111111111 當(dāng)abc開關(guān)為1時。紅色LED呼吸一下。其他顏色不亮。
if((aaa==1)&&(bbb==1)&&(ccc==1))
{
led1=0;
pwm(t);
led1=1;
}
//2222222222222222222222 否則 當(dāng)abc開關(guān)為2時。黃色LED呼吸一下。其他顏色不亮。
// else
else
if((aaa==0)&&(bbb==1)&&(ccc==1))
{
led1=0;
led3=0;
pwm(t);
led1=1;
led3=1;
}
//3333333333333333333333 否則 當(dāng)abc開關(guān)為3時。綠色LED呼吸一下。其他顏色不亮。
else if((aaa==1)&&(bbb==0)&&(ccc==1))
{
led3=0;
pwm(t);
led3=1;
}
//44444444444444444444444
else if((aaa==1)&&(bbb==1)&&(ccc==0))
{ led1=0;
led2=0;
pwm(t);
led1=1;
led2=1;
}
//5555555555555555555555
else if((aaa==0)&&(bbb==0)&&(ccc==1))
{
led2=0;
pwm(t);
led2=1;
}
//6666666666666666666666
else if((aaa==1)&&(bbb==0)&&(ccc==0))
{ led3=0;
led2=0;
pwm(t);
led3=1;
led2=1;
}
//77777777777777777777 else
else if((aaa==0)&&(bbb==1)&&(ccc==0))
{
led1=0;
led2=0;
led3=0;
pwm(t);
led1=1;
led2=1;
led3=1;
}
//=========== //因為使用了 else 語句 所以1 2 3 4 5 6 7 只有其中一組顏色會被點亮。
//.....................
pwm(T-t);
if(!f)
{
t+=N;
}
else
{
t-=N; //暗速率較慢
}
if(t>T)
{
f=1;
t=T;
vvv=1; // 呼吸開始,關(guān)閉計時器,以免中途又切換其他顏色。
}//超過最大值時,返回最大值,標(biāo)志為暗
if(t<0)
{
f=0;
t=0;
vvv=0; // 呼吸完一次,打開計時器 切換顏色。
}//超過最小值時,返回最小值,標(biāo)志為亮
}
}
作者:
bosschen
時間:
2018-5-28 15:24
請問樓主,如果我?guī)У氖菬魲l,功率大,它的外圍控制電路是什么,謝謝了,最好有電路圖! 小白在這里謝謝樓主啦!
作者:
1246
時間:
2018-6-25 16:59
開發(fā)板呢?
作者:
zqy181818
時間:
2019-5-9 15:05
我想知道為什么頭文件不是stc15f104w.h
作者:
zctwss321
時間:
2019-5-10 19:16
你的實際硬件圖呢?和原理圖呢?
631494205@qq.com
,謝謝哥
作者:
zctwss321
時間:
2019-5-10 21:54
zqy181818 發(fā)表于 2019-5-9 15:05
我想知道為什么頭文件不是stc15f104w.h
也許考慮到了兼容性的問題
作者:
fwt8888
時間:
2020-5-3 12:44
好資料 謝謝分享
作者:
6313
時間:
2020-11-26 19:50
按照這程序做了一個,挺好的
作者:
阿飛7812
時間:
2022-1-8 09:36
樓主有這部份看不懂 請指點 T=3000 t=0 f=0,是怎么使燈變暗 程序是怎么運進(jìn)的
pwm(T-t);
if(!f)
{
t+=N;
}
else
{
t-=N; //暗速率較慢
}
if(t>T)
{
f=1;
t=T;
vvv=1; // 呼吸開始,關(guān)閉計時器,以免中途又切換其他顏色。
}//超過最大值時,返回最大值,標(biāo)志為暗
if(t<0)
{
f=0;
t=0;
vvv=0; // 呼吸完一次,打開計時器 切換顏色。
}//超過最小值時,返回最小值,標(biāo)志為亮
}
}
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1