如何用一个HC595做流水灯,我是初学者,请各位大神指点一下。最好有代码来看一下,多谢了。
void LED_HC595(void)
{
//volatile unsigned char LED_data=0x0f;
volatile unsigned char LED_data[8]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
//数据传输//
unsigned char c,b,num;
num= LED_data[8];
for(b=0;b<8;b++)
delay_ms(100);
{
CLR_HC595_RCK;
delay_us(500);
for(c=0;c<8;c++)
{
CLR_HC595_SCK;
delay_us(500);
if((num&0x80)==0x80)
SET_HC595_DS;
else
CLR_HC595_DS;
delay_us(500);
num<<=1;
SET_HC595_SCK;
delay_us(500);
}
SET_HC595_RCK;
delay_us(500);
}
}
void main()
{
unsigned char a;
unsigned char LED_data[8]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00};
disableInterrupts();
CLK_Configuration();
GPIO_Configuration();
TIME2_Init();
enableInterrupts();
while(1)
{
//KEY_Demo();
//KEY_Demo2();
//KEY_Demo1();
for(a=0;a<8;a++)
{
//LED_HC595( );
SendByte(LED_data[a]);
OutCtrl595();
delay_ms(1000);
}
// delay_ms(100);
}
}
大概流程就是这样的
{
unsigned char a;
disableInterrupts();
CLK_Configuration();
GPIO_Configuration();
TIME2_Init();
enableInterrupts();
while(1)
{
//KEY_Demo();
//KEY_Demo2();
//KEY_Demo1();
for(a=0;a<8;a++)
{
LED_HC595( );
}
delay_ms(100);
}
}
评分
查看全部评分
我发了一个程序上来,麻烦大哥有时间帮忙看一下哪里出问题
我发了一个程序上来,麻烦大哥有时间帮忙看一下哪里出问题
#define nop _nop_
sbit RCLK1=P1^2; //控制位信号
sbit DAT=P1^5; //数据输出
sbit SRCLK=P1^4; //左移时钟
sbit ENC=P1^3; //芯片使能
//发送字节
void SendByte(uchar num)
{
uchar i;
for(i=0;i<8;i++)
{
SRCLK=0;
DAT=num&0x80;
num=num<<1;
SRCLK=1;
}
}
//输出控制信号
void OutCtrl595(void)
{
RCLK1=0;
nop();
RCLK1=1;
}
评分
查看全部评分
按照你的方式试了和我上面的一样,能在详细点吗?多谢了
延时的时间要稍长些,
感谢兄弟的热情帮助,我多试几次应该可以了
按照你的思路已经可以了,谢谢