求一个单片机呼吸灯程序

我的单片机是STC89C52RC,想做个呼吸灯,我自己有呼吸灯程序 但是下载到里面 LED没有呼吸效果,最后问了别人 说是PWM 请问怎么用呢?给一个完整的程序

第1个回答  2013-08-04
#include <reg51.h>
#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--;
led =0x00;
delay(i);
led =0xff;
第2个回答  2018-03-29
我有呼吸灯程序,你的仿真有效果吗
第3个回答  推荐于2018-03-29
#include<reg51.h>
#define uchar unsigned char
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit k4=P1^3;
sbit led=P1^1;
uchar pwm,fun=0,cnt=0,time;
bit flag=0,flag1=0,flag2=0;
void t0isr() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
time++;
if(time>=40)
{
time=0;
if(flag1==0)
{
TR1=0;
TR0=0;
flag=0;
led=1;
}
else flag2=~flag2;
}
}
void t1isr() interrupt 3
{
if(fun<=5)
{
if(cnt<=pwm)led=1;
else led=0;
cnt++;
if(cnt>100)cnt=0;
}
else
{
if(flag2==0)
{
if(cnt<=pwm)led=1;
else led=0;
cnt++;
cnt%=100;
if(cnt==0 && pwm<100)pwm++;
}
else
{
if(cnt<=pwm)led=1;
else led=0;
cnt++;
cnt%=100;
if(cnt==0 && pwm>0)pwm--;
}
}
}
main()
{
TMOD=0x21;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=156;
TL1=156;
ET0=1;
ET1=1;
EA=1;
while(1)
{
if(k1==0 && flag==0)
{
while(k1==0);
fun++;
fun%=9;
}
if(k2==0 && flag==0)
{
while(k2==0);
if(fun>0)fun--;
else fun=8;
}
if(k3==0)
{
while(k3==0);
TR0=1;
TR1=1;
flag=1;
cnt=0;
}
if(k4==0)
{
while(k4==0);
led=1;
flag1=0;
flag=0;
TR0=0;
TR1=0;
}
switch(fun)
{
case 1:flag1=0;pwm=0;break;
case 2:flag1=0;pwm=25;break;
case 3:flag1=0;pwm=50;break;
case 4:flag1=0;pwm=75;break;
case 5:flag1=0;pwm=100;break;
case 6:flag1=0;flag2=0;pwm=0;break;
case 7:flag1=0;flag2=1;pwm=100;break;
case 8:flag1=1;flag2=0;pwm=0;break;
default:break;
}
P0=table[fun];
}
}本回答被网友采纳
第4个回答  2013-08-04
呵呵换成stc12c5410更简单~与五一兼容,有pwm模块,五一还得用定时器模拟

单片机制作呼吸灯的C语言程序怎样编写
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;Del...

求一个89c52单片机的呼吸灯程序 要边呼吸边移动的 就是相当于呼吸灯流水...
\/\/ 参数 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+...

求一个stc15w202s单片机的呼吸灯程序 要边呼吸边移动(波浪状), 就是...
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;...

基于AVR 单片机设计一款 LED 呼吸灯
要设计一款基于AVR单片机的LED呼吸灯,并通过压力传感器实现压力感应控制,以下是关键步骤的概述:首先,确保材料准备充足,包括:AVR单片机,如ATmega328PLED灯电阻式柔性薄膜压力传感器用于显示压力值的LCD显示屏电阻、电容等电子元件开发板或面包板等搭建工具接着,进行硬件连接,如:连接单片机与其他元件,确保...

51单片机设计呼吸灯
delay(200-i); \/\/延时保持点亮状态200-i个时间单位 } P0=0xff; \/\/熄灭8位发光二极管 delay(5000); \/\/延时保持熄灭状态5000个时间单位,使现象更明显 for(i=0;i<200;i++) \/\/for循环,实现LED由暗逐渐变亮 { P0=0x00; \/\/点亮8位发光二极管 delay(i); \/\/延时保持熄...

51单片机用汇编语言如何设计8个轮流呼吸的呼吸灯?
因为我不知道你这个板子的硬件,我就假设一下吧,你自己对照着看看,关键是流程 假设如下这八个灯依次接在P0口的八个口上,高电平为灯亮,低电平为灯灭,程序如下 ORG 0000H AJMP START START:MOV P0,#01H;()只有第一个灯亮 ACALL DELAY;延迟,不加延迟的话 你根本看不起清到底那个灯亮的 ...

求单片机大神帮忙设计一个电路,51单片机制作led呼吸灯的
proteus仿真按理来说是不可能达得到效果的,因为这种仿真得有非常快的处理速度。我刚动手试了下和自己的想法相同,LED只会间断的闪烁。我是用AVR单片机,用51也是一样的。我这个程序也在实物试过效果很好。演示定时器1的快速PWM输出@利用快速PWM输出控制LED的亮度变化,达到呼吸灯的效果*\/ include<iom8...

求编程大神!给一个可以直接调用的PWM(呼吸灯,)模快! 越简单越好类似延时...
1。单片机的晶振是12MHz,输出周期为1s。2。用两个开关控制占空比的增加和减少,分20等级。针对这个题目,做而论道设计了一个简单的实验电路:在 P2 口的 8 条线输出 PWM 波形;在 \/INT1、\/INT0 外接了两个按键,用来调整占空比;在 P0 口外接了两个 BCD 数码显示器,用来显示当前的占空比的...

利用单片机外接的三个按键分别模拟开关,调亮,调暗输入,控制2个发光...
可以实现 这个有个高大上的名字:呼吸灯 可以自动慢慢亮然后慢慢灭,也可以增加按键控制亮灭的程度 原理是用PWM实现不同电压的输出来实现灯的变亮和变暗,下面是网上截的图,比较容易理解,具体程序的话,就自己动手吧

单片机式的呼吸灯控制方法
再说30个LED的控制,如果要简单点做,30个LED可以串起来串一个电阻,接高点的电源电压,30个LED用同一个信号控制,当然,亮度也是同步变化的。如果要复杂,那就出30个信号分别控制30个LED串30个电阻,具体看你的追求的效果吧。呼吸灯的程序,如果有硬件的PWM模块,是很简单的,按一定的规律让PWM的...

相似回答