Nesta edição, apresentamos o premiado projeto de código aberto do Fórum de Desenvolvedores DWIN: um kit de desenvolvimento multifuncional para IoT baseado no chip T5L. Os engenheiros exploram ao máximo as diversas funções periféricas do chip T5L1, incluindo USB integrado, alto-falantes, interface de sinal PWM, iluminação RGB, módulos Wi-Fi, motores CC e outras interfaces. O kit oferece aos estudantes, testadores e desenvolvedores da área de Internet das Coisas uma plataforma de desenvolvimento flexível e eficiente, que atende às variadas necessidades de recursos de hardware dos usuários e facilita o início da jornada de exploração da Internet das Coisas para a maioria dos desenvolvedores.
【Interface periférica de PCB】
【Design de interface do usuário】
【Design de interface gráfica do usuário】
【C51Design】
(1) O código principal para exibir imagens JPG na tela é o seguinte:
void sys_draw_jpg(u16 vp,u8 *jpg_data,u32 data_len)
{
u32 i;
para(i=0;i
{
se((jpg_data==0xFF)&&(jpg_data[i+1]==0xD8))
quebrar;
}
se(i==data_len)
retornar;
comprimento_dados = (comprimento_dados-i)/2+1;
sys_write_vp(vp+2,jpg_data+i,data_len);
data_len |= 0x5AA50000;
sys_write_vp(vp,(u8*)&data_len,2);
}
(2) O programa relacionado ao display de fita RGB é o seguinte:
void rgbled_send_zero()
{
u8 i;
RGBLED_SDA = 0;
para(i=0;i
{
RGBLED_SCL = 0;
sys_delay_about_us(200);
RGBLED_SCL = 1;
sys_delay_about_us(200);
}
}
u8 rgbled_reverse_data(u8 dados)
{
que = ((~dat) & 0xC0) >> 6;
devolva isso;
}
void rgbled_send_data(u32 dat)
{
u8 i;
para(i=0;i
{
se(dat&0×80000000)
RGBLED_SDA = 1;
outro
RGBLED_SDA = 0;
que
RGBLED_SCL = 0;
sys_delay_about_us(200);
RGBLED_SCL = 1;
sys_delay_about_us(200);
}
}
//processamento de dados
void rgbled_process(u8 r,u8 g,u8 b)
{
u32 que = 0;
que |= (u32)0×03
dat |= (u32)rgbled_reverse_data(b)
dat |= (u32)rgbled_reverse_data(g)
dat |= (u32)rgbled_reverse_data(r)
que |= (u32)b
que |= (u32)g
que |= r;
rgbled_send_data(dat);
}
void rgbled_show(u8 r,u8 g,u8 b)
{
P2MDOUT |= 0x0C;
rgbled_send_zero();
rgbled_process(r, g, b);
rgbled_process(r, g, b);
}
void rgbled_init(void)
{
rgbled_show(0,0,0);
}
(3) O código do driver do protocolo iic é o seguinte.
#incluir “iic.h”
sbit IIC_SDA_PIN = P2^2;
sbit IIC_SCL_PIN = P2^3;
#define SDA_IN() P2MDOUT&=0xFB
#define SDA_OUT() P2MDOUT|=0×04
#define IIC_SCL IIC_SCL_PIN
#define IIC_SDA IIC_SDA_PIN
#define READ_SDA IIC_SDA_PIN
#define delay_us sys_delay_about_us
void IIC_Init(void)
{
P2MDOUT |= 0x0C;
IIC_SDA = 1;
IIC_SCL = 1;
}
void IIC_Start(void)
{
SDA_OUT();
IIC_SDA=1;
IIC_SCL=1;
atraso_us(4);
IIC_SDA=0;
atraso_us(4);
IIC_SCL=0;
}
void IIC_Stop(void)
{
SDA_OUT();
IIC_SCL=0;
IIC_SDA=0;
atraso_us(4);
IIC_SCL=1;
atraso_us(4);
IIC_SDA=1;
}
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();
IIC_SDA=1;atraso_us(1);
IIC_SCL=1;atraso_us(1);
enquanto(LEIA_SDA)
{
ucErrTime++;
se(ucErrTime>250)
{
IIC_Parar();
retornar 1;
}
}
IIC_SCL=0;
retornar 0;
}
vazio IIC_Ack(vazio)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=0;
atraso_us(2);
IIC_SCL=1;
atraso_us(2);
IIC_SCL=0;
}
vazio IIC_NAck(vazio)
{
IIC_SCL=0;
SDA_OUT();
IIC_SDA=1;
atraso_us(2);
IIC_SCL=1;
atraso_us(2);
IIC_SCL=0;
}
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL=0;
para(t=0;t
{
IIC_SDA=(txd&0×80)>>7;
txd
atraso_us(2);
IIC_SCL=1;
atraso_us(2);
IIC_SCL=0;
atraso_us(2);
}
}
u8 IIC_Read_Byte(u8 ack)
{
u8 i,receber=0;
SDA_IN();
para(i=0;i
{
IIC_SCL=0;
atraso_us(2);
IIC_SCL=1;
receber
se(READ_SDA)receber++;
atraso_us(1);
}
se (!ack)
IIC_NAck();
outro
IIC_Ack();
retorno recebido;
}
Data da publicação: 19 de junho de 2024









