基本介紹
- 中文名:LPD1109
- 發同步幀:將Din線置低電平。
- 程式C代碼://#define
- 傳送數據:控制9路LED,
使用手冊,發同步幀,傳送數據,結連,發同步幀,傳送數據,結連方式,
使用手冊
發同步幀
1:將Din線置低電平。
2:連續從CLKin記腳給出32個脈衝。
傳送數據
1:LPD1109一個IC可以控制9路LED,每一路LED是通過一個位元組的數據來控制它的亮度的(即一路LED有256種亮度,它是通過PWM的形式來控制的)
2:每發3個位元組的數據之前先得發一個高電平的起始位
3: 在時鐘線為低電平時放好數據,在時鐘上升沿發出數據(晶片是在時鐘上升沿採樣數據的)
4:每一次發同步幀都是新一輪數據的開始
結連
1:若有n個晶片結連,同步幀後的前9位元組數送入第一個晶片,第二個9位元組數送入第二個晶片,第三個9位元組數送入第三個晶片等等,依此類推第n個9位元組數送入第n個晶片。
2:若要在第n個晶片上顯示你要顯示的數據;你需先送完同步幀,再送n個9位元組數的內容(不需改變顯示的IC的9位元組數不要變,維持原數即可),最後再送一位元組的任意數即可。
發同步幀
1:將Din 線置低電平
2:連續從CLKin 記腳給出32 個脈衝
32個0起始位,注意事項起始位必須是32位的0,多了少了都出錯
傳送數據
1:LPD1109 一個IC 可以控制9 路LED,每一路LED 是通過一個位元組的數據來控制它的亮度的(即一路
LED256 種亮度,它是通過PWM 的形式來控制的)
2:每發3 個位元組的數據之前先得發一個高電平的起始位
3:在時鐘線為低電平時放好數據,在時鐘上升沿發出數據(晶片是在時鐘上升沿採樣數據的)
4:每一次發同步幀都是新一輪數據的開始發了起始位後,後面數據就是"1" + 8BIT RED + 8BITGREEN + 8BIT BLUE +"1" + 8BIT RED + 8BITGREEN + 8BIT BLUE + "1"+ 8BIT RED + 8BITGREEN+ 8BITBLUE (1個IC的數據到此發完)+ 下一個IC的3個點的RGB數據......全部點傳完後,最好在最後一個點後面再追加一個IC的數據(就是3個點的RGB數據),是要把前面的數據擠出去而追加的這個數據,這個數據是3個點的RGB數據就是了,而最後一個IC的數據就是3個25BIT,可以最好全是1
結連方式
1:若有n 個晶片結連,同步幀後的前9 位元組數送入第一個晶片,第二個9 位元組數送入
第二個晶片,第三個9 位元組數送入第三個晶片等等,依此類推第n 個9 位元組數送入第
n 個晶片。
2:若要在第n 個晶片上顯示你要顯示的數據;你需先送完同步幀,再送n 個9 位元組數
的內容(不需改變顯示的IC 的9 位元組數不要變,維持原數即可),最後再送一位元組的
任意數即可。
參考程式C代碼:
//#define Data_in P1_0
//#define Data_clk P1_1
void DELAY_xus(uchar dd)
{
while(dd--);
}
void Send_Begin(void)// 發同步幀
{
uchar i;
Data_clk = 0;
Data_in = 1;
////////////////////////////
DELAY_xus(1);
Data_clk = 1;
Data_clk = 0;
//////////////////////////////////
Data_in = 0; //將Din線置低電平
for(i=0;i<PUB_Flage;i++)// 發所需脈衝數
{
Data_clk = 0;
///////////////////////////////////
Data_clk = 1;
/////////////////////////////////
}
Data_in = 0;
Data_clk = 0;
}
void Send_start_Bit(void)//發一個高電平的起始位
{
Data_clk = 0;
Data_in = 1;
/////////////////////////////////
DELAY_xus(1);
Data_clk = 1;
Data_clk = 0;
///////////////
//DELAY_xus(1);///////////////
}
void Send_Data(uchar *dd,uchar len)// 帶同步幀發數據
{
uchar i,j;
Send_Begin();//起始幀
//////////////////////////////////////
////////////////////////////////////////
for(j=0;j<len;j++)
{
if((j%3) == 0)Send_start_Bit();
for(i=0;i<8;i++)
{
Data_clk = 0;
if(dd[j] & 0x80)Data_in = 1;
else Data_in = 0;
DELAY_xus(1);///
Data_clk = 1;
dd[j] = dd[j] << 1;
}
}
Data_in = 0;
Data_clk = 0;
}
void Send_Buff(uchar *dd,uchar len)//// 不帶同步幀發數據
{
uchar i,j;
uchar cc;
//////////////////////////////////////
////////////////////////////////////////
for(j=0;j<len;j++)
{
if((j%3) == 0)Send_start_Bit();
cc = dd[j];
for(i=0;i<8;i++)
{
Data_clk = 0;
if(cc & 0x80)Data_in = 1;
else Data_in = 0;
DELAY_xus(1);////////////////
Data_clk = 1;
cc = cc << 1;
}
}
Data_in = 0;
Data_clk = 0;
}