OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4885|回复: 2

I.MX6裸机,添加LCD显示中文汉字与图片功能

[复制链接]

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
189
金钱
189
注册时间
2020-1-18
在线时间
40 小时
发表于 2020-3-21 22:34:13 | 显示全部楼层 |阅读模式
       左老师为阿尔法开发板编写的配套教程非常好,能看得出左老师的用心,真的非常适合初学者学习。老师教材编的好,学生也能看懂,但是实践才是检验真理的唯一途径。所以,为了检查自己到底有没有真正理解书本中的知识,对配套的裸机例程加了一些显示汉字和图片的小功能。现在把程序分享给大家,希望能对这方面感兴趣的小伙伴有帮助。我是在RTC实时时钟实验的基础之上添加的LCD显示中文汉字与图片功能,下面是路人设计师设计的界面:
微信图片_20200321220314.jpg


图片的取模软件是用的Image2Lcd,具体参数配置请看下面的截图:
image2Lcd.JPG

      汉字的取模软件是用《I.MX6U嵌入式Linux驱动开发指南V1.2》里面提到的PCtoLCD2002,具体参数配置和使用方法请参考开发指南。

      中文汉字和图片的显示用到两个函数,我把源码贴出来,大家把源码随意加到程序中,用这两个函数的时候,别忘#include "bsp_lcdapi.h"。我把main.c和界面用到的中文和图片取模.h文件都放到附件,大家可以把main.c替代《I.MX6U嵌入式Linux驱动开发指南V1.2》第二十五章配套例程的main.c。再加上这两个函数和.h文件就可以显示图片中的界面了。还有一点,这两个函数没问题,但是main.c里面有一个小小的BUG,留给喜欢动手的小伙伴去解决吧。

/*
* @description             : 在指定位置显示一幅图像
* @param - x_point         : 起始坐标X轴
* @param - y_point         : 起始坐标Y轴
* @param - image_x         : 图片长度(像素)
* @param - image_y         : 图片宽度(象素)
* @param - pic_name : 图片数组名称
* @return                      : 无
*/

unsigned char lcd_showimage(unsigned short x_point, unsigned short y_point, unsigned char* pic_name)
{
   unsigned short x,y;
   unsigned int i = 8;
   unsigned int temp;
   unsigned short image_x = 0,image_y = 0;

   image_x = image_x + *(pic_name+3);
   image_x = (image_x<<8) | *(pic_name+2);

   image_y = image_y + *(pic_name+5);
   image_y = (image_y<<8) | *(pic_name+4);

   for(y=y_point;y<=(image_y+y_point-1);y++)
   {
       for(x=x_point;x<=(image_x+x_point-1);x++)
       {
           if(x>tftlcd_dev.width)return 1;         
           temp = 0;
           temp = *(pic_name+i);
           i++;
           temp =  temp + (*(pic_name+i)<<8);
           i++;
           temp =  temp + (*(pic_name+i)<<16);
           i++;
           lcd_drawpoint(x,y,temp);           
       }
   }
   return(0);
}



/*
* @description                   : 在指定位置显示一个汉字
* @param - x                   : 起始坐标X轴
* @param - y                   : 起始坐标Y轴
* @param - arr_name   : 字模数组名称
* @param - Tsize         : 每个汉字字模占用多少字节
* @param - Csize         : 字体大小
* @param - num          : 汉字字符在字模数组中的索引
* @return                    : 无
*/

void lcd_hanzi(unsigned short x, unsigned short y, unsigned char* arr_name,  unsigned short Tsize, unsigned short Csize, unsigned short num)
{                                                            
    unsigned int temp, t1, t;
        unsigned short y0 = y;
       
        for(t = 0; t < Tsize; t++)
        {                  
                temp = *(arr_name+num*Tsize+t);                       
                for(t1 = 0; t1 < 8; t1++)
                {                            
                        if(temp & 0x80)lcd_drawpoint(x, y, tftlcd_dev.forecolor);
                    else
                        lcd_drawpoint(x, y, tftlcd_dev.backcolor);
                        temp <<= 1;
                        y++;
                        if(y >= tftlcd_dev.height) return;                        /* 超区域了 */       
                        if((y - y0) == Csize)
                        {
                                y = y0;
                                x++;
                                if(x >= tftlcd_dev.width) return;                /* 超区域了 */
                                break;
                        }
                }           
        }                                                    
}

Img2Lcd图片取模软件.zip (485.35 KB, 下载次数: 2)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2020-3-23 12:14:43 | 显示全部楼层
不错不错,点个赞,多谢分享
回复 支持 反对

使用道具 举报

2

主题

712

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2178
金钱
2178
注册时间
2018-8-27
在线时间
258 小时
发表于 2020-3-23 13:11:38 | 显示全部楼层
楼主666啊!
森罗万象
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 07:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表