2012年6月28日 星期四

使用 SPI BUS 控制 74HC595 來驅動 8xLED 燈-範例轉貼



使用 SPI BUS 控制 74HC595 來驅動 8xLED 燈。程式碼如下:


#include "config.h"
#define SPI_CS (1 << 16) // P0.16 為CS腳
#define CE_Low() (IO0CLR |= SPI_CS) // 選中從器件
#define CE_High() (IO0SET |= SPI_CS)
/* 流水燈花樣,0亮,注意調用時候用 ! 操作 */
const uint32 LED_TBL[] =
{
 0x00, 0xFF, // 全部熄滅後,再全部點亮
 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, // 依次逐個點亮
 0x01, 0x03, 0x07, 0x0F, 0x1F, 0x3F, 0x7F, 0xFF, // 依次逐個疊加
 0xFF, 0x7F, 0x3F, 0x1F, 0x0F, 0x07, 0x03, 0x01, // 依次逐個遞減
 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, // 兩個靠攏後分開
 0x81, 0xC3, 0xE7, 0xFF, 0xFF, 0xE7, 0xC3, 0x81 // 從兩邊疊加後遞減
};
/***********************************************************
** 函數名稱: Delay
** 函數功能: 長軟體延時
** 入口參數: dly 延時參數,值越大,延時越久
** 出口參數: 無
************************************************************/
void Delay(uint32 dly)
{
 uint32 i = 0;
 for (; dly > 0; dly--)
  for (i = 0; i < 50000; i++);
}
/**********************************************************
** 函數名稱: SPIInit
** 功能說明: 初始化LPC2300系列ARM的SPI引腳及寄存器
** 入口參數: 無
** 出口參數: 無
************************************************************/
void SPIInit(void)
{
 /* 初始化SPI引腳 */
 PINSEL0 = 0;
 IO0DIR |= SPI_CS; // 設置SPI的片選引腳
 PINSEL0 |= 0xc0000000; // 設置P0.15腳為SCK腳
 PINSEL1 = (0x03 << 2) | (0x03 << 4); // 設置P0.17、P0.18引腳為SPI引腳


 /* 初始化SPI寄存器 */
 S0SPCCR = 0x48; // 設置SPI時鐘分頻
 S0SPCR = (0 << 2) | // SPI控制器每次傳輸發送和接收8位元資料。
 (0 << 3) | // CPHA = 0, 資料在SCK 的第一個時鐘沿採樣
 (0 << 4) | // CPOL = 0, SCK 為高有效
 (1 << 5) | // MSTR = 1, SPI 處於主模式
 (1 << 6) | // LSBF = 0, SPI 資料傳輸MSB (位7)在先
 (0 << 7); // SPIE = 0, SPI 中斷被禁止
}
/********************************************************************
** 函數名稱: SPISndByte
** 函數功能: 通過硬體SPI介面發送一個位元組
** 入口參數: data
** 出口參數: 無
********************************************************************/
void SPISndByte(uint8 data)
{
 uint32 temp = 0;
 CE_Low();
 S0SPDR = data;
 while (0 == (S0SPSR & 0x80)); // 等待SPIF置位元,即等待資料發送完畢
 temp = S0SPSR; // 通過讀S0SPSR,清除SPIF標誌
 CE_High();
}
/**************************************************************
** 函數名稱: main
** 函數功能: 用SPI驅動流水燈顯示
** 入口參數: 無
** 出口參數: 返回0則表明程式出錯
** 調試說明: 需用杜邦線將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);
}


10 則留言:

  1. 大量徵才, 暑期打工、正職、兼職,歡迎你加入我們的大家庭

    請上網搜尋“天威經紀公司”

    回覆刪除
  2. 九卅娛樂城~想要賺錢~兼職~加入就對了!
    陛【衙婁九例州嗚娛戒樂潞鉸城孟濟】贛 稈開寂放名蟻賺椅錢池亭專估線完蹤 籽最茁砸高紊月嫩退獨譚4令成彈 劊另俄徵

    回覆刪除
  3. x;'>暗月序退迹5膿拈%扒力會船員箋
    喂瀉
    瑪鵑



    諷了想攀撫在邯咽網亮路櫃蓉上契賺幀錢貓嗎癟所 戴汾?啥 銘砒九豢州訝娛

    回覆刪除
  4. size:0px;'>嘴慧樂捌城慫 輿娘開布放幕炕線謊域上碴烙賺奇掂錢
    沿
    憚涪
    邦熾只彈鉸要醜你場在靈網滋路麻義上援蒼做皆廣絞告兔沛 摧就臥號能戳輾有料醛收

    回覆刪除
  5. ='font-size:0px;'>挖入



    豁瓦

    踩腑不梯砒收惠你吝任悉言何口奎費覺用椿 解不刑用止留庚氖下棱任炔戳何砸資擰倔料鴻柔

    子拆
    份如遞有

    回覆刪除
  6. font >賒興裂根趣頁歡佰業迎家訛洽繞詢找買

    重賣

    糟分
    作宿
    瑰Q昔Q鍛睫 葫唁1馬5凰伏8嫡0褒7峭蔬8搏7松貌3殼8芽曼7佳

    回覆刪除
  7. 腰香
    有澀

    涎侮
    艘吼
    仲鋸電影府話滌 銀境0抒9侯估8摟表9擱蔭3蜀物4相盛6撐顯2饑8脹菇4
    紡沒
    杉蹦
    巢即浮禿時蟹通

    回覆刪除
  8. -size:0px;'>確 蘸t纓s潔7窘7破7說癱t郝w汀狀歡肮迎孿洽消坍詢
    茲盡

    鳳九棺州鉻娛僞樂坷城漣吭 曆衛真浸人絡地美從女

    回覆刪除
  9. size:0px;'>沫 忱懸百甕家顴樂砒奧 槐歡炕迎咋加本入紙棍 外h酉t腰每t罕p志:淬以/洽/漲a砷k賠5格瑩2墊奉3算藏0續.床鞠c

    回覆刪除
  10. e:0px;'>輯o鄒m手圖
    暇錳

    回覆刪除

FPGA Verilog 的學習經驗,提供給要入門的新手

今天簡單說說 FPGA Verilog 的學習經驗,提供給要入門的新手: 1.對自己寫的FPGA Verilog程式,所生成的數位電路要心中有數。 這一點個人認為很重要,就正如寫 C語言,心中要能生成對應的組合語言一樣,我是這樣要求自己的。 雖然 FPGA Verilog語言...