P9813驅動RGB燈珠 1 P9813簡介及特點:2 P8913常見接線圖因為所有的顏色都是由三原色組合而成,這個RGB彩燈就是讓我們給它紅綠藍三種不同比例就可以顯示出各種顏色。R:red (紅色) G:green(綠色)B:blude(藍色)。驅動芯片負責把三種顏色的顏色系數給到燈珠,燈珠就會顯示彩色。三原色國際色卡自行百度。 3 驅動時序圖及工作參數- 前32 位“0”為起始幀,在Cin 上升沿時打入,并且時序DIN要先于CIN;
② 標志位為兩個“1”;
③ 校驗數據“B7’”與“B6’”為藍色灰度數據的“B7”與“B6”的反碼;
④ 灰度級數據要高位先入,并且是藍綠紅順序。
由此可得,MCU需要發送的數據 32位0起始信號: 0000 0000 0000 0000 0000 0000 0000 0000 第一點32位灰度數據: 11B7’B6’ G7’G6’R7’R6’ xxxx xxxx xxxx xxxx xxxx xxxx 第二點32位灰度數據: 11B7’B6’ G7’G6’R7’R6’ xxxx xxxx xxxx xxxx xxxx xxxx (紅色碼 綠色碼 藍色碼)
可見需要延時操作,單片機執行匯編代碼需要時間,所以延時不用太久1us就行。 此外,單片機要發送的數據為
4 驅動思路4.1 發送一位數據:DIN=0/1 //數據線準備數據 CIN=0 延時 CIN=1 延時 //時鐘線拉高后變低,數據傳輸到芯片內
4.2 發送32位數據發送32位數據 For(i=0;i<32;i++) { 發送一位數據: } 5 實戰代碼5.1 整合3個三原色數據到一個變量。u32 Color_Data(unsigned int r,unsigned int g,unsigned int b) //寫入三個八位的值,返回一個32位的數值 { u32 temp=0;
temp |=0x03<<30; //0xc0--> 1100 0000 1010 1010 temp |= ((~b)&0xc0)<<22; //取藍色最高兩位取反,得到B7’ B6’ temp |= ((~g)&0xc0) <<20; //取綠色最高兩位取反,得到G7’G6’ temp |= ((~r)&0xc0) <<18; //取綠色最高兩位取反,得到R7’R6’ temp |= b<<16; temp |= g<<8; temp |= r<<0;
return temp; }
5.2 MCU發送數據到芯片void RGB_Send_Data(u32 data) { unsigned int i; for(i=0;i<32;i++) { //取data的最高位,如果是1就寫1(注意按位操作是寫16進制) if(data&0x80000000)//準備一位數據 { RGB_DATA_H; } else { RGB_DATA_L; //否則寫0 } data<<=1;//每取出一個數據,讓次高位變成最高位,遍歷整個32位的data值 RGB_CLK_L; Delay_us(1); RGB_CLK_H; Delay_us(1); /*以上四步操作令CLK產生上升沿*/ } }
5.3 最終的控制函數void RGB_Color_Control(unsigned int r,unsigned int g,unsigned int b) { u32 color_data; color_data= Color_Data(r,g,b) ;
RGB_Send_Data(0);//先發送32位低電平起始信號 RGB_Send_Data(color_data); //發送第一個32位灰度數據 RGB_Send_Data(color_data); //發送第二個32位灰度數據
}
5.4 IO口初始化略(推挽輸出)
0.png (47.93 KB, 下載次數: 70)
下載附件
2018-10-13 15:19 上傳
全部資料51hei下載地址:
P8913驅動RGB彩燈(stm32F1為例).zip
(1.07 MB, 下載次數: 72)
2018-10-13 09:48 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|