导航:首页 > 编程语言 > 呼吸灯单片机程序

呼吸灯单片机程序

发布时间: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%)。

阅读全文

与呼吸灯单片机程序相关的资料

热点内容
文件斜着的一排字用ps怎么删除 浏览:995
港版iphone5ios7有几种系统 浏览:770
qq欢迎使用影音播放 浏览:322
网络打印机怎么查看电脑的密码 浏览:980
淘宝卖二手的app叫什么名字 浏览:217
安卓代码读取界面信息 浏览:714
数控车床车55度螺纹怎么编程 浏览:391
word桌面找不到文件 浏览:585
数控车床编程怎么做到的 浏览:639
哈尔滨市行政区划代码 浏览:716
如何显示文件扩张 浏览:283
ps怎么移植文件 浏览:443
传奇补丁文件说明 浏览:513
奥维地图怎么设置网络叠加 浏览:407
linux加载库文件so失败 浏览:714
大家都想要的app 浏览:58
程序员比特币 浏览:568
mysqlfrm是什么文件 浏览:665
win10点击文件夹声音消失 浏览:963
苹果手机空白文件名 浏览:833

友情链接