集成電路74HC595是一個8位串行輸入、並行輸出的位移緩存器,並行輸出為三態輸出。常用於單片機和Arduino擴展I/O埠。現實教學中,教師往往很困惑,按照傳統的看晶片引腳、看時序圖等步驟進行學習,學生理解有困難,更不會應用,是一個教學上的難點。如何突破這一難點呢?筆者分析了學生學習困難的原因:
學習障礙之一:晶片引腳眾多,名稱容易混淆;
人們的認知是一個由淺入深,由表及裡的過程。在學習晶片引腳功能的時候,切忌鬍子眉毛一把抓。先抓住常規特徵和主要特徵,由主到次介紹。在教學中,可以分為三步進行:
第一步:介紹常規引腳:電源和接地腳及主要特徵引腳;
一個數據輸入端:DS 14腳;兩個數據輸出端:串行數據輸出9腳QH』和八位並行輸出端QA—QH。特別強調兩片74HC595級聯時,第一片的輸出引腳接第二片的輸入引腳,以完成數據的傳輸;
第二步:介紹兩個時鐘引腳11腳SCK、 12腳RCK;具體看圖2,發現移位寄存器和存儲器分別使用不同的時鐘,數據在 SCK(11 腳)的上升沿輸入,在RCK(12 腳) 的上升沿進入到存儲寄存器中並行輸出,所以兩個時鐘脈衝是互相獨立的,能做到輸入串行移位與輸出鎖存的控制互不幹擾。
第三步:介紹SCLR移位寄存器清零端10腳和清零端13腳,看圖2就可知在何階段清零。
SCLR為低電平時,移位寄存器的數據清零。通常接到VCC防止數據清零。而G輸出使能控制腳,它是低電才使能輸出,所以接GND。即兩個清零端一正一負:10腳接VCC,13腳接GND。
經過這樣有條有理地細細分析,學生就認識了晶片的引腳功能,消除了記憶繁瑣困難的心理障礙,為下一步理解打下基礎。
學習障礙之二:移位寄存過程抽象,無法理解;
74HC595移位輸出的過程很抽象,需要學生有些想像力。有時教師用語言描述得再多,也是無濟於事,所以教師可以畫圖3的74HC595數據輸入輸出的仿真圖,模擬數據從14腳輸入「1111 1110」時Q0-Q7輸出的情況。具體過程如下:
第一步:選擇數據0 或1 ,準備輸入14腳DS端;
第二步:撥開關SW1,即11腳(數據輸入時鐘)輸入一個上升沿,依次把8位數據輸入74HC595的移位寄存器,比如數據1111 1000;輸入一個數據,就撥開關SW1一次;
第三步:撥開關SW2,即12腳(輸出存儲器鎖存時鐘)輸入一個上升沿,把輸入的8位移入存儲寄存器中的數據發送到輸出端Q0-Q7中。Q7-Q0所接的led被點亮,說明輸出數據分別是1111 1000;
第四步:可以嘗試輸入其它8位數據,觀察它的輸出,注意輸出順序。
經過學生的仿真和實驗,學生理解了這個晶片的移位顯示的原理,說明:從SCK(11 腳)產生一上升沿(移入數據)和RCK(12 腳)產生一上升沿(輸出數據)是二個獨立過程,實際應用時互不幹擾。即可輸出數據的同時移入數據。
學習障礙之三:學習的遷移能力欠缺,表現在如何將幾片74HC595級聯;
在經過一片595顯示數據之後,我們可以將兩片595級聯(如圖4):第一塊595晶片的串行輸出口接第二塊595晶片的數據輸入口且兩片595的11腳和12腳相連,以保證輸入移動和輸出同步。圖4就是兩片74hc595級聯完成16位數據的並行輸出。順序方面第一個寫入的數據將會是最後一級級聯的輸入數據,例如上面的例子是兩個級聯,第一個寫入的是1111 1000它將在最後一個 595 上輸出,第二個寫的0111 0011它顯示在第一個595上。
例如16*16點陣電路中列驅動電路採用了兩片74HC595移位寄存器進行「級聯」,構成列驅動電路,用串行移入、並行輸出的方式為16*16點陣顯示電子廣告屏提供16位列線數據。
這樣,我們發現由於只需用到 3 條引線就能實現串行傳輸數據,我們在51單片機上任意使用3個引腳,分別把它們與 74HC595 的 11 腳 SCK(串行移位時鐘)12 腳 RCK(串行 數據輸出)和 14 腳DS(串行數據輸入)相連接就可以了。
學習障礙之四:單片機模擬串行外圍設備協議通信程序無法理解;
第一個程序:51單片機將8位數據逐位移入74HC595的程序:
for (i=0;i<8;i++) //8位控制
{ SCK=0; //給串行移位時鐘送低電平
if((data1&0x80)==0x80) //數據data的最高位為1,則向SDATA_595發送1
SI=1; //發出數據的最高位
else //數據data的最高位為0,則向SDATA_595發送0
SI=0;
data1<<=1; //下一位串行數據移位到最高位
SCK=1; //給串行移位時鐘送高電平,產生上升沿
}
程序中SCK定義為74HC595的11腳,為數據輸入時鐘線,單片機模擬出0到1的上升沿,將一位位數據擠入595的寄存器。其中data1是14腳輸入的數據,data1&0x80取出數據的最高位。
第二個程序:16位的數據並行輸出到輸出鎖存器
void out_data()
{
RCK=0; //輸出鎖存器時鐘置低電平
_nop_();
_nop_();
RCK=1; //輸出鎖存器時鐘置高電平,產生上升沿鎖存數據
}
程序中RCK定義為74HC595的12腳,它處於上升沿時移位寄存器的數據進入寄存器存儲,處於下降沿時寄存器存儲的數據不變。單片機模擬出0到1的上升沿,將串行數據在8個輸出口並行輸出。理解了74HC595晶片的工作原理,這兩個輸入輸出程序也不難理解了。
無論在單片機學習或在Arduino技術的學習中,硬體電路同樣也很重要,教師只有抓住學習中的難點問題進行鑽研和備課,才能達到事半功倍的效果。如果僅僅照著時序圖分析數據的移入和輸出,學生無法真正了解內部的原理,更談不上應用了。為了使我們的教學符合學生的認知規律,教師需要開動腦筋,條分縷析進行巧學妙解,這樣學生的理解就能由表及裡、由淺入深、由主到次、由現象到本質了。
讓我們的學生們都愛上學習吧,因為教師的作用不僅僅是教知識,而是培養學生對這門學科的熱愛!謹記!
江蘇張家港 周荻 繆耀東