求一个单片机呼吸灯程序

我的单片机是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模块,五一还得用定时器模拟
相似回答