|
因?yàn)槠鞑亩挤旁趯W(xué)校,所以就沒法做這個(gè)實(shí)驗(yàn),不過,這是我曾經(jīng)做過的實(shí)驗(yàn)。
本次主要兩種串轉(zhuǎn)并的器件(74hc164,74hc595)實(shí)驗(yàn)io拓展的功能,可能網(wǎng)上也有歷程,不過這是我自己編寫,所以記憶猶深。
在學(xué)習(xí)數(shù)電的過程中有學(xué)習(xí)這兩種器件,但我不知道為什么我買來的開發(fā)板都沒有用這個(gè)器件,所以很納悶,就在百度在搜了下74hc595的資料。
74HC595是硅結(jié)構(gòu)的CMOS器件, 兼容低電壓TTL電路,遵守JEDEC NO.7A標(biāo)準(zhǔn)。
74HC595具有8位移位寄存器和一個(gè)存儲器,三態(tài)輸出功能。 移位寄存器和存儲器有相互獨(dú)立的時(shí)鐘。
數(shù)據(jù)在SH_cp(移位寄存器時(shí)鐘輸入)的上升沿輸入到移位寄存器中,在ST_cp(存儲器時(shí)鐘輸入)的上升沿輸入到存儲寄存器中去。如果兩個(gè)時(shí)鐘連在一起,則移位寄存器總是比存儲寄存器早一個(gè)脈沖。
移位寄存器有一個(gè)串行移位輸入(Ds),和一個(gè)串行輸出(Q7’),和一個(gè)異步的低電平復(fù)位,存儲寄存器有一個(gè)并行8位的,具備三態(tài)的總線輸出,當(dāng)使能OE時(shí)(為低電平),存儲寄存器的數(shù)據(jù)輸出到總線。
8位串行輸入/輸出或者并行輸出移位寄存器,具有高阻關(guān)斷狀態(tài)。三態(tài)。
將串行輸入的8位數(shù)字,轉(zhuǎn)變?yōu)椴⑿休敵龅?位數(shù)字,例如控制一個(gè)8位數(shù)碼管,將不會有閃爍。
中文名74HC595類 別存儲器功 能數(shù)據(jù)存儲結(jié) 構(gòu)硅結(jié)構(gòu)的CMOS器件
特點(diǎn) 8位串行輸入 /8位串行或并行輸出 存儲狀態(tài)寄存器,三種狀態(tài)
輸出寄存器(三態(tài)輸出:就是具有高電平、低電平和高阻抗三種輸出狀態(tài)的門電路。)可以直接清除 100MHz的移位頻率
輸出能力 并行輸出,總線驅(qū)動; 串行輸入;標(biāo)準(zhǔn)中等規(guī)模集成電路
595移位寄存器有一個(gè)串行移位輸入(Ds),和一個(gè)串行輸出(Q7’),和一個(gè)異步的低電平復(fù)位,存儲寄存器有一個(gè)并行8位的,具備三態(tài)的總線輸出,當(dāng)使能OE時(shí)(為低電平),存儲寄存器的數(shù)據(jù)輸出到總線。
參考數(shù)據(jù)
Cpd決定動態(tài)的能耗,
Pd=Cpd×VCC×f1+∑(CL×VCC^2×f0)
F1=輸入頻率,CL=輸出電容 f0=輸出頻率(MHz) Vcc=電源電壓
引腳說明
95eef01f3a292df506712810bc315c6034a87301.jpg (10.73 KB, 下載次數(shù): 147)
下載附件
2016-3-30 19:57 上傳
74HC595
符號
| 引腳
| 描述
| Q0--Q7
| 第15腳,第1-7腳
| 8位并行數(shù)據(jù)輸出,
| GND
| 第8腳
| 地
| Q7’
| 第9腳
| 串行數(shù)據(jù)輸出
| MR
| 第10腳
| 主復(fù)位(低電平)
| SHCP
| 第11腳
| 移位寄存器時(shí)鐘輸入
| STCP
| 第12腳
| 存儲寄存器時(shí)鐘輸入
| OE
| 第13腳
| 輸出有效(低電平)
| DS
| 第14腳 | 串行數(shù)據(jù)輸入
| VCC
| 第16腳
| 電源
|
使用方法 74595的數(shù)據(jù)端:
Q0--Q7: 八位并行輸出端,可以直接控制數(shù)碼管的8個(gè)段。
Q7': 級聯(lián)輸出端。將它接下一個(gè)595的SI端。
DS: 串行數(shù)據(jù)輸入端。
74595的控制端說明:
/MR(10腳): 低電平時(shí)將移位寄存器的數(shù)據(jù)清零。通常我將它接Vcc。
SH_CP(11腳):上升沿時(shí)數(shù)據(jù)寄存器的數(shù)據(jù)移位。Q1->Q2-->Q3-->...-->Q7;下降沿移位寄存器數(shù)據(jù)不變。(脈沖寬度:5V時(shí),大于幾十納秒就行了。我通常都選微秒級)
ST_CP(12腳):上升沿時(shí)移位寄存器的數(shù)據(jù)進(jìn)入數(shù)據(jù)存儲寄存器,下降沿時(shí)存儲寄存器數(shù)據(jù)不變。通常我將ST_CP置為低點(diǎn)平,當(dāng)移位結(jié)束后,在ST_CP端產(chǎn)生一個(gè)正脈沖(5V時(shí),大于幾十納秒就行了。我通常都選微秒級),更新顯示數(shù)據(jù)。
/OE(13腳): 高電平時(shí)禁止輸出(高阻態(tài))。如果單片機(jī)的引腳不緊張,用一個(gè)引腳控制它,可以方便地產(chǎn)生閃爍和熄滅效果。比通過數(shù)據(jù)端移位控制要省時(shí)省力。
注1)74164和74595功能相仿,都是8位串行輸入轉(zhuǎn)并行輸出移位寄存器。74164的驅(qū)動電流(25mA)比74595(35mA)的要小,14腳封裝,體積也小一些。
2)74595的主要優(yōu)點(diǎn)是具有數(shù)據(jù)存儲寄存器,在移位的過程中,輸出端的數(shù)據(jù)可以保持不變。這在串行速度慢的場合很有用處,數(shù)碼管沒有閃爍感。
3)595是串入并出帶有鎖存功能移位寄存器,它的使用方法很簡單,在正常使用時(shí)ST_CP為低電平, /OE為低電平。595是串入并出帶有鎖存功能移位寄存器,它的使用方法很簡單,如下面的真值表,在正常使用時(shí)ST_CP為低電平, /OE為低電平。從DS每輸入一位數(shù)據(jù),串行輸入時(shí)鐘SH_CP上升沿有效一次,直到八位數(shù)據(jù)輸入完畢,輸出時(shí)鐘ST_CP上升沿有效一次,此時(shí),輸入的數(shù)據(jù)就被送到了輸出端。
595具體使用的步驟:
第一步:目的:將要準(zhǔn)備輸入的位數(shù)據(jù)移入74HC595數(shù)據(jù)輸入端上。
方法:送位數(shù)據(jù)到_595。
第二步:目的:將位數(shù)據(jù)逐位移入74HC595,即數(shù)據(jù)串入
方法:SH_CP產(chǎn)生一上升沿,將DS上的數(shù)據(jù)移入74HC595中.從低到高
第三步:目的:并行輸出數(shù)據(jù)。即數(shù)據(jù)并出
方法:ST_CP產(chǎn)生一上升沿,將由DS上已移入數(shù)據(jù)寄存器中的數(shù)據(jù)
送入到輸出鎖存器。
說明: 從上可分析:從SH_CP產(chǎn)生一上升沿(移入數(shù)據(jù))和ST_CP產(chǎn)生一上升沿(輸出數(shù)據(jù))是二個(gè)獨(dú)立過程,實(shí)際應(yīng)用時(shí)互不干擾。即可輸出數(shù)據(jù)的 同時(shí)移入數(shù)據(jù)。[1]
相關(guān)注釋
H=高電平狀態(tài)
L=低電平狀態(tài)
↑=上升沿
↓=下降沿
Z=高阻態(tài)
NC=無變化
×=無關(guān)系
當(dāng)MR為高電平,數(shù)據(jù)在SHCP上升沿進(jìn)入移位寄存器,在STCP上升沿輸出到并行端口,OE為使能端,低電平有效,當(dāng)OE為低時(shí),輸出使能,為高關(guān)閉使能,并不影響其他輸入端。
b21c8701a18b87d6b005e054070828381f30fd32.jpg (8.57 KB, 下載次數(shù): 160)
下載附件
2016-3-30 19:57 上傳
真值表
程序樣例 DS接MOSI,OE/GND接GND,SH_CP接SCLK,ST_CP接使能信號BIT0@P1,MR/VCC接POWER,如果不需要16位,改US16B,不使用H寄存器即可,還有SPI工作期間可以進(jìn)入低功耗,也可以執(zhí)行指令.
補(bǔ)充內(nèi)容:
論壇不知道怎么的,剛寫了一半就發(fā)表了,好吧,那就從新在寫下。 74hc595,在我眼中,有點(diǎn)像spi的樣子,不過,他只出不進(jìn),也沒有什么協(xié)議。就是用的很普遍的移位寄存器及鎖存器。只不過,由于現(xiàn)在一一些器件都集成了spi或者iic等協(xié)議,不需要串轉(zhuǎn)并的接口,但一般場合下,用下也無傷大雅,所以我就摳門的想到了用這款芯片。 我選用的一款stm32f0開發(fā)板,一個(gè)74hc595芯片,一個(gè)一段共陰數(shù)碼管。借鑒青風(fēng)電子的庫函數(shù),寫了下自己的串轉(zhuǎn)并的程序。 不知道為什么無法上傳文件壓縮包,那我就在在此貼上我的程序唄。
led.c
- /******************** (C) COPYRIGHT 2011 青風(fēng)電子 ********************
- * 文件名 :led.c
- * 描述 :
- * 實(shí)驗(yàn)平臺:青風(fēng)stm32f051開發(fā)板
- * 描述 :led驅(qū)動函數(shù)
- * 作者 :青風(fēng)
- * 店鋪 :qfv5.taobao.com
- **********************************************************************************/
- #include "led.h"
- /**********************************************/
- /* 函數(shù)功能; led燈 初始化 */
- /* 入口參數(shù):無 */
- /**********************************************/
- unsigned char code_hex[]={
- 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,
- 0x7c,0x39,0x5e,0x79,0x71,0x76,0x73,0x3e,0x00
- };
- void LED_Init(void)
- {
- GPIO_InitTypeDef GPIO_InitStruct;
- RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
- GPIO_InitStruct.GPIO_Pin = SDATA_595 |SCLK_595| RCK_595 ;
- GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
- GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
- GPIO_InitStruct.GPIO_Speed =GPIO_Speed_Level_3;
- GPIO_Init(RCK_PORT, &GPIO_InitStruct);
- GPIO_SetBits(RCK_PORT, SDATA_595 |SCLK_595| RCK_595 );
- }
- void delay(u8 i)
- {
- while(i--);
- }
- /**********************************************/
- /* 函數(shù)功能;打開led燈 */
- /* 入口參數(shù):無 */
- /**********************************************/
- void SDATA_0(void)
- {
- GPIO_ResetBits(RCK_PORT, SDATA_595 );
- }
- /**********************************************/
- /* 函數(shù)功能; 關(guān)掉led燈 */
- /* 入口參數(shù):無 */
- /**********************************************/
- void SDATA_1(void)
- {
- GPIO_SetBits(RCK_PORT, SDATA_595);
- }
- /**********************************************/
- /* 函數(shù)功能;led翻轉(zhuǎn) */
- /* 入口參數(shù):無 */
- /**********************************************/
- void SCLK_0(void)
- {
- GPIO_ResetBits(RCK_PORT, SCLK_595 );
- }
- void SCLK_1(void)
- {
- GPIO_SetBits(RCK_PORT, SCLK_595 );
- }
- void RCK_0(void)
- {
- GPIO_ResetBits(RCK_PORT, RCK_595 );
- }
- void RCK_1(void)
- {
- GPIO_SetBits(RCK_PORT, RCK_595 );
- }
- void write_595(u8 temp) //上升沿將數(shù)據(jù)寫入寄存器
- {
- u8 i,temp0;
- SCLK_0();
- for(i=0;i<8;i++)
- {
- temp0=temp<<i ;
- if(temp0&0x80)
- SDATA_1();
- else SDATA_0();
- SCLK_1();
- // delay(100);
- SCLK_0();
- }
-
- }
- void out_595(void)//上升沿輸出數(shù)據(jù)
- {
- RCK_0();
- // delay(100);
- RCK_1();
- RCK_0();
- }
- void buffer_595(u8 temp)
- {
- write_595(temp);
- out_595();
- }
復(fù)制代碼
下載(此代碼年代久遠(yuǎn),采用的老版本的庫和老版本Keil編寫的):
代碼.7z
(737.65 KB, 下載次數(shù): 49)
2022-11-22 03:10 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|