AVR單片機(jī)與74HC595的SPI顯示程序
SPI接口的全稱(chēng)是"Serial Peripheral Interface",意為串行外圍接口。SPI接口主要應(yīng)用在EEPROM,F(xiàn)LASH,實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間。
本文引用地址:http://m.butianyuan.cn/article/201611/323360.htmSPI接口是在CPU和外圍低速器件之間進(jìn)行同步串行數(shù)據(jù)傳輸,在主器件的移位脈沖下,數(shù)據(jù)按位傳輸,為全雙工通信,數(shù)據(jù)傳輸速度總體來(lái)說(shuō)比I2C總線要快,速度可達(dá)到幾Mbps。
SPI接口是以主從方式工作的,這種模式通常有一個(gè)主器件和一個(gè)或多個(gè)從器件,其接口包括以下四種信號(hào):
(1)MOSI – 主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入
(2)MISO – 主器件數(shù)據(jù)輸入,從器件數(shù)據(jù)輸出
(3)SCLK – 時(shí)鐘信號(hào),由主器件產(chǎn)生
(4)/SS – 從器件使能信號(hào),由主器件控制
在BASCOM中,提供了軟件實(shí)現(xiàn)的SPI接口的語(yǔ)句,同樣BASCOM也有支持硬件SPI的語(yǔ)句。
下面將使用三個(gè)例子來(lái)說(shuō)明如何在BASCOM中使用SPI接口。
在介紹例子之前,我們先了解一下硬件連接圖,連接如圖1所示。
圖中共使用三片74HC595芯片,分別控制三個(gè)數(shù)碼管,三片74HC595通過(guò)Q7’引腳進(jìn)行級(jí)聯(lián)。第一片74HC595的DS引腳連接到了ATmega88的MOSI引腳,而SH_CP引腳連接到了ATmega88的SCK引腳,ST_CP引腳連接到了ATmega88的PB1引腳。
一、使用硬件SPI接口控制74HC595 ------------------------------------------------------------------------使用芯片: ATmega88,晶振: 內(nèi)部8MHz晶振email: support@avrbascom.com軟件版本: Bascom-AVR 1.11.8.3 Full version------------------------------------------------------------------------$regfile = "m88def.dat" 芯片為ATmega88 $crystal = 8000000 8M晶振頻率 $hwstack = 32 設(shè)置堆棧大小 $swstack = 10$framesize = 40Dim I As ByteDim A(3) As ByteLatch Alias Portb.1Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes ,Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 0定義使用單片機(jī)自帶的硬件SPI,SPI中斷未使能,數(shù)據(jù)發(fā)送時(shí),高位先發(fā)送。設(shè)為SPI主設(shè)備,時(shí)鐘4分頻 Spiinit SPI初始化Restore Segtab 獲取要顯示數(shù)據(jù)的內(nèi)容 For I = 1 To 3Read A(i)Next ISpiout A(1) , 3 輸出要顯示的內(nèi)容給74HC595,分別輸出A(1),A(2),A(3)Latch = 1? 使能顯示 Waitus 10Latch = 0 DoLoopEnd*******************************************************************************--------------------------專(zhuān)用字形表------------------------------------------Segtab:Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB70 1 2 3 4 5 6 7 8 9二、使用軟件SPI接口控制74HC595------------------------------------------------------------------------使用芯片: ATmega88,晶振: 內(nèi)部8MHz晶振 email: support@avrbascom.com軟件版本: Bascom-AVR 1.11.8.3 Full version------------------------------------------------------------------------ $regfile = "m88def.dat" 芯片為ATmega88 $crystal = 8000000 8M晶振頻率 $hwstack = 32 設(shè)置堆棧大小 $swstack = 10$framesize = 40Const On = 1Const Off = 0Dim I As ByteDim A(3) As ByteLatch Alias Portb.1Config Spi = Soft , Dout = Portb.3 , Ss = None , Clock = Portb.5定義使用軟件SPI,pb3作為數(shù)據(jù)輸出口,pb5作為時(shí)鐘引腳 Spiinit SPI初始化Restore Segtab 獲取要顯示數(shù)據(jù)的內(nèi)容 For I = 1 To 3Read A(i)Next ISpiout A(1) ,3輸出要顯示的內(nèi)容給74HC595,分別輸出A(1),A(2),A(3)Latch = Off 使能顯示 Waitus 10Latch = OnDoLoopEnd********************************************************************--------------------------專(zhuān)用字形表------------------------------------------Segtab:Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB70 1 2 3 4 5 6 7 8 9三、使用軟件SPI接口控制74HC595------------------------------------------------------------------------使用芯片: ATmega88,晶振: 內(nèi)部8MHz晶振 email: support@avrbascom.com軟件版本: Bascom-AVR 1.11.8.3 Full version------------------------------------------------------------------------ $regfile = "m88def.dat" 芯片為ATmega88 $crystal = 8000000 8M晶振頻率 $hwstack = 32 設(shè)置堆棧大小 $swstack = 10$framesize = 40Const On = 1Const Off = 0Ledata Alias Portb.3 數(shù)據(jù)輸出口 Ledclk Alias Portb.5 時(shí)鐘輸出口 Latch Alias Portb.1Dim I As ByteDim A(3) As ByteRestore Segtab 獲取要顯示數(shù)據(jù)的內(nèi)容 For I = 1 To 3Read A(i)Next IFor I = 3 To 1 Step -1Shiftout Ledata , Ledclk , A(i) , 1輸出要顯示的內(nèi)容給74HC595Next ILatch = Off 使能顯示 Waitus 10Latch = OnDoLoopEnd********************************************************************--------------------------專(zhuān)用字形表------------------------------------------Segtab:Data &H77 , &H14 , &HE6 , &HB6 , &H95 , &HB3 , &HF3 , &H16 , &HF7 , &HB70 1 2 3 4 5 6 7 8 9
評(píng)論