【LiteOS】12-移植-LCD屏

此笔记由个人整理

华为IOT LiteOS开发实战营

第六天

一、显示图片

图片编码

  • 使用画图软件打开想要显示的图片
  • 将图片的分辨率调整为240*240
  • 可以通过软件查出想显示位置的像素坐标
  • 在Image2lcd软件中将图片转化为c文件

image-20200601234336295

  • 设置最大宽度和高度,选择高位在前,16位色rgb565
  • 保存到任意文件夹
  • 将文件夹中的c文件拖入vscode

  • 在gcc目录下的project.mk中为c文件添加路径,改为c文件的名称

image-20200601233236659

具体步骤

  • 创建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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值