大伙,我想问下,我现在有条灯带,上面有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要怎么整,请大伙给我讲讲,谢谢.
|