初级会员
- 积分
- 189
- 金钱
- 189
- 注册时间
- 2020-1-18
- 在线时间
- 40 小时
|
左老师为阿尔法开发板编写的配套教程非常好,能看得出左老师的用心,真的非常适合初学者学习。老师教材编的好,学生也能看懂,但是实践才是检验真理的唯一途径。所以,为了检查自己到底有没有真正理解书本中的知识,对配套的裸机例程加了一些显示汉字和图片的小功能。现在把程序分享给大家,希望能对这方面感兴趣的小伙伴有帮助。我是在RTC实时时钟实验的基础之上添加的LCD显示中文汉字与图片功能,下面是路人设计师设计的界面:
图片的取模软件是用的Image2Lcd,具体参数配置请看下面的截图:
汉字的取模软件是用《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)
|
|