![]() |
發(fā)布時間: 2020-9-5 13:08
正文摘要:下面的程序可以發(fā)送10個8位二進制代碼給級聯(lián)的10個74HC595嗎?我仿真的時候只顯示2個74HC595收到正確數(shù)據(jù),不知道是什么原因。 這個代碼我是拿CSDN上的代碼改的。是不是還需控制10腳MR和13腳OE呢?如果是,該怎么 ... |
wulin 發(fā)表于 2020-9-5 20:38 ![]() |
wulin 發(fā)表于 2020-9-5 20:38 十分感謝!加了初始化以后,完全避免了輸出不是想要輸出的問題了 |
感謝。 |
缺少 SCK = 0; RCK = 0; 初始化設置,其它沒有問題。 #include<reg51.h> #include<intrins.h> typedef unsigned char uchar; typedef unsigned int uint; /**********函數(shù)聲明********************/ void SendTo595(uchar byteData); /***********************************/ sbit SER = P3^4; //p3.4腳控制串行數(shù)據(jù)輸入 sbit SCK = P3^6; //串行輸入時鐘 sbit RCK = P3^5; //存儲寄存器時鐘 void main() { char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; SCK = 0; RCK = 0; 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]); /*位移寄存器數(shù)據(jù)準備完畢,轉(zhuǎn)移到存儲寄存器*/ RCK = 1; //上升沿,讓存儲寄存器時鐘變?yōu)楦唠娖剑⒀訒r2個時鐘周期 _nop_(); _nop_(); RCK = 0; while(1); } //功能:發(fā)送一個字節(jié)的數(shù)據(jù)給595,再并行輸出 void SendTo595(uchar byteData) { char i=0; for(;i<8;i++) { SER = byteData>>7; byteData= byteData<<1; SCK = 1; //上升沿,讓串行輸入時鐘變?yōu)楦唠娖,并延時2個時鐘周期 _nop_(); _nop_(); SCK = 0; //變?yōu)榈碗娖剑瑸橄麓螠蕚?br /> } } |
Powered by 單片機教程網(wǎng)