此笔记由个人整理
华为IOT LiteOS开发实战营
第六天
一、显示图片
图片编码
- 使用画图软件打开想要显示的图片
- 将图片的分辨率调整为240*240
- 可以通过软件查出想显示位置的像素坐标
- 在Image2lcd软件中将图片转化为c文件
- 设置最大宽度和高度,选择高位在前,16位色rgb565
- 保存到任意文件夹
- 将文件夹中的c文件拖入vscode
- 在gcc目录下的project.mk中为c文件添加路径,改为c文件的名称
具体步骤
- 创建lcd显示任务
static int lcd_task_entry()
{
while (1)
{
}
}
- 开始声明之前产生的图片代码数组
extern const unsigned char gImage_xianshi[7200];
- 在显示任务中使用函数,最后一个参数是声明数组的名称
LCD_Show_Image(0,0,240,240,gImage_xianshi);
osal_task_sleep(2*1000);
- 在主函数中添加lcd显示任务
osal_task_create("image display",lcd_task_entry,NULL,0x400,NULL,4);
二、显示数据
显示数字
void LCD_ShowNum(uint16_t x, uint16_t y, uint32_t num, uint8_t len, uint8_t size);
显示字符串
void LCD_ShowString(uint16_t x, uint16_t y, uint16_t width, uint16_t height, uint8_t size, char *p);
- 传感器数据显示
static int lcd_task_entry()
{
LCD_Show_Image(0,0,240,240,gImage_xianshi);
LCD_ShowString(175, 198, 210, 32, 32,"OFF");
LCD_ShowString(83, 198, 210, 32, 32,"OFF");
while (1)
{
// 传感器数据对应图片位置:
LCD_ShowNum(90, 62,(uint32_t)E53_IA1_Data.Temperature, 5, 32);
LCD_ShowNum(90, 105,(uint32_t)E53_IA1_Data.Humidity, 5, 32);
LCD_ShowNum(90, 152,(uint32_t)E53_IA1_Data.Lux, 5, 32);
osal_task_sleep(2*1000);
}
}
- 控制状态显示,在接收控制函数中移植
static int app_cmd_task_entry()
{
int ret = -1;
tag_Res_Con_Light Response_Agriculture_Control_Light;
tag_Res_Con_Motor Response_Agriculture_Control_Motor;
tag_app_Con_Light *Agriculture_Control_Light;
tag_app_Con_Motor *Agriculture_Control_Motor;
int8_t msgid;
while(1)
{
if(osal_semp_pend(s_rcv_sync,cn_osal_timeout_forever))
{
msgid = s_rcv_buffer[0] & 0x000000FF;
switch (msgid)
{
case cn_Con_Light:
Agriculture_Control_Light = (tag_app_Con_Light *)s_rcv_buffer;
printf("Agriculture_Control_Light:msgid:%d mid:%d,state:%s\n", Agriculture_Control_Light->messageId, ntohs(Agriculture_Control_Light->mid),Agriculture_Control_Light->Light);
/********** code area for cmd from IoT cloud **********/
if (Agriculture_Control_Light->Light[0] == 'O' && Agriculture_Control_Light->Light[1] == 'N')
{
HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_SET);
LCD_ShowString(175, 198, 210, 32, 32,"ON ");//灯开
}
if (Agriculture_Control_Light->Light[0] == 'O' && Agriculture_Control_Light->Light[1] == 'F' && Agriculture_Control_Light->Light[2] == 'F')
{
HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET);
LCD_ShowString(175, 198, 210, 32, 32,"OFF");//灯关
}
/********** code area end **********/
break;
case cn_Con_Motor:
Agriculture_Control_Motor = (tag_app_Con_Motor *)s_rcv_buffer;
printf("Agriculture_Control_Motor:msgid:%d mid:%d,state:%s\n", Agriculture_Control_Motor->messageId, ntohs(Agriculture_Control_Motor->mid),Agriculture_Control_Motor->Motor);
/********** code area for cmd from IoT cloud **********/
if (Agriculture_Control_Motor->Motor[0] == 'O' && Agriculture_Control_Motor->Motor[1] == 'N')
{
HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_SET);
LCD_ShowString(83, 198, 210, 32, 32,"ON ");//马达开
}
if (Agriculture_Control_Motor->Motor[0] == 'O' && Agriculture_Control_Motor->Motor[1] == 'F' && Agriculture_Control_Motor->Motor[2] == 'F')
{
HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET);
LCD_ShowString(83, 198, 210, 32, 32,"OFF");//马达关
}
/********** code area end **********/
break;
default:
break;
}
}
}
return ret;
}