单片机控制两片74HC595级联的16颗LED灯整体渐变

一直都实现不了渐变,求大神帮忙 谢谢!
附上自己的源程序:
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit CLK=P1^7;
sbit STB=P1^6;
sbit DATA=P1^5;
sbit OE=P1^2;
void init_sys();
void delay(uint t);
void delayms(uint t);
unsigned char ZKB;

void send_data(uint temp1,temp2)
{
uchar i;
CLK=0;
STB=0;
for(i=0;i<8;i++)
{
if(temp1>=0x80)DATA=1;
else DATA=0;

CLK=0;
delay(15);
CLK=1;
delay(15);

temp1=temp1<<1;
}

for(i=0;i<8;i++)
{
if(temp2>=0x80)DATA=1;
else DATA=0;

CLK=0;
delay(15);
CLK=1;
delay(15);

temp2=temp2<<1;
}

STB=0;
delay(15);
STB=1;
delay(15);

CLK=0;
STB=0;
DATA=0;
}

void delayms(uint t)
{
uint x,y;
for(x=t;x>0;x--)
for(y=100;y>0;y--);
}
void delay(unsigned int t)
{
unsigned int i;
for(i=0;i<t;i++)
{
;
}
}
void init_sys()
{
TMOD=0x01;
TH0=0xFF;
TL0=0XF6;
TR0=1;
ET0=1;
EA=1;
}

void timer0(void) interrupt 1
{
static uchar click=0;
TH0=0xFF;
TL0=0xF6;
++click;
if (click>=100)

click=0;

if (click<=ZKB)
OE=0;
else
OE=1;

}

void main ()
{
init_sys();

send_data(0x00,0x00);
while(1)
{

for(ZKB=0;ZKB<100;ZKB=ZKB+1)
{
delayms(100);
}
for(ZKB=100;ZKB>0;ZKB=ZKB-1)
{
delayms(100);
}

}
}

……
void timer0(void) interrupt 1
{
static uchar click=0;
TH0=0xFF;
TL0=0xF6;
++click;
if (click>=100) click=0;

if (click<=ZKB) {
send_data(0x00,0x00);//加上这行
OE=0;
}
else {
send_data(0xff,0xff);//加上这行
OE=1;
}
}

……

共加入了两行,对 16 个 LED 进行亮度控制。
温馨提示:答案为网友推荐,仅供参考
相似回答