if(Start_flag)//如果启动流水灯 { DispFlashLED();//流水灯 } else {

void shan1(){ u8 i;led=0x01;//我默认led输入高电平1是亮,具体按照你实际情况,低电平亮就0xfe;for(i=0;i<7;i++)//已经点亮一个了,所以剩7个。{ led=_crol_(led,1);//左移1位 } led=0x00;} voi

void flicker(uint led)//呼吸灯 flag==1逐渐变亮flag==0逐渐变暗 { uint flag=1;while(1){ P1=led;delay(light);P1=0xFF;delay(t1-light);if(flag==1)light++;else light--;if(light==t1 && flag==1

{ // 模拟PWM的高电平输出 P0 = 1<

求一个89c52单片机的呼吸灯程序 要边呼吸边移动的 就是相当于呼吸灯流水灯结合

delay(500);led=_crol_(led,1);delay(500);} m--;num++;if(num==8)num=0;if(m==0)m=8;} } 不知道你要的是不是这个效果

void shan1(){ u8 i;led=0x01;//我默认led输入高电平1是亮,具体按照你实际情况,低电平亮就0xfe;for(i=0;i<7;i++)//已经点亮一个了,所以剩7个。{ led=_crol_(led,1);//左移1位 } led=0x00;} voi

delay(10); // 这里的延时 根据灯的情况自己调整 } } } // 由亮变暗的子函数 // 参数 ledn 为点第几位的灯 void on_off(unsigned char ledn){ unsigned int i,j;for(i=100;i>1;i--){ for(j

void flicker(uint led)//呼吸灯 flag==1逐渐变亮flag==0逐渐变暗 { uint flag=1;while(1){ P1=led;delay(light);P1=0xFF;delay(t1-light);if(flag==1)light++;else light--;if(light==t1 && flag==1

求一个89c52单片机的光控呼吸灯程序 ,就是边呼吸边移动的,相当于呼吸与流水灯结合,两个按键能加减速度

include defineuint unsigned int void delay(uint time);void flicker(uint led);//呼吸灯 void init();uint t1=80;//闪烁频率 uint light=0;sbit k1=P3^2;sbit k2=P3^3;sbit led1=P1^6;sbit

呼吸灯的程序:/*** 功能:LED灯慢慢变暗,再慢慢变亮。 用定时器模拟的PWM调制。单片机:AT89S52 ***

WS2812是一种自带驱动IC的LED灯珠,可以通过程序控制每个LED的颜色和亮度。以下是一个简单的程序,用于控制144个WS2812 LED灯珠。这个程序是用C语言编写的,用于STC89C52RC单片机。首先,我们需要知道WS2812数据传输协议的一些

include define unchar unsigned char define unint unsigned int define led P1 void delay(unchar l);void main(){ unchar i,j,x,y;i=0;j=255;x=255;y=255;while(1){ while(x>0){x--;le

3.编写程序:使用单片机的编程软件(如Arduino IDE、Keil等),编写控制LED灯的程序。以下是一个简单的示例程序(以Arduino为例):// 定义LED灯连接的引脚 const int ledPin = 13;void setup() { // 将LED引脚设置为

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

include\x0d\x0asbit LED0=P0^0;\x0d\x0asbit wei=P1^1;\x0d\x0asbit duan=P1^0;\x0d\x0asbit lcden=P1^7;\x0d\x0asbit dianzhen=P1^3;\x0d\x0asbit leden=P1^2;\x0d\x0avoid Delay(u

求一个单片机呼吸灯程序

proteus仿真按理来说是不可能达得到效果的,因为这种仿真得有非常快的处理速度。我刚动手试了下和自己的想法相同,LED只会间断的闪烁。我是用AVR单片机,用51也是一样的。我这个程序也在实物试过效果很好。演示定时器1的

include "reg51.h" //包含头文件 define uchar unsigned char define uint unsigned int // //延时函数 // delay(uint time) //int型数据为16位,所以最大值为65535 { uint i,j; //定义变量i,j,用

sbit LED0=P0^0;sbit wei=P1^1;sbit duan=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;//定义周期并赋值

呼吸灯的程序,如果有硬件的PWM模块,是很简单的,按一定的规律让PWM的输出变化就可以。像这样输出10%亮度,持续200ms,输出20%亮度,持续200ms,输出30%亮度,持续200ms。。。如果没有硬件PWM模块,可以用软件来模拟,比如

而有些如CM一类的第三方ROM会提供系统级的分应用LED灯设置,不过在实际使用中的表现也不够完美。所以虽然LED呼吸灯本来是一个很好的设计,但是安卓系统却没有做好,于是有些厂商索性就取消了LED灯,或者取消了LED灯的呼吸功

include#define N 2 //亮暗的速率#define T 700 //PWM的周期sbit led=P1^0;void pwm(int x)void main()//超过最大值时,返回最大值,标志为暗 if(t<0) //超过最小值时,返回最小值,标志为亮

单片机-呼吸灯拜托各位大神

区别之处就是,在用C语言写STC12C5A60S2单片机程序的时候,包含STC12C5A.H头文件,不要包含REG51.H或者REG52.H,当然,你包含REG51.H或者REG52.H也没问题,一样能够编译成功,一样能够运行,但是不够全面,REG51.H

stc12c5a60s2的datasheet有测试程序,从319页开始。主要是这几个寄存器 P1.0作为AD输入 初始值为:P1ASF=0x01;//P1.0作为AD使用 ADC_CONTR=0xe0;//ADC电源打开,每90个时钟转换1次,CHS选择P1.0 //默认为8位模式

还有,串口助手的波特率是否为9600?串口初始化程序要写一行,如下,原写法初始有误。还有,串口接收后,不要返回,删掉SBUF=0X00;这没有什么用,但串口还要发送,又没while语句等待发送结束。

假设低电平点亮LED,C语言程序如下:include sbit led1=P1^0;sbit led2=P1^1;sbit led3=P1^2;sbit led4=P1^3;void delayms(unsigned int i)//晶振12MHZ时延时1ms { unsigned int j,k;for(j=i;j>

\x0d\x0avoid main (void)\x0d\x0a{\x0d\x0aunsigned int CYCLE=600,PWM_LOW=0;//定义周期并赋值\x0d\x0alcden=0;\x0d\x0aP0=0x00;\x0d\x0adianzhen=0;\x0d\x0aP0=0xff;\x0d\x0awei=0

KEY_0 ) { //确认被按下 LED_7=~LED_7 //灯亮或灭}}} 其余一样即可。

STC12C5A60S2制作呼吸灯C语言程序怎么写

演示定时器1的快速PWM输出@利用快速PWM输出控制LED的亮度变化,达到呼吸灯的效果*/ include#include"port_set.h"#include"delay.h"/***@函数功能:定时器1初始化@说明:定时器初始化为快速PWM,TOP为8位(0x00

呼吸灯的程序,如果有硬件的PWM模块,是很简单的,按一定的规律让PWM的输出变化就可以。像这样输出10%亮度,持续200ms,输出20%亮度,持续200ms,输出30%亮度,持续200ms。。。如果没有硬件PWM模块,可以用软件来模拟,比如

AJMP START START:MOV P0,#01H;()只有第一个灯亮 ACALL DELAY;延迟,不加延迟的话 你根本看不起清到底那个灯亮的 MOV P0,#02H;()只有第二个灯亮 ACALL DELAY MOV P0,#04H;()只有第三个灯亮 ACALL DELAY M

include "reg51.h" //包含头文件 define uchar unsigned char define uint unsigned int // //延时函数 // delay(uint time) //int型数据为16位,所以最大值为65535 { uint i,j; //定义变量i,j,用

51单片机设计呼吸灯

大致看了下,定时器中断直接调用zhankong()这个函数,写在外面的话,由於有其它代码,不可能每次都执行
这个需要看你的芯片那也识别需求了哦,毕竟代码不同的呢,那个需要编码处理的哦。 所以解码方法也不同
#include sbit LED0=P0^0; sbit wei=P1^1; sbit duan=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; duan=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--); }
#include“reg52.h”#include“delay.h”// 定义按键 KEY_0~KEY_6 对应P1^0~P1^6sbit KEY_0 = P1^0;sbit KEY_1 = P1^1;sbit KEY_4 = P1^4;sbit KEY_5 = P1^5;sbit KEY_6 = P1^6;// 定义LED _7~LED_3 对应P2^7~P2^3sbit LED_7 = P2^7;sbit LED_ 6= P2^6;sbit LED_ 5= P2^5;sbit LED_ 4= P2^4;sbit LED_ 3= P2^3;void main ( ) {while(1){if (!KEY_0 ) { // 按键KEY_0被按delayus(20); //消抖动 if (!KEY_0 ) { //确认被按下 LED_7=~LED_7 //灯亮或灭}}}...... 其余一样即可。
给你个思路吧,用调制的方法,灯在高速闪烁人眼是看不出来的,你每个循环给闪烁的熄灭时间加1,灯就会慢慢变暗,在设置熄灭时间加到一定程度就开始减一,就会渐渐变亮了,如此循环就可以了
这个就是点亮LED嘛,入门51都有的的程序,随便一本51书上或网上都有哦 亲,要是让等强弱变化只需要用个AD哟,亲
#include sbit LED0=P0^0; sbit wei=P1^1; sbit duan=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; duan=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--); }
#include "reg51.h" //包含头文件 #define uchar unsigned char #define uint unsigned int //************************************************************************************************** //延时函数 //************************************************************************************************** delay(uint time) //int型数据为16位,所以最大值为65535 { uint i,j; //定义变量i,j,用于循环语句 for(i=0;i<time;i++) //for循环,循环50*time次 for(j=0;j<50;j++); //for循环,循环50次 } //************************************************************************************************** //主函数 //************************************************************************************************** void main() //主函数 { uint i; //定义变亮i while(1) //进入while死循环 { for(i=0;i<200;i++) //for循环,实现LED由亮逐渐变暗 { P0=0xff; //熄灭8位发光二极管 delay(i); //延时保持熄灭状态i个时间单位 P0=0x00; //点亮8位发光二极管 delay(200-i); //延时保持点亮状态200-i个时间单位 } P0=0xff; //熄灭8位发光二极管 delay(5000); //延时保持熄灭状态5000个时间单位,使现象更明显 for(i=0;i<200;i++) //for循环,实现LED由暗逐渐变亮 { P0=0x00; //点亮8位发光二极管 delay(i); //延时保持熄灭状态i个时间单位 P0=0xff; //熄灭8位发光二极管 delay(200-i); //延时保持点亮状态200-i个时间单位 } } }
#include // 包含头文件 // 延时函数 // 参数 in 为延时的时间长度(单位时间很短,大约一条指令的时间) void delay(unsigned int in) { unsigned int i; for(i=0;i<100;i++) {;} } // 由暗变亮的子函数 // 参数 ledn 为点第几位的灯 void off_on(unsigned char ledn) { unsigned int i,j; for(i=0;i<100;i++) { for(j=0;j<100;j++) { if(i<=j) { // 模拟pwm的低电平输出 P0 = 0; } else { // 模拟PWM的高电平输出 P0 = 1<<ledn; } delay(10); // 这里的延时 根据灯的情况自己调整 } } } // 由亮变暗的子函数 // 参数 ledn 为点第几位的灯 void on_off(unsigned char ledn) { unsigned int i,j; for(i=100;i>1;i--) { for(j=0;j<100;j++) { if(i<=j) { // 模拟pwm的低电平输出 P0 = 0; } else { // 模拟PWM的高电平输出 P0 = 1<<ledn; } delay(10); // 这里的延时 根据灯的情况自己调整 } } } // 主程序开始 void main() { unsigned char ledn; while(1) { for(ledn=0;ledn<8;ledn++) { off_on(ledn); on_off(ledn); } } } 这个程序我简单测试了一下,效果还好,不知道这个效果是不是您想要的? 说明一下啊,我这个程序是高电平点的灯,就是P0口在输出高电平的时候灯才会亮, 如果调试程序的时候看见各个灯的亮暗顺序反了的话,仅仅需要调换一下亮暗的顺序或者改一下输出的电平关系就可以了。
#include #include #define uchar unsigned char #define uint unsigned int uchar num,m,led,a; delay(uint ms) { uint i,j; for(i=ms;i>0;i--) for(j=110;j>0;j--); } uchar code table[]={ 0xfe,0xfc,0xf8,0xf0, 0xe0,0xc0,0x80,0x00}; void main() { m=8; num=0; while(1) { led=table[num]; for(a=m;a>0;a--) { P1=led; delay(500); led=_crol_(led,1); delay(500); } m--; num++; if(num==8) num=0; if(m==0) m=8; } } 不知道你要的是不是这个效果
直接用按钮触发外部中断的,一个加速,一个减速。 用的光敏电阻和继电器做的光电开关。 电路我用proteus 8画和仿真的。你参考吧。 #include #define uint unsigned int void delay(uint time); void flicker(uint led);//呼吸灯 void init(); uint t1=80;//闪烁频率 uint light=0; sbit k1=P3^2; sbit k2=P3^3; sbit led1=P1^6; sbit led2=P1^7; void main() { uint led1=0xFE,led2=0xFD,led3=0xFB; init(); while(1) { flicker(led1); flicker(led2); flicker(led3); } } void init() { IT0=0; IT1=0; EX0=1; EX1=1; EA=1; } void delay(uint t)//延时程序 { uint i,j; for(i=t;i>0;i--) for(j=110;j>0;j--); } void flicker(uint led)//呼吸灯 flag==1逐渐变亮 flag==0逐渐变暗 { uint flag=1; while(1) { P1=led; delay(light); P1=0xFF; delay(t1-light); if(flag==1) light++; else light--; if(light==t1 && flag==1) flag=0; else if(light==0 && flag==0) break; } } void click1()interrupt 0 //加速 { delay(10); if(k1==0) { while(k1==0); if(t1-1>light) t1--; else { t1--; light=t1-1; } } } void click2()interrupt 2 //减速 { delay(10); if(k2==0) { while(k2==0); if(t1<80) t1++; } }
你可以了解一下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); }