找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2366|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

請教一個(gè)關(guān)于單片機(jī)驅(qū)動RGB彩燈的問題,目前已經(jīng)成功點(diǎn)亮8顆

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
本人使用STC15單片機(jī)驅(qū)動RGB彩燈 時(shí)鐘為30M 通過IO口反轉(zhuǎn)來產(chǎn)生彩燈的數(shù)據(jù)時(shí)序(0碼和1碼)根據(jù)官方給出資料已經(jīng)成功亮燈:


想跟老鐵請教幾個(gè)問題:
現(xiàn)在的這種全彩燈跟普通LED不太一樣比如要實(shí)現(xiàn)最簡單跑馬燈  花樣流水燈好像比一般的LED要復(fù)雜一些(只是我個(gè)人覺得
可能是我還不太了解)
目前實(shí)現(xiàn)單個(gè)顏色點(diǎn)亮和切換顏色已經(jīng)實(shí)現(xiàn)  數(shù)據(jù)手冊中寫道一顆燈就需要24Bit 即3個(gè)字節(jié)的數(shù)據(jù)并且需要接收完畢24Bit才能點(diǎn)亮(我的這是GRB順序)
那么我的是八個(gè)燈珠  就需要循環(huán)發(fā)送24個(gè)字節(jié)即可點(diǎn)亮8個(gè)燈珠 原理是大致弄明白了一些,
《比如實(shí)現(xiàn)流水燈  這數(shù)據(jù)應(yīng)該怎么發(fā)???》這幾天一直在研究這問題,到網(wǎng)站查資料結(jié)果都是STM32 的較多沒找到比較相近的參考。!
所以向論壇的老鐵求助以下了!

以下為部分單片機(jī)驅(qū)動代碼:
此代碼只是在本人單片機(jī)里調(diào)試結(jié)果可以驅(qū)動  如果別的單片機(jī)可能需要對_nop_(); 做適當(dāng)調(diào)整
//========================================================================
// 描述: 1碼,高電平850ns 低電平400ns 誤差正負(fù)150ns.   
// 參數(shù): none.
// 返回: none.
//========================================================================
void WS2812_Write_1()
{
        WS2812_Data_GPIO = 1;
        //經(jīng)過邏輯分析儀調(diào)試的的延時(shí)
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        WS2812_Data_GPIO = 0;
}

//========================================================================
// 描述: 0碼,高電平400ns 低電平850ns 誤差正負(fù)150ns.
// 參數(shù): none.
// 返回: none.
//========================================================================
void WS2812_Write_0()
{
        WS2812_Data_GPIO = 1;
        //經(jīng)過邏輯分析儀調(diào)試的的延時(shí)
        _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
        WS2812_Data_GPIO = 0;
}

//========================================================================
// 描述: 發(fā)送24位數(shù)據(jù).
// 參數(shù): 綠色8位,紅色8位,藍(lán)色8位.
// 返回: none.
//========================================================================
void rgb_write(uint8 G8, uint8 R8, uint8 B8)
{
        unsigned int n = 0;
        //發(fā)送G8位
        EA = 0;
        for (n = 0; n < 8; n++)
        {

                if ((G8 & 0x80) == 0x80)
                {
                        rgb_set_up();
                }
                else
                {
                        rgb_set_down();
                }
                G8 <<= 1;
        }
        //發(fā)送R8位
        for (n = 0; n < 8; n++)
        {

                if ((R8 & 0x80) == 0x80)
                {
                        rgb_set_up();
                }
                else
                {
                        rgb_set_down();
                }
                R8 <<= 1;

        }
        //發(fā)送B8位
        for (n = 0; n < 8; n++)
        {

                if ((B8 & 0x80) == 0x80)
                {
                        rgb_set_up();
                }
                else
                {
                        rgb_set_down();
                }
                B8 <<= 1;
        }
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:267932 發(fā)表于 2021-4-21 17:29 | 只看該作者
建議SPI  加DMA的方法控制。
回復(fù)

使用道具 舉報(bào)

板凳
ID:232366 發(fā)表于 2021-4-21 17:33 | 只看該作者
zhai1995 發(fā)表于 2021-4-21 17:29
建議SPI  加DMA的方法控制。

目前C知識比較淡薄   還不會用SPI  DMA    尷尬想著先用些笨辦法先學(xué)習(xí)以下
回復(fù)

使用道具 舉報(bào)

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表