下面的程序可以发送10个8位二进制代码给级联的10个74HC595吗?我仿真的时候只显示2个74HC595收到正确数据,不知道是什么原因。
这个代码我是拿CSDN上的代码改的。是不是还需控制10脚MR和13脚OE呢?如果是,该怎么改程序呢?
目前的电路解法如下:
已确认各74HC595的14脚SER与9脚Q7S
14脚SER 接 单片机P3.4
11脚SCK 接 单片机P3.6
12脚RCK接 单片机P3.5
13脚OE接GND
10脚MR接VCC
程序代码如下:
#include<reg51.h>
#include<intrins.h>
typedef unsigned char uchar;
typedef unsigned int uint;
/**********函数声明********************/
void SendTo595(uchar byteData);
/***********************************/
sbit SER = P3^4; //p3.4脚控制串行数据输入
sbit SCK = P3^6; //串行输入时钟
sbit RCK = P3^5; //存储寄存器时钟
void main()
{
charcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
SendTo595(table[0]);
SendTo595(table[1]);
SendTo595(table[2]);
SendTo595(table[3]);
SendTo595(table[4]);
SendTo595(table[5]);
SendTo595(table[6]);
SendTo595(table[7]);
SendTo595(table[8]);
SendTo595(table[9]);
/*位移寄存器数据准备完毕,转移到存储寄存器*/
RCK = 1; //上升沿,让存储寄存器时钟变为高电平,并延时2个时钟周期
_nop_();
_nop_();
RCK = 0;
while(1);
}
//功能:发送一个字节的数据给595,再并行输出
void SendTo595(uchar byteData)
{
char i=0;
for(;i<8;i++)
{
SER = byteData>>7;
byteData= byteData<<1;
SCK = 1; //上升沿,让串行输入时钟变为高电平,并延时2个时钟周期
_nop_();
_nop_();
SCK = 0; //变为低电平,为下次准备
}
}
|