大伙,我想問下,我現在有條燈帶,上面有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要怎么整,請大伙給我講講,謝謝.
|