㈠ 單片機式的呼吸燈控制方法
我們通常會在各類器件上看到形形色色的指示燈,它們都分別代表著不盡相同各項功能的運行情況。而由燈發出的指示光要比其他方法傳遞信息更直接更明顯,也更加的經濟。而現在呼吸燈這項技術已經應用於各個方面,甚至包括智能機的應用,而其比較多樣的呼吸方法在傳遞相關信息上也是方便至極,那麼今天我們就來看看呼吸燈的控制問題。
燈光在微電腦的控制之下完成由亮到暗的逐漸變化,感覺好像是人在呼吸。
應用
廣泛應用於手機之上,並成為各大品牌新款手機的賣點之一。如果你的手機裡面有未處理的通知,比如說未接來電,未查收的簡訊等等,呼吸燈就會由暗到亮的變化,像呼吸一樣那麼有節奏,起到一個通知提醒的作用。
電子愛好者可通過簡單的電路來實現呼吸燈的效果。
為何很多手機都取消了呼吸燈
回答之前,小編想先糾正一個問題,並不是智能機都取消了呼吸燈,很多設備還是具備這一功能的,只不過能夠將這一功能發揮到極致的手機,確實是少之又少。安卓設備其實多數都是有LED燈的,不過原生安卓系統本身沒有提供一個可以統一控制的通知中心,而是要每個應用自己決定顯示通知的方式,這方式包括聲音、震動、LED燈及其顏色,再加上不同手機的燈或多或少都有些不同,這樣就造成了有的應用不支持LED燈有的應用卻錯誤地觸發了LED燈。
久而久之,在我的日常使用中,LED燈通常會給人一種十分不可靠的感覺,實際表現在我們該點亮屏幕的時候還是會點亮屏幕,不該點亮屏幕的時候,看到LED燈錯誤的亮起,也要去點亮屏幕去處理,就這樣,一個聽起來很好的功能反倒變得有些雞肋甚至是惹人討厭。到了安卓4.4以後,感覺系統在LED燈控制方面更為混亂,一些常駐通知欄的圖標甚至也會觸發LED燈,導致用戶體驗極差。
而有些如CM一類的第三方ROM會提供系統級的分應用LED燈設置,不過在實際使用中的表現也不夠完美。所以雖然LED呼吸燈本來是一個很好的設計,但是安卓系統卻沒有做好,於是有些廠商索性就取消了LED燈,或者取消了LED燈的呼吸功能。
另外,可能有些人會問,為何蘋果手機也沒有呼吸燈,這又是個老生常談的問題了,蘋果不具備的東西很多,很多時候我們都不知道為什麼,不採用呼吸燈,可能是因為技術,也可能是因為專利,蘋果同安卓不同,其並非開源系統,很多時候,蘋果都會來規范用戶的使用習慣,不設置呼吸燈,或許只是因為蘋果覺得用戶不需要它吧。至於這位網友在問題中提到的觸控反饋,這個其實不需要小編多說了,貌似目前大部分手機都有觸控反饋吧,只需要在設置中調出來就好。
呼吸燈的作用
呼吸燈是一個提氣的設計,它讓手機不再是一塊只會亮屏的板磚。因為不是所有的消息通知都需要處理,也不是所有的消息通知都會馬上處理。對於手機來講,亮屏鈴聲震動屬於強通知,這包括一些軟體提供的來電閃光功能,呼吸燈則屬於弱通知,不是所有人都會定期去查看手機的,多數情況下在辦公室我們都只是把手機放在桌上,偶爾去下洗手間也不會帶著,這中間如果有消息,我們回來瞟一眼就知道了,呼吸燈作為弱通知的作用,提醒的意義大於通知。
先說呼吸燈,這個本質上是LED的亮度控制。
一般是用PWM方式控制LED亮度,PWM的輸出按照一定的規律變化,就可以做出呼吸燈的效果。
再說30個LED的控制,如果要簡單點做,30個LED可以串起來串一個電阻,接高點的電源電壓,30個LED用同一個信號控制,當然,亮度也是同步變化的。如果要復雜,那就出30個信號分別控制30個LED串30個電阻,具體看你的追求的效果吧。
呼吸燈的程序,如果有硬體的PWM模塊,是很簡單的,按一定的規律讓PWM的輸出變化就可以。
像這樣輸出10%亮度,持續200ms,輸出20%亮度,持續200ms,輸出30%亮度,持續200ms。
如果沒有硬體PWM模塊,可以用軟體來模擬,比如,輸出10%亮度,持續200ms這兩件事合在一起作,變成輸出高電平10us,輸出低電平90us,循環2000次。
兩種方法:
方法1:1000個左右的燈,需要10根地址線選通,51的IO管腳應該是沒有問題。剩下的就是要用大量的解碼器,把二進制信息轉換為管腳信息。
估計你僅僅是控制亮和滅,如果是這樣選通也就可以進行明暗的控制,否則輸出的信息也要加進去,就是說需要加驅動電路。
方法2:用移位電路,比如HC595,在51中地址做為串列信號發出,轉換為對應的地址線,然後在連接解碼器,這樣,51的管腳比較節省,但,編程的難度稍大。
那麼上述就是呼吸燈相關控制的方法和技巧,我們講,呼吸燈控制在硬體圈是一個很普通的項目,而所採用的單片機控制也是硬體里最基礎的,相信很多人在研習過後都能夠掌握,而即便不必要掌握這個情況,熟悉相關的原理情況也可以讓其在遇見故障的時候能夠迅速找到方法來排除,那麼今天呼吸燈控制的問題就給大家介紹到這里。
㈡ 51單片機用匯編語言如何設計8個輪流呼吸的呼吸燈
因為我不知道你這個板子的硬體,我就假設一下吧,你自己對照著看看,關鍵是流程
假設如下這八個燈依次接在P0口的八個口上,高電平為燈亮,低電平為燈滅,程序如下
ORG 0000H
AJMP START
START:MOV P0,#01H;()只有第一個燈亮
ACALL DELAY;延遲,不加延遲的話 你根本看不起清到底那個燈亮的
MOV P0,#02H;()只有第二個燈亮
ACALL DELAY
MOV P0,#04H;()只有第三個燈亮
ACALL DELAY
MOV P0,#08H;()只有第四個燈亮
ACALL DELAY
MOV P0,#10H;()只有第五個燈亮
ACALL DELAY
MOV P0,#20H;()只有第六個燈亮
ACALL DELAY
MOV P0,#40H;()只有第七個燈亮
ACALL DELAY
MOV P0,#80H;()只有第八個燈亮
ACALL DELAY
AJMP START;周而復始
DELAY: MOV R6,#40;延遲程序,晶振為3.57MHZ時大概是0.1S
0.1SL1: MOV R5,#246
0.1SL2: NOP
DJNZ R5,0.1SL2
DJNZ R6,0.1SL1
RET
END
㈢ 51單片機設計呼吸燈
原發布者:呦_
小屁孩
基於單片機與PWM的
呼吸燈
設計實訓指導教師:班級:設計人姓名:設計日期:設計地點:完成時間:摘要本設計是基於單片機的原理與介面設計,採用單片機I/O口,加以
C語言編程
實現LED漸亮再漸暗類似人的呼吸一樣的效果。關鍵詞
AT89C51
,PWM(
脈寬調制
)一、設計要求:呼吸燈就是讓
LED燈
的閃爍像呼吸一樣,時呼時吸,時亮時暗,利用LED的余輝和人眼的暫留效應,看上去和人的呼吸一樣。二、
設計原理
:用C語言編程實現PWM(脈寬調制)輸出驅動LED,逐漸增加PWM的
占空比
從而實現LED模擬
呼吸的過程
,即漸亮再漸暗再漸亮再漸暗……如此往復,再利用LED的余輝和人眼的暫留效應,看上去就和人的呼吸一樣。三、整體方案設計8個LED按照順序逐個實現呼吸效果。加以其他閃爍花樣增加更炫彩的效果。四、實驗元件及器材(1)元件:LED(
發光二極體
)8個1KΩ電阻8個
1nf
電容2個
晶振
1個
AT89C51晶元
1個(2)器件:
Atmega128
開發板
1塊計算機1台5、硬體原理(1)
主電路
:8個LED分別連接AT89C51的P1口,使用共陽方式,並加以1kΩ的電阻接入電源。
㈣ 單片機製作呼吸燈的C語言程序怎樣編寫
#include<reg51.h>
sbit LED0=P0^0;
sbit wei=P1^1;
sbit an=P1^0;
sbit lcden=P1^7;
sbit dianzhen=P1^3;
sbit leden=P1^2;
void Delay(unsigned int t);
void main (void)
{
unsigned int CYCLE=600,PWM_LOW=0;//定義周期並賦值
lcden=0;
P0=0x00;
dianzhen=0;
P0=0xff;
wei=0;
an=0;
while (1) //主循環
{
LED0=1;
Delay(150000); //特意加延時,可以看到熄滅的過程
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED0=0;
Delay(PWM_LOW);
LED0=1;
Delay(CYCLE-PWM_LOW);
}
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED0=0;
Delay(PWM_LOW);
LED0=1;
Delay(CYCLE-PWM_LOW);
}
}
}
void Delay(unsigned int t)
{
while(t--);
}
㈤ 求一個stc15w202s單片機的呼吸燈程序 要邊呼吸邊移動(波浪狀), 就是相當於呼吸燈流水燈結合。
你可以了解一下ws2812,這個會好很多。
想過這種程序,但因為沒什麼卵用就給我忘了。
pwm要挺高頻率才行,不然會閃,試過3燈的rgb,原理上差不多,但是直接程序死循環都難受,不是很流暢,你也可以參考一下。。。
#include "reg52.h"
#include "intrins.h"
sbit r=P1^0;
sbit g=P1^1;
sbit b=P1^2;
void Delay200ms();
void play(char rz1,char gz1,char bz1,int t);
void Delay10us();
//占空比從0到100變化
void main(void)
{
while(1)
{char rz=0,gz=0,bz=0;
char x=0,y=0,z=0;
r=1;
g=1;
b=1;
Delay200ms(); //接線驗證,rgb依次亮起
r=0;
Delay200ms();
r=1;
g=0;
Delay200ms();
g=1;
b=0;
Delay200ms();
b=1;
Delay200ms();
for(x=5;x>=0;x--) //彩色連續變化
{rz=100;gz=0;bz=0;
play(rz,gz,bz,1);
for(gz=0;gz<=100;gz++)
play(rz,gz,bz,1);
for(rz=100;rz>=0;rz--)
play(rz,gz,bz,1);
for(bz=0;bz<=100;bz++)
play(rz,gz,bz,1);
for(gz=100;gz>=0;gz--)
play(rz,gz,bz,1);
for(rz=0;rz<=100;rz++)
play(rz,gz,bz,1);
for(bz=100;bz>=0;bz--)
play(rz,gz,bz,1);
}
}
}
//顯示色彩程序,pwm,顯示某占空比顏色時間t
void play(char rz1,char gz1,char bz1,int t)
{
char i=rz1,j=gz1,k=bz1,yt;
for(t=t*4;t>=0;--t)
{
i=rz1;j=gz1;k=bz1;
for(yt=100;yt>=0;yt--)
{
if(i>0)
r=0;
else
r=1;
if(j>0)
g=0;
else
g=1;
if(k>0)
b=0;
else
b=1;
--i;
--j;
--k;
Delay10us();
}
}
r=1;g=1;b=1;
}
//延時程序組
void Delay200ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 10;
j = 31;
k = 147;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay10us() //@12.000MHz
{
unsigned char i;
_nop_();
_nop_();
i = 27;
while (--i);
}
㈥ 求助,51單片機用PWM的RGB呼吸燈程序怎麼寫
#include<reg52.h>
sbitLED0=P2^0;//解碼器控制端,低有效
voidDelay(unsignedintt);//函數聲明
voidmain(void)
{
unsignedintset=400,pwm=0;//定義周期並賦值
while(1)//主循環
{
LED0=0;
Delay(60000);//延時,可以看到熄滅的過程
for(pwm=1;pwm<set;pwm++){
LED0=1;//熄滅LED
Delay(pwm);//延時長度,600次循環中從1加至599
LED0=1;//點亮LED
Delay(set-pwm);//延時長度,600次循環中從599減至1
}
LED0=1;
for(pwm=set-1;pwm>0;pwm--){//與逐漸變亮相反的過程
LED0=1;
Delay(pwm);
LED0=0;
Delay(set-pwm);
}
//主循環中添加其他需要一直工作的程序
}
}
voidDelay(unsignedintt)
{
while(--t);
}