找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7509|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

stm32f0R8t6學(xué)習(xí)串轉(zhuǎn)并口74HC595實(shí)驗(yàn)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
         因?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=電源電壓

        引腳說明                        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)閉使能,并不影響其他輸入端。
                         真值表         


        程序樣例     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
  1. /******************** (C) COPYRIGHT 2011 青風(fēng)電子 ********************
  2. * 文件名  :led.c
  3. * 描述    :         
  4. * 實(shí)驗(yàn)平臺:青風(fēng)stm32f051開發(fā)板
  5. * 描述    :led驅(qū)動函數(shù)
  6. * 作者    :青風(fēng)
  7. * 店鋪    :qfv5.taobao.com
  8. **********************************************************************************/

  9. #include "led.h"
  10. /**********************************************/
  11. /* 函數(shù)功能; led燈 初始化                     */
  12. /* 入口參數(shù):無                               */
  13. /**********************************************/
  14. unsigned char code_hex[]={
  15.      0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,        
  16.      0x7c,0x39,0x5e,0x79,0x71,0x76,0x73,0x3e,0x00
  17. };
  18. void LED_Init(void)
  19. {
  20.         GPIO_InitTypeDef GPIO_InitStruct;
  21.         RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  22.   GPIO_InitStruct.GPIO_Pin = SDATA_595  |SCLK_595| RCK_595 ;
  23.   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
  24.   GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  25.   GPIO_InitStruct.GPIO_Speed =GPIO_Speed_Level_3;
  26.   GPIO_Init(RCK_PORT, &GPIO_InitStruct);
  27.         GPIO_SetBits(RCK_PORT, SDATA_595  |SCLK_595| RCK_595 );
  28. }
  29. void delay(u8 i)
  30. {
  31.         while(i--);
  32. }
  33. /**********************************************/
  34. /* 函數(shù)功能;打開led燈                        */
  35. /* 入口參數(shù):無                               */
  36. /**********************************************/
  37. void SDATA_0(void)
  38. {
  39.          GPIO_ResetBits(RCK_PORT, SDATA_595 );
  40.         }
  41. /**********************************************/
  42. /* 函數(shù)功能; 關(guān)掉led燈                        */
  43. /* 入口參數(shù):無                               */
  44. /**********************************************/
  45. void SDATA_1(void)
  46. {
  47.                 GPIO_SetBits(RCK_PORT, SDATA_595);
  48. }

  49. /**********************************************/
  50. /* 函數(shù)功能;led翻轉(zhuǎn)                          */
  51. /* 入口參數(shù):無                               */
  52. /**********************************************/
  53. void SCLK_0(void)
  54. {
  55.          GPIO_ResetBits(RCK_PORT, SCLK_595 );
  56.         }
  57. void SCLK_1(void)
  58. {
  59.          GPIO_SetBits(RCK_PORT, SCLK_595 );
  60.         }
  61. void RCK_0(void)
  62. {
  63.          GPIO_ResetBits(RCK_PORT, RCK_595 );
  64.         }
  65. void RCK_1(void)
  66. {
  67.          GPIO_SetBits(RCK_PORT, RCK_595 );
  68.         }
  69. void write_595(u8 temp)  //上升沿將數(shù)據(jù)寫入寄存器
  70. {
  71.         u8 i,temp0;
  72.         SCLK_0();
  73.         for(i=0;i<8;i++)
  74.         {
  75.                  temp0=temp<<i ;
  76.                 if(temp0&0x80)
  77.                 SDATA_1();
  78.   else         SDATA_0();        
  79.                 SCLK_1();
  80.         //        delay(100);
  81.                 SCLK_0();
  82.         }
  83.         
  84. }
  85. void out_595(void)//上升沿輸出數(shù)據(jù)
  86. {
  87.   RCK_0();        
  88. //        delay(100);
  89.         RCK_1();        
  90.         RCK_0();        
  91. }
  92. void buffer_595(u8 temp)
  93. {
  94.         write_595(temp);
  95.         out_595();
  96. }
復(fù)制代碼

下載(此代碼年代久遠(yuǎn),采用的老版本的庫和老版本Keil編寫的): 代碼.7z (737.65 KB, 下載次數(shù): 49)
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:128791 發(fā)表于 2016-7-1 10:14 | 只看該作者
學(xué)習(xí)學(xué)習(xí)1
回復(fù)

使用道具 舉報(bào)

板凳
ID:144075 發(fā)表于 2016-10-23 16:56 | 只看該作者
很不錯(cuò)的經(jīng)驗(yàn)貼,學(xué)習(xí)了。
回復(fù)

使用道具 舉報(bào)

地板
ID:121160 發(fā)表于 2017-6-16 14:55 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

5#
ID:121160 發(fā)表于 2017-6-16 15:00 | 只看該作者
學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

6#
ID:92967 發(fā)表于 2017-9-6 16:39 | 只看該作者

 學(xué)習(xí)學(xué)習(xí)1
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表