#define u8 unsigned char
#define u16 unsigned int
sbit MR=P1^6//寄存器清0,避免数据错位
sbit RCK=P1^5//并行输出时钟
sbit DS=P1^4//数据线
sbit CLK=P1^3//移位输入时钟
void writ_595(u8 dat) 者巧知
{
u8 i
MR=0//寄存器清0,避免宽脊数据错位
MR=1
for(i=0i<8i++)
{
CLK=0
if((dat&0x80) == 0x80)
DS = 1//串行数据输出
else DS = 0
CLK=1//移位输入时钟,上升沿输入
dat<<=1
}
RCK=0//并行输出时钟
RCK=1
} 该子函数可以直接首消调用,比如writ_595(0xfe);Q0-Q7脚则输出对应的二进制码
这样接是可以实现的!没有级联的74HC595,不知道是出于什么样的考虑,不过是可以实现的。
你仔细看一下手册会发现:只有STCP脚上有上升沿时,595的移位寄存器中的数据才会输出到595的IO口上。因此,照现在的掘数情况你要分别编两个595的驱动!
1、先向第判则首一个595内发8位串行数据,然后给第一片595的STCP脚一个上升沿,另一片595STCP脚电平保持不变,此时虽然第二片595移位寄存器内的数据也跟着变化,但是由于STCP脚没有上升沿,所以第二片595的IO口的状态不发生变化;
2、再向第二个595内发8位串行数据,然后给第二片595的STCP脚一个上升沿,另一片595STCP脚电平保持不变,此时虽然第一片595移位寄存器内的数据也跟着变化,但是由于STCP脚没有上升沿,所以第一片595的IO口的状态不发生盯迹变化;
如此循环1、2、步骤,当可实现分别控制两片595的目的。
不过这个做板子的大哥还真有才。你这不会是一道面试题吧!!
又不明白的QQ:28361319
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)