- 打卡等级:偶尔看看III
- 打卡总天数:51
- 最近打卡:2025-05-02 10:07:51
超级版主
- 积分
- 12079
|
发表于 2022-12-16 11:06:28
|
显示全部楼层
用PWM输出,并且用while等待,不如直接用IO输出,反正都是在那里里等待。
//@24MHz
sbit DIN = P0^0; //任意IO, 注意要在程序开始初始化IO为推挽输出
void Send_1us(void)
{
NOP(16); // 6+16T @24MHz, 实际14~40MHz均可驱动
}
void Send_color(u8 color) //发送一个字节颜色值
{
u8 i;
i = 8;
do
{
EA = 0; //发送时禁止中断
if((color & 0x80) != 0) //数据1
{
DIN = 1;
Send_1us();
DIN = 0; //1T
EA = 1; //1T 发送完一个位数据后允许中断, 但任何中断处理时间要小于RES的50us.
NOP(4); //4T @24MHz
}
else
{
DIN = 1;
NOP(5); // 6T @24MHz, 14~44MHz均可驱动
DIN = 0;
EA = 1; //发送完一个位数据后允许中断, 但任何中断处理时间要小于RES的50us.
Send_1us();
}
color <<= 1;
}
while(--i != 0);
}
void Send_GRB(u8 g, u8 r, u8 b)
{
Send_color(g);
Send_color(r);
Send_color(b);
}
|
|