下面的程序可以發送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; //變為低電平,為下次準備
}
}
|