【Código Aberto】 Kit de Desenvolvimento IoT Multifuncional Baseado no Chip T5L

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

11

Design de interface do usuário

530 32 36

Design de interface gráfica do usuário

13

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