本帖最后由 强盗头头 于 2017-2-10 17:13 编辑
- #include"reg51.h"
- #include"intrins.h"
- typedef unsigned char u8;
- sbit SRCLK=P3^6;
- sbit RCLK=P3^5;
- sbit SER=P3^4;
- void HC595sendbyte(u8 dat)
- {
- u8 i;
- SRCLK=0;
- RCLK=0;
- for(i=0;i<8;i++)
- {
- if(dat&0x80)
- SER=1;
- else
- SER=0;
- dat<<=1;
- SRCLK=1;
- _nop_();
- _nop_();
- SRCLK=0;
- }
- RCLK=1;
- _nop_();
- _nop_();
- RCLK=0;
- }
- void main()
- {
- while(1)
- {
- HC595sendbyte(0x80);
- P0=0x7f;
- }
- }
复制代码我想点亮一个灯但效果如图。
-
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
跟数组什么关系 ,别看到8就想到 8x8, 别人是通过移位寄存器发送一个BYTE,当然要for语句了!
抱歉啊我用手机APP看的没有看全断章取义了
#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit OH=P3^4;
sbit SCLK=P3^6;
sbit RCLK=P3^5;
void delay(u8 a);
u8 led1 [32]=
{
0x00,0x83,0x83,0xff,0xff,0x83,0x83,0x00,0x7c,0xfe,0xfe,0xfc,0xfe,0xfe,0x7c,0x00,
0x00,0x01,0x01,0x7d,0xfd,0xc1,0xc1,0xfc,0x7c,0x00,0x01,0x03,0x01,0x00,0x00,0x00
};
u8 ledwei[32]=
{
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80
};
void delay(u8 a);
void hc595(u8 hc1,u8 hc2,u8 hc3,u8 hc4 );
void main()
{
while(1)
{
u8 l;
for(l=0;l<16;l++)
{
hc595(~ledwei[l+16],~ledwei[l],led1[l+16],led1[l]);
delay(10);
}
}
}
void delay(u8 a)
{
while(a--);
}
void hc595(u8 hc1,u8 hc2,u8 hc3,u8 hc4)
{
u8 i;
SCLK=1;
RCLK=1;
for(i=0;i<8;i++)
{
if((hc1<<i)&0x80)
{
OH=1;
}
else OH=0;
SCLK=0;
_nop_();
_nop_();
SCLK=1;
}
for(i=0;i<8;i++)
{
if((hc2<<i)&0x80)
{
OH=1;
}
else OH=0;
SCLK=0;
_nop_();
_nop_();
SCLK=1;
}
for(i=0;i<8;i++)
{
if((hc3<<i)&0x80)
{
OH=1;
}
else OH=0;
SCLK=0;
_nop_();
_nop_();
SCLK=1;
}
for(i=0;i<8;i++)
{
if((hc4<<i)&0x80)
{
OH=1;
}
else OH=0;
SCLK=0;
_nop_();
_nop_();
SCLK=1;
}
RCLK=0;
_nop_();
RCLK=1;
}
一周热门 更多>