久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2022|回復: 8
收起左側

定時器中斷控制RGB燈帶

[復制鏈接]
ID:1041297 發表于 2022-8-16 09:31 | 顯示全部樓層 |閱讀模式
大伙,我想問下,我現在有條燈帶,上面有30顆燈,
手冊是這樣的
T0H    0碼,高電平時間  0.3
T1H    1碼,高電平時間  0.9
T0L     0碼,低電平時間 0.9
T1L     1碼,低電平時間 0.3

Trst     Reset碼,低電平時間   80

輸出0的話就是一個T0H和一個T0L(占空比)
輸出1的話就是一個T1H和一個T1L(占空比)

現在要用定時器中斷實現這個過程,就是他這個0.3us我在定時器寫出來了,應該是這樣
void inital_Timer3()
{
        TH3=(65536-5)>>8;
        TL3=(65536-5);
        T3CON=0x04; //打開中斷
       
}

然后三十顆燈我給了一個數組,全亮藍色,最終的結果要的是一直亮藍色
uint8_t rgb_data[90]=
{
        0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,
        0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,
        0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0XFF,
};


然后我一個位一個位的移給燈,一個RGB燈是24位
void Blue_Control(uint8_t *rgb_data)
{
        uint8_t i,j,temp,z;
       
                for(i=0;i<90;i++)
                {
                        temp=rgb_data[i];
                        for(j=0;j<8;j++)   //一個十六進制有8位
                        {
                                z=(temp&0x80);//每次取高位,每取完一次就左移
                                if(z)   //為真就是邏輯1,那就是1的占空比比較大,就會輸出1
                                {
                                        P0_6=1;
                                        //inital_Timer3();
                                        //inital_Timer3();
                                        //inital_Timer3();
                                        P0_6=0;
                                        //inital_Timer3();
                                }
                                else//為假就是邏輯0,那就是0的占空比比較大,就會輸出0
                                {
                                        P0_6=1;
                                        //inital_Timer3();
                                        P0_6=0;
                                        //inital_Timer3();
                                        //inital_Timer3();
                                        //inital_Timer3();
                                }
                                temp=temp<<1; //左移
                        }
                }
}

請問怎么在中斷里面實現這個全亮的過程,還有他這個0.3us又不能寫在這些電平后面,不知道0.3us要怎么整,請大伙給我講講,謝謝.

回復

使用道具 舉報

ID:99525 發表于 2022-8-16 12:19 | 顯示全部樓層
時序看著跟ws2812差不多,可以參考ws2812的代碼
回復

使用道具 舉報

ID:213173 發表于 2022-8-16 17:07 | 顯示全部樓層
0.3us這么短的延時只能用連續_nop_();實現,不宜使用定時器中斷。
回復

使用道具 舉報

ID:624769 發表于 2022-8-16 23:48 | 顯示全部樓層
通常,中斷觸發需要 1個時鐘, PC 入棧1個時鐘, PC 出戰 1個時鐘, 跳轉到中斷 2個時鐘 中斷 返回 最少要2個時鐘, 這么一來,不算中斷執行時間,不算保護現場的時間,最快的速度, 7個時鐘就沒了, 你單片機什么速度,0.3us 用定時器中斷來操作?
回復

使用道具 舉報

ID:1041297 發表于 2022-8-17 08:30 | 顯示全部樓層
wulin 發表于 2022-8-16 17:07
0.3us這么短的延時只能用連續_nop_();實現,不宜使用定時器中斷。

nop不是一個1us嗎
回復

使用道具 舉報

ID:1041297 發表于 2022-8-17 08:33 | 顯示全部樓層
雪玉寐影 發表于 2022-8-16 12:19
時序看著跟ws2812差不多,可以參考ws2812的代碼

對,就是ws2812的
回復

使用道具 舉報

ID:161164 發表于 2022-8-17 09:17 | 顯示全部樓層

12T單片機 12Mhz才是1nop 1us
回復

使用道具 舉報

ID:123289 發表于 2022-8-17 09:34 | 顯示全部樓層
構思不太好!
看看這樣行不行:
1、用5個字節(40位)表示燈珠的【顯示狀態】:
    前30位(S30)用1/0對應30個燈珠的明暗,
   后10位(T10) 用數字表求此狀態顯示保持的時間。
2、將所有顯示狀態分成N組,每組【顯示狀態】用上述5個字節表達。
例如:全亮X秒:5個字節 = 11111111,11111111,11111111,111111??,???????;
例如:全暗X秒:5個字節 = 00000000,00000000,00000000,000000??,???????。
         ????????? = 時間 = X秒
處理:
1、中斷服務程序:用一個變量(TE)計時,當計時結束時,做個標記:B_TE=1。
2、主程序:當B_TE=1時,做下列事:(B_TE=0,啥也不做,B_TE=1是上次顯示結束了)
     2.1、清除B_TE=0,準備下次再用(表示本次已在顯示過程中);
     2.2、取出下一個【顯示狀態】5個字節,將其中的T10放入TE中計時(這是本次狀態顯示的時間)。
     2.2、將其中的S30送出顯示(這是本次30個燈珠明暗顯示狀態)。
             消隱技巧(有總閘時):關總閘 - 送數 - 開總閘。
如此,程序非常簡單,顯示極其靈活:
樓主只要將需要顯示狀態、時間,分分節拍,每個節拍做成5個字節,形成一個顯示庫。
再從庫從依序取數(5個字節)、操作,想顯示什么就顯示什么,顯示內容修改、設計都很方便。移位、斜行、漢字、動畫都不在話下。燈帶、方陣列隨便玩。
樓主:你看這個方案如何?
編程不在寫程序,而在方案、架構的設計。
回復

使用道具 舉報

ID:213173 發表于 2022-8-17 09:37 | 顯示全部樓層

你這是指12M時鐘12T單片機的一個_nop_();延時時間,如果選用更高時鐘頻率的1T單片機,一個機器周期就得另算了。例如:24MHz時鐘1T單片機的一個_nop_();延時時間約0.04167us。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品免费观看 | 天天操天天天 | 亚洲激情专区 | 国产精品久久久久久久久久免费看 | 免费成人在线网站 | 欧洲精品一区 | www.日韩免费 | 99精品久久99久久久久 | 欧美日韩一区二区在线 | 色资源在线 | 久久国产婷婷国产香蕉 | 日韩欧美一级精品久久 | 国产电影一区 | 国产一区二区三区免费 | 久久综合狠狠综合久久 | 久久精品一区二区三区四区 | 三级在线观看 | 国产精品免费高清 | 浮生影院免费观看中文版 | 欧美日韩视频在线 | 精品国产一区二区三区久久久蜜月 | 精品日韩一区二区三区av动图 | 久久久久国产 | 二区在线观看 | av超碰 | 超碰美女在线 | 国产精品久久久久久婷婷天堂 | 香蕉久久久久久 | 欧美精品欧美精品系列 | 91精品久久久久久久久中文字幕 | 国产精品免费一区二区三区四区 | 日韩一区二区三区在线视频 | 综合久久综合久久 | 亚洲小视频在线观看 | 久久不射电影网 | 天天操天天干天天曰 | 国产精品久久久久久av公交车 | 巨大荫蒂视频欧美另类大 | 精品国产欧美一区二区三区成人 | 国产精品一区二区欧美 | 99综合 |