单片机控制两片74HC595级联的16颗LED灯整体渐变
一直都实现不了渐变,求大神帮忙谢谢!附上自己的源程序:#include<reg52.h>#defineucharunsignedchar#defineuintunsign...
一直都实现不了渐变,求大神帮忙 谢谢!
附上自己的源程序:
#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);
}
}
} 展开
附上自己的源程序:
#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);
}
}
} 展开
1个回答
展开全部
……
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 进行亮度控制。
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 进行亮度控制。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询