|
楼主 |
发表于 2024-1-8 10:06:06
|
显示全部楼层
有的,最简单的就是直接IO输出,STC8系列这种1T单片机,都要加延时才行。下面是24MHz主频的程序,超简单:
void Send_1us(void)
{
NOP(16); // 6+16T @24MHz
}
sbit DIN = P0^0;
void Send_byte(u8 color) // 发送一个字节
{
u8 i;
i = 8;
do
{
EA = 0; //发送时禁止中断
if((color & 0x80) != 0) //数据1
{
DIN = 1;
Send_1us();
DIN = 0;
EA = 1; //发送完一个位数据后允许中断, 但任何中断处理时间要小于RES的50us.
NOP(6); // 6T @24MHz,
}
else //数据0
{
DIN = 1;
NOP(6); // 7T @24MHz,
DIN = 0;
EA = 1; //发送完一个位数据后允许中断, 但任何中断处理时间要小于RES的50us.
Send_1us();
}
color <<= 1;
}
while(--i != 0);
}
void Send_GRB(u8 g, u8 r, u8 b)
{
Send_byte(g);
Send_byte(r);
Send_byte(b);
} |
|