導航:首頁 > 編程語言 > 呼吸燈單片機程序

呼吸燈單片機程序

發布時間:2023-07-22 20:33:19

⑴ 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--);
}

⑶ 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

⑷ 求一個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<reg51.h>
/*-----------定義單片機引腳-----*/
sbit LED0=P1^0;
sbit LED1=P1^1;
sbit LED2=P1^2;

void Delay(unsigned int t); //函數聲明
unsigned int z,y;
void main (void)//主函數
{
unsigned int CYCLE=500,PWM_LOW=0;//定義周期並賦值
while (1) //主循環
{

/*--------第一顏色LED燈呼吸---------*/
LED0=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED0=0;
Delay(PWM_LOW);
LED0=1;
Delay(CYCLE-PWM_LOW);
}
LED0=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED0=0;
Delay(PWM_LOW);
LED0=1;
Delay(CYCLE-PWM_LOW);
}

/*--------第二顏色LED燈呼吸----------*/
LED1=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED1=0;
Delay(PWM_LOW);
LED1=1;
Delay(CYCLE-PWM_LOW);
}
LED1=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED1=0;
Delay(PWM_LOW);
LED1=1;
Delay(CYCLE-PWM_LOW);
}

/*--------第三顏色LED燈呼吸----------*/
LED2=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED2=0;
Delay(PWM_LOW);
LED2=1;
Delay(CYCLE-PWM_LOW);
}
LED2=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED2=0;
Delay(PWM_LOW);
LED2=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第四顏色LED燈呼吸----------*/
LED0=1;
LED1=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED0=0;
LED1=0;
Delay(PWM_LOW);
LED0=1;
LED1=1;
Delay(CYCLE-PWM_LOW);
}
LED0=0;
LED1=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED0=0;
LED1=0;
Delay(PWM_LOW);
LED0=1;
LED1=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第五顏色LED燈呼吸----------*/
LED0=1;
LED2=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED0=0;
LED2=0;
Delay(PWM_LOW);
LED0=1;
LED2=1;
Delay(CYCLE-PWM_LOW);
}
LED0=0;
LED2=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED0=0;
LED2=0;
Delay(PWM_LOW);
LED0=1;
LED2=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第六顏色LED燈呼吸----------*/
LED1=1;
LED2=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED1=0;
LED2=0;
Delay(PWM_LOW);
LED1=1;
LED2=1;
Delay(CYCLE-PWM_LOW);
}
LED1=0;
LED2=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED1=0;
LED2=0;
Delay(PWM_LOW);
LED1=1;
LED2=1;
Delay(CYCLE-PWM_LOW);
}
/*--------第七顏色LED燈呼吸----------*/
LED0=1;
LED1=1;
LED2=1;
Delay(500);
for(PWM_LOW=1;PWM_LOW<CYCLE;PWM_LOW++)
{
LED0=0;
LED1=0;
LED2=0;
Delay(PWM_LOW);
LED0=1;
LED1=1;
LED2=1;
Delay(CYCLE-PWM_LOW);
}
LED0=0;
LED1=0;
LED2=0;
for(PWM_LOW=CYCLE-1;PWM_LOW>0;PWM_LOW--)
{
LED0=0;
LED1=0;
LED2=0;
Delay(PWM_LOW);
LED0=1;
LED1=1;
LED2=1;
Delay(CYCLE-PWM_LOW);
}
}
}
void Delay(unsigned int t)
{
while(--t);
}
不謝

⑹ STC12C5A60S2製作呼吸燈C語言程序怎麼寫

呼吸燈的程序:
/****************************************************************************
功能:LED燈慢慢變暗,再慢慢變亮。
用定時器模擬的PWM調制。
單片機:AT89S52
******************************************************************************/
#include<reg52.h>
#defineV_TH00XFF//設定定時器0,高8位的初值
#defineV_TL00XF6//設定定時器0,低8位的初值
#defineV_TMOD0X01//設定定時器0的工作方式為:方式1(計數位數是16位//,由TL0作為低8位、TH0作為高8位)
#defineucharunsignedchar
#defineuintunsignedint
voidinit_sys();//系統初始化函數
voiddelay(uint);//延時函數
unsignedcharZKB;//占空比

voidmain(void)
{
init_sys();//初始化
while(1)
{
for(ZKB=5;ZKB<40;ZKB=ZKB+2)//每調節一次占空比,就延時大概8ms左右,這使得LED現象更明顯
{
delay(8);
}
for(ZKB=40;ZKB>5;ZKB=ZKB-2)
{
delay(8);
}

}
}
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=100;y>0;y--);
}
voidinit_sys()/*系統初始化函數*/
{
/*定時器初始化*/
TMOD=V_TMOD;
TH0=V_TH0;
TL0=V_TL0;
TR0=1;
ET0=1;
EA=1;
}

voidtimer0(void)interrupt1using2
{
staticucharclick=0;//中斷次數計數器變數
TH0=V_TH0;//重新恢復定時器初始值
TL0=V_TL0;
++click;//每計數10次,產生一個中斷,並且click增加一個

if(click>=100)
click=0;//計滿一百次,這重新計數。
/*因為計一次數的時間是1us,10次產生一個中斷,也就是一個中斷10us。100個中斷為1ms。
則,可以在這100個數中隨便取值,用於表示占空比的多少,占空比的范圍為(1~100)*/

if(click<=ZKB)//當小於占空比值時輸出低電平,高於時是高電平,從而實現占空比的調整
P1=0x00;//P1口接的是LED燈
else
P1=0xff;
}

此程序的總中斷時間為100ms,即頻率為:100KHZ,占空比從5變為40(即5%~25%)。

閱讀全文

與呼吸燈單片機程序相關的資料

熱點內容
java穩定排序 瀏覽:53
oppo文件管理的圖片 瀏覽:335
plc編程步數怎麼計算 瀏覽:142
ipad看電腦文件 瀏覽:935
成都製作pdf文件 瀏覽:735
怎麼樣點開電腦裡面的網路連接 瀏覽:755
微信怎麼退出賬號 瀏覽:32
w微信開發者工具 瀏覽:325
資料庫還原附加 瀏覽:713
打包成exe執行文件 瀏覽:652
信豐營銷app有哪些 瀏覽:463
蘋果文件下載項如何下載 瀏覽:179
ps摳婚紗教程 瀏覽:203
如何在移動硬碟上隱藏文件夾 瀏覽:451
瑞虎8老車機怎麼刷app 瀏覽:992
學ui設計要學java嗎 瀏覽:275
淘寶票房數據源怎麼調整 瀏覽:470
iphone5s升級ios卡黑屏 瀏覽:622
u盤沒用的文件刪不了怎麼辦 瀏覽:561
文件夾解鎖工具 瀏覽:528

友情鏈接