歡迎您光臨本站 登入註冊首頁

概述

器件:74hc595.引腳說明:SDA:數據輸入口。SH_CP:數據輸入控制端,在每個SH_CP的上升沿,SDA口上的數據移入寄存器,在SH_CP的第9個上升沿,數據開始從QS移出。ST_CP:數據置……

器件:74hc595.
引腳說明:
SDA:數據輸入口。
SH_CP:數據輸入控制端,在每個 SH_CP的上升沿, SDA口上的數據移入寄存器, 在 SH_CP的第 9個上升沿, 數據開始從 QS 移出。
ST_CP:數據置入鎖存器控制端。
Q0~Q7:數據并行輸出端。
 
數據從SDA 口送入 74HC595 , 在每個 SH_CP的上升沿, SDA口上的數據移入寄存器, 在 SH_CP的第 9個上升沿, 數據開始從 QS 移出。如果把第一個74HC595的QS和第二個74HC595 的 SDA 相接, 數據即移入第二個74HC595中, 照此一個一個接下去, 可接任意多個。數據全部送完后, 給 ST_CP一個上升沿, 寄存器中的數據即置入鎖存器。此時如果 EN 為低電平, 數據即從並口Q0~Q7 輸出, 把Q0~Q7 與LED的8 段相接, LED就可以實現顯示了。要想軟體改變LED的亮度, 只需改變 EN的占空比就行了。

實驗原理及內部結構: 
 
如圖所示:
    74HC595 內含8 位串入、串/ 並出移位寄存器和8位三態輸出鎖存器。寄存器和鎖存器分別有各自的時鐘輸入(SH_CP和ST_CP) , 都是上升沿有效。當SH_CP從低到高電平跳變時, 串列輸入數據(SDA) 移入寄存器; 當ST_CP從低到高電平跳變時, 寄存器的數據置入鎖存器。清除端(CLR) 的低電平只對寄存器複位(QS 為低電平) , 而對鎖存器無影響。當輸出允許控制(EN) 為高電平時, 并行輸出(Q0~Q7) 為高阻態, 而串列輸出(QS) 不受影響。74HC595 最多需要5 根控制線, 即SDA、SH_CP、ST_CP、CLR 和EN。其中CLR 可以直接接到高電平, 用軟體來實現寄存器清零; 如果不需要軟體改變亮度, EN 可以直接接到低電平, 而用硬體來改變亮度。把其餘三根線和單片機的I/ O 口相接, 即可實現對LED 的控制。數據從SDA 口送入74HC595 , 在每個SH_CP的上升沿, SDA 口上的數據移入寄存器, 在SH_CP的第9個上升沿, 數據開始從QS 移出。如果把第一個74HC595 的QS 和第二個74HC595 的SDA 相接, 數據即移入第二個74HC595 中, 照此一個一個接下去, 可接任意多個。數據全部送完后, 給ST_CP 一個上升沿, 寄存器中的數據即置入鎖存器。此時如果EN 為低電平, 數據即從並口Q0~Q7 輸出, 把Q0~Q7 與LED 的8 段相接, LED 就可以實現顯示了。要想軟體改變LED 的亮度, 只需改變EN 的占空比就行了。。LED 的亮度用PR1~ PR3 的阻值來控制。P1 口的P115 、P116 、P117 用來控制LED 的顯示,分別接到ST_CP、SH_CP和SDA 腳。

實驗內容:
按下圖連接器件:
 

程序如下所示:
#include
#include
#define uchar unsigned char
#define uint unsigned int

sbit SDA =     P1^1;
sbit SHIFT  =  P1^2;
sbit ST  =  P1^0;
#define NOP     _nop_()

uchar led[] = {0x5b,0x3f,0x3f,0x6f};
uchar select[] = {0x0fe,0xfd,0xfb,0xf7};
uchar i=0;

void Init( )
{
  SDA = 0;
  SHIFT = 0;
  ST = 0;
}

void delay()
{
 uchar jj;
 for(jj=0;jj<200;jj++);
 while(jj--);
}

void display(uchar dat)
{
  uchar ii;
  uchar sdata=dat;
  for(ii=0;ii<8;ii++)
  {
    if(sdata&0x80)SDA=1;
 else SDA = 0;
    sdata<<=1;
    SHIFT =0;
    NOP;
    NOP;
    SHIFT = 1;
   NOP;
   NOP;
  }
  ST = 1;
  NOP;
  NOP;
  ST = 0;
}

void main()
{
  Init();
  while(1){
  delay();
  delay();
  P2 = select[i];
  display(led[i]);
  i=(i+1)%4;
  }

}


[admin via 研發互助社區 ] AT89C51串並轉換驅動數碼管實驗指導已經有2070次圍觀

http://cocdig.com/docs/show-post-42072.html