使用 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);
}
大量徵才, 暑期打工、正職、兼職,歡迎你加入我們的大家庭
回覆刪除請上網搜尋“天威經紀公司”
九卅娛樂城~想要賺錢~兼職~加入就對了!
回覆刪除陛【衙婁九例州嗚娛戒樂潞鉸城孟濟】贛 稈開寂放名蟻賺椅錢池亭專估線完蹤 籽最茁砸高紊月嫩退獨譚4令成彈 劊另俄徵
x;'>暗月序退迹5膿拈%扒力會船員箋
回覆刪除喂瀉
瑪鵑
假
霞
諷了想攀撫在邯咽網亮路櫃蓉上契賺幀錢貓嗎癟所 戴汾?啥 銘砒九豢州訝娛
size:0px;'>嘴慧樂捌城慫 輿娘開布放幕炕線謊域上碴烙賺奇掂錢
回覆刪除沿
憚涪
邦熾只彈鉸要醜你場在靈網滋路麻義上援蒼做皆廣絞告兔沛 摧就臥號能戳輾有料醛收
='font-size:0px;'>挖入
回覆刪除怯
笨
豁瓦
衣
踩腑不梯砒收惠你吝任悉言何口奎費覺用椿 解不刑用止留庚氖下棱任炔戳何砸資擰倔料鴻柔
耙
子拆
份如遞有
font >賒興裂根趣頁歡佰業迎家訛洽繞詢找買
回覆刪除醉
重賣
糟分
作宿
瑰Q昔Q鍛睫 葫唁1馬5凰伏8嫡0褒7峭蔬8搏7松貌3殼8芽曼7佳
腰香
回覆刪除有澀
涎侮
艘吼
仲鋸電影府話滌 銀境0抒9侯估8摟表9擱蔭3蜀物4相盛6撐顯2饑8脹菇4
紡沒
杉蹦
巢即浮禿時蟹通
-size:0px;'>確 蘸t纓s潔7窘7破7說癱t郝w汀狀歡肮迎孿洽消坍詢
回覆刪除茲盡
煎
鳳九棺州鉻娛僞樂坷城漣吭 曆衛真浸人絡地美從女
size:0px;'>沫 忱懸百甕家顴樂砒奧 槐歡炕迎咋加本入紙棍 外h酉t腰每t罕p志:淬以/洽/漲a砷k賠5格瑩2墊奉3算藏0續.床鞠c
回覆刪除e:0px;'>輯o鄒m手圖
回覆刪除暇錳