AVR單片機(jī)與74HC595的SPI顯示程序
//*******************************************// 74HC595/165驅(qū)動(dòng)程序// (165,595均為兩片)//*******************************************unsigned int LED;unsigned int KEY_DATA;void Driver_595(unsigned char Bit,unsigned char State){if(State)LED|=(0x00001<>8));set_bit(1,0);clr_bit(1,0);SPI_W_R((int)LED);set_bit(1,0);clr_bit(1,0);}void Port_Init(void){DDRB=0xff;PORTB=0x00;}//****************************************************************void Driver_165(void) //Bite所取位0~15,State為改位的狀態(tài)0,1{ unsigned char a1;unsigned char a2;clr_bit(1,3); set_bit(1,3); a1=SPI_W_R(0x00); //74HC165輸入使能 a2=SPI_W_R(0x00); //讀出鍵值KEY_DATA=a1;KEY_DATA<<=8;KEY_DATA+=a2;return;}//*******************************************************************void set_bit(unsigned char port,unsigned char n)//port為端口號(hào)分別用0~3表示A~D,n該端口的引腳號(hào)0~7{switch(port){case 0x00:PORTA|=(0x01< >7)==0x00); //等待數(shù)據(jù)發(fā)送完畢return SPDR; //返回收到的數(shù)據(jù)}//*********************OK*****************************************
總結(jié):以上是AVR單片機(jī)使用SPI接口控制74HC595的例子,這些例子經(jīng)過簡單的修改就可以應(yīng)用到其它具有SPI即可的芯片上,如SPI接口的Flash存儲(chǔ)芯片AT45DB系列、SPI接口的時(shí)鐘芯片DS1302、SPI接口的AD或DA芯片等等。
對(duì)于AVR mega系列單片機(jī)一般都具有硬件SPI接口,建議客戶使用硬件SPI接口,這樣可以占用更少的硬件和軟件資源。但軟件實(shí)現(xiàn)SPI接口,也有一定的優(yōu)勢(shì),如它使用的IO口不是固定的,可以根據(jù)需要來指定,它一次發(fā)送的數(shù)據(jù)可以不是8位,而是可以根據(jù)需要來指定。
Shiftout VS Spiout
這兩個(gè)語句都是SPI輸出語句,與它們對(duì)應(yīng)的分別是shiftin和spiin
shiftout語句可以使用在硬件spi或軟件spi接口,通過config語句來確定:
Config Spi = Hard/soft
Shiftout語句使用在軟件spi接口。
評(píng)論