c语言循环移位寄存器,[转载]关于移位寄存器74HC164的使用
移位寄存器74HC164多用于擴展IO口,下面是我使用時的心得:
74HC164的幾點說明:
1.74HC164是串行輸入,并行輸出的;
2.它的并行輸出其實是有延時的,只是延時時間小,可以認為是并行輸出;
74hc164封裝和真值表:
真值表中文解釋說明
H-高電平?L
-低電平?X -任意電平
↑-低到高電平跳變(上升沿有效)
QA0,QB0,QH0?-規定的穩態條件建立前的電平
QAn,QGn?-時鐘最近的↑前的電平
看真值表的第三條和第五條:就可以知道,在保持clear為 H,
clock為↑狀態下,AB都為H時,移位寄存器移入H,而當移位寄存器移入L時,必須令B為L,而A不受約束。所以可以把AB斷相連再接入單片機數據端口。還有一種是A腳直接接高電平,B腳連入單片機數據端(P2_7)
時序圖:
1. 首先區分輸入輸出信號。這里CLEAR、A、B、CLOCK是輸入信號,Qa~Qh是輸出信號;
2. 拿尺子開始掃描……
2.1.
首先可以看到CLEAR的下降沿后輸出全部置低電平。結合后面的一個CLEAR下降沿,可以得出結論:當CLEAR輸入下降沿時,無論A、B、CLOCK狀態為何,輸出全部拉低;
2.2.
尺子向右移動……找到Qa的第一個上升沿,可以看到這個上升沿是與CLOCK的上升沿對齊的,可以得出結論:輸出在邏輯上與上升沿同步。此時將會注意到在此之前已經有3個上升沿但輸出始終為低電平,尺子移動分別比較這3個上升沿,其A、B輸入分別為10、01,于是可以得出結論:Qa
= A · B。
2.3.
尺子繼續向右移動……可以分別看出在隨后的CLOCK上升沿處,Qa全部按照A與B進行輸出,從而驗證以上結論。此外Qb~Qh的波形為Qa波形依次移位得到。
使用它的通用驅動C語言源代碼:
//在每一個上升沿輸出腳SDO狀態移一位,CLK為時鐘輸入腳,CLK為輸入腳,
//一般同連一腳,保持相同電平狀態,與運算之后仍為該狀態
void ind_light_disp(uint ind_num)//點亮哪一位,就置1
{
uint i,j;
i = 0x80;
for(j=0; j<8; j++)
{
if((i&ind_num) == i)
{
CLK = 0;?//此處與下面的CLK = 1結合產生一個上升沿
SDO = 0;
CLK = 1;
}
else
{
CLK = 0;
SDO = 1;
CLK = 1;
}
i >>= 1;
}
delay(10000);//此處延時很重要,不延時可能會出現閃爍現象
}
一個使用電路圖(點亮一些燈):
總結
以上是生活随笔為你收集整理的c语言循环移位寄存器,[转载]关于移位寄存器74HC164的使用的全部內容,希望文章能夠幫你解決所遇到的問題。