在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > AVR學(xué)習(xí)心得(三)

            AVR學(xué)習(xí)心得(三)

            作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò) 收藏
            AVR mega128 SPI 控制HC595

            經(jīng)過(guò)多天的努力,終于對(duì)AVR控制HC595驅(qū)動(dòng)數(shù)碼管,有了全面的認(rèn)識(shí)和了解。下面我將把AVR控制HC595的設(shè)計(jì)經(jīng)驗(yàn)寫(xiě)在下面:

            本文引用地址:http://www.biyoush.com/article/201611/317325.htm

            AVR控制HC595控制有兩種方法:

            一種:利用AVR自帶的SPI接口控制;

            一種:利用AVR端口模擬SPI方式控制。

            原理圖:

            說(shuō)明:

            1。用AVR自帶的SPI總線(xiàn)接口控制時(shí),要注意幾個(gè)SPI寄存器的使用:

            • 設(shè)置SPI的管腳狀態(tài):

            DDRB|=(1<

            • SPI控制寄存器SPCR:

            SPCR=(1<

            • SPI數(shù)據(jù)寄存器SPDR:

            SPDR = Data; /* 啟動(dòng)數(shù)據(jù)傳輸 */

            • SPI狀態(tài)寄存器SPSR:

            while(!(SPSR & (1<

            而對(duì)于HC595來(lái)說(shuō),只要注意時(shí)序就可以了。對(duì)于用SPI接口方式,移位寄存器的時(shí)序有AVR自動(dòng)產(chǎn)生,不用去管它,只有存儲(chǔ)寄存器的時(shí)序有軟件控制。

            #define SS 0
            #define SCK 1
            #define MOSI 2
            #define MISO 3

            #define SS_H() PORTB|=(1<#define SS_L() PORTB&=~(1<

            把數(shù)據(jù)從HC595送入存儲(chǔ)寄存器

            void SPI_MasterTransmit(char Data)
            {
            /* 啟動(dòng)數(shù)據(jù)傳輸 */
            SPDR = Data;
            /* 等待傳輸結(jié)束 */
            while(!(SPSR & (1< ;
            }

            數(shù)據(jù)從595的并行口輸出

            void HC_595_OUT(unsigned char data)
            {
            SS_L(); //拉低存儲(chǔ)寄存器時(shí)鐘
            SPI_MasterTransmit(data); //傳送數(shù)據(jù)到HC595
            SS_H(); //拉高存儲(chǔ)寄存器時(shí)鐘
            }

            2。AVR模擬SPI總線(xiàn)控制HC595:

            對(duì)于這種方法,要求對(duì)單片機(jī)的了解要少一些。把AVR與HC595相接的口都設(shè)置為輸出,然后按595的時(shí)序控制595 即可。

            //存儲(chǔ)寄存器時(shí)鐘輸入
            #define SS_H() PORTB|=(1<#define SS_L() PORTB&=~(1<//移位寄存器時(shí)鐘輸入
            #define SCK_H() PORTB|=(1<#define SCK_L() PORTB&=~(1<//串行數(shù)據(jù)輸入
            #define MOSI_H() PORTB|=(1<#define MOSI_L() PORTB&=~(1<

            把數(shù)據(jù)從HC595送入存儲(chǔ)寄存器

            void HC_595_input(unsigned char data)
            {
            unsigned char i;
            for(i=0;i<8;i++)
            {
            SCK_L();//移位寄存器時(shí)鐘拉低時(shí)鐘
            if(data&0x80) //最高位判斷
            {
            MOSI_H(); //最高位為1,則寫(xiě)1到DS口
            }
            else
            {
            MOSI_L(); //最高位為0,則寫(xiě)0到DS口
            }
            SCK_H();//移位寄存器時(shí)鐘拉高時(shí)鐘
            delay_1us();
            data<<=1;
            }
            }

            數(shù)據(jù)從595的并行口輸出

            void HC_595_output(unsigned char data)
            {
            SS_L();//存儲(chǔ)寄存器時(shí)鐘拉低時(shí)鐘
            HC_595_input(data);
            SS_H();//存儲(chǔ)寄存器時(shí)鐘拉高時(shí)鐘
            }

            總結(jié):

            由上面的函數(shù)可以看出,這兩種方法,僅僅該變的是《把數(shù)據(jù)從HC595送入存儲(chǔ)寄存器》函數(shù),下面的《數(shù)據(jù)從595的并行口輸出》函數(shù)完全是一樣的。而用第一種方法函數(shù)要簡(jiǎn)單些,但是設(shè)置要復(fù)雜,要懂得AVR的寄存器的功能和設(shè)置方法。用第二種方法不需要太多的設(shè)置,可以在不了解單片機(jī)內(nèi)部寄存器的情況下進(jìn)行控制,函數(shù)復(fù)雜些。但只需要了解595的時(shí)序就可以控制,并于移植。

            /*SPI接口初始化*/

            void SPI_MasterInit(void) {

            DDRB |= (1<

            PORTB=~((1<

            //配置拉電阻

            SPCR = (1<

            | (1<

            }



            關(guān)鍵詞: AVR學(xué)習(xí)心

            評(píng)論


            技術(shù)專(zhuān)區(qū)

            關(guān)閉