<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > LPC ARM使用SPI總線控制8個(gè)LED燈

          LPC ARM使用SPI總線控制8個(gè)LED燈

          作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
          下面給出一個(gè)LPC ARM7通過SPI總線控制8路流水等的實(shí)例,讓大家對(duì)SPI總線傳輸、發(fā)送數(shù)據(jù)有一個(gè)清晰的了解。

          電路圖如下:

          本文引用地址:http://www.ex-cimer.com/article/201611/316724.htm

          開發(fā)板通過SPI總線控制74HC595驅(qū)動(dòng)8盞LED燈
          程序清單如下:
          #include "config.h"
          #define SPI_CS (1 << 16) // P0.16口為片選腳
          #define CE_Low() (IO0CLR |= SPI_CS) // 選中從器件
          #define CE_High() (IO0SET |= SPI_CS)
          /* 流水燈花樣,低電平點(diǎn)亮,注意調(diào)用時(shí)候用了取反操作 */
          const uint32 LED_TBL[] =
          {
          0x00, 0xFF, // 全部熄滅后,再全部點(diǎn)亮
          0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, // 依次逐個(gè)點(diǎn)亮
          0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, // 依次逐個(gè)疊加
          0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, // 依次逐個(gè)遞減
          0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, // 兩個(gè)靠攏后分開
          0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 // 從兩邊疊加后遞減
          };
          /***********************************************************
          ** 函數(shù)名稱: Delay
          ** 函數(shù)功能: 長軟件延時(shí)
          ** 入口參數(shù): dly 延時(shí)參數(shù),值越大,延時(shí)越久
          ** 出口參數(shù): 無
          ************************************************************/
          void Delay(uint32 dly)
          {
          uint32 i = 0;
          for (; dly > 0; dly--)
          for (i = 0; i < 50000; i++);
          }
          /**********************************************************
          ** 函數(shù)名稱: SPIInit
          ** 功能說明: 初始化LPC2300系列ARM的SPI引腳及寄存器
          ** 入口參數(shù): 無
          ** 出口參數(shù): 無
          ************************************************************/
          void SPIInit(void)
          {
          /* 初始化SPI引腳 */
          PINSEL0 = 0;
          IO0DIR |= SPI_CS; // 設(shè)置SPI的片選引腳
          PINSEL0 |= 0xc0000000; // 設(shè)置P0.15腳為SCK腳
          PINSEL1 = (0x03 << 2) | (0x03 << 4); // 設(shè)置P0.17、P0.18引腳為SPI引腳

          /* 初始化SPI寄存器 */
          S0SPCCR = 0x48; // 設(shè)置SPI時(shí)鐘分頻
          S0SPCR = (0 << 2) | // SPI控制器每次傳輸發(fā)送和接收8位數(shù)據(jù)。
          (0 << 3) | // CPHA = 0, 數(shù)據(jù)在SCK 的第一個(gè)時(shí)鐘沿采樣
          (0 << 4) | // CPOL = 0, SCK 為高有效
          (1 << 5) | // MSTR = 1, SPI 處于主模式
          (1 << 6) | // LSBF = 0, SPI 數(shù)據(jù)傳輸MSB (位7)在先
          (0 << 7); // SPIE = 0, SPI 中斷被禁止
          }
          /************************************************************************
          ** 函數(shù)名稱: SPISndByte
          ** 函數(shù)功能: 通過硬件SPI接口發(fā)送一個(gè)字節(jié)
          ** 入口參數(shù): data
          ** 出口參數(shù): 無
          ************************************************************************/
          void SPISndByte(uint8 data)
          {
          uint32 temp = 0;
          CE_Low();
          S0SPDR = data;
          while (0 == (S0SPSR & 0x80)); // 等待SPIF置位,即等待數(shù)據(jù)發(fā)送完畢
          temp = S0SPSR; // 通過讀S0SPSR,清除SPIF標(biāo)志
          CE_High();
          }
          /**************************************************************
          ** 函數(shù)名稱: main
          ** 函數(shù)功能: 用SPI驅(qū)動(dòng)流水燈顯示
          ** 入口參數(shù): 無
          ** 出口參數(shù): 返回0則表明程序出錯(cuò)
          ** 調(diào)試說明: 需用杜邦線將P0.15~P0.18分別與SCLK、/CS、MISO、MOSI短接。
          ***************************************************************/
          int main(void)
          {
          uint32 i = 0;

          SPIInit();

          while (1)
          {
          for (i = 0; i < 42; i++)
          {
          Delay(20);
          SPISndByte(LED_TBL[i]);
          }
          }
          return (0);
          }



          關(guān)鍵詞: LPCARMSPI總線控制LED

          評(píng)論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();