微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > stm32控制lcd写字符,画线,汉字等

stm32控制lcd写字符,画线,汉字等

时间:12-03 来源:互联网 点击:
1、画直线算法

对于画直线,在lcd上由于显示的粒度问题,就区别到x,y轴上的步调问题。涉及到步调问题,就牵扯到,斜率问题。因此,画线算法就算将就完成了,还要注意相对于lcd来说,x,y轴又是什么一个方向。现实现一个比较粗略的画线算法。

void lcd_line(u16 x1,u16 y1,u16 x2,u16 y2,u16 Color)

{

u16 temp,x,y;

Set_direction(0);

if((x1 == x2) && (y1 == y2))

{

//画原点

LCD_open_windows(x1,y1,1,1);

}

else if(abs(y1-y2)>abs(x1-x2))

{

//走y轴,同时判断大小,进行交换

if(y1 > y2)

{

x1 ^= x2 ^= x1 ^= x2;

y1 ^= y2 ^= y1 ^= y2;

}

for( y = y1 ; y <= y2; y ++)

{

x = x1 + (y - y1) * (x2 - x1) / (y2 - y1);

LCD_ColorPoint(x ,y ,Color);

}

}

else

{

if(x1 > x2)

{

x1 ^= x2 ^= x1 ^= x2;

y1 ^= y2 ^= y1 ^= y2;

}

for( x = x1 ; x <= x2; x ++)

{

y = y1 + (x - x1) * (y2 - y1) / (x2 - x1);

LCD_ColorPoint(x ,y ,Color);

}

}

}

主要是要关注,斜率问题,以及了解lcd的属性,斜率大于1,要知道,走y轴,才能密集x轴,而不会出现一个明显的断点。

2、写ascii。

对应写ascii,可以先做一个字模,取对应的字模,如8 * 16,由于lcd写ascii的原理,主要是打点,因此,可以对A写一个简单的程序

unsigned char code_A[]=

{

/*------------------------------------------------------------------------------

;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。

;源文件/文字: A

;宽×高(像素): 8×16

;字模格式/大小:单色点阵液晶字模,横向取模,字节正序/16字节

;数据转换日期 : 2015/2/10 15:00:31

------------------------------------------------------------------------------*/

//0x08,0x10,0x01,//宽的像素数,高的像素数,宽的字节数,参数设置可选

0x00,0x00,0x00,0x08,0x08,0x0C,0x14,0x14,0x12,0x1E,0x22,0x21,0x21,0x73,0x00,0x00,

};

//8 * 16的ascii字符

void lcd_ascii(u16 x,u16 y,const u8 *str,u16 Color)

{

u8 i , j;

u8 temp;

for (i = 0;i < 16 ; i ++)

{

temp = str[i];

for(j = 0 ;j < 8 ; j ++)

{

if((temp >> (7 - j) ) & 0x01 == 0x01)

{

LCD_ColorPoint(x + (j) ,y + i,Color);

}

}

}

}

主要原理是,取得要显示的每一位值,是1写对应的值即可。

unsigned char code_A_24x48[]=

{

/*------------------------------------------------------------------------------

;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。

;源文件/文字: A

;宽×高(像素): 24×48

;字模格式/大小:单色点阵液晶字模,横向取模,字节正序/144字节

;数据转换日期 : 2015/2/10 15:09:19

------------------------------------------------------------------------------*/

//0x18,0x30,0x03,//宽的像素数,高的像素数,宽的字节数,参数设置可选

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x00,0x00,0x38,0x00,0x00,0x3C,0x00,0x00,0x7C,

0x00,0x00,0x7C,0x00,0x00,0x7C,0x00,0x00,0x6C,0x00,0x00,0xCE,0x00,0x00,0xCE,0x00,

0x00,0xCE,0x00,0x00,0xC6,0x00,0x01,0x87,0x00,0x01,0x87,0x00,0x01,0x87,0x00,0x01,

0x83,0x00,0x03,0x03,0x80,0x03,0x03,0x80,0x03,0x03,0x80,0x03,0x03,0x80,0x06,0x01,

0xC0,0x07,0xFF,0xC0,0x06,0x01,0xC0,0x06,0x01,0xC0,0x0C,0x01,0xE0,0x0C,0x00,0xE0,

0x0C,0x00,0xE0,0x0C,0x00,0xE0,0x18,0x00,0xF0,0x18,0x00,0x70,0x18,0x00,0x70,0x18,

0x00,0x70,0x38,0x00,0x78,0xFE,0x01,0xFE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

void lcd_ascii_24x48(u16 x,u16 y,const u8 *str,u16 Color)

{

u8 i,j,k;

u8 buffer[3];

for (i = 0;i < 48 ; i ++)

{

for(j = 0; j < 3 ; j ++)

{

buffer[j] = str[i * 3 + j];

}

for( j = 0; j < 3 ; j ++)

{

for (k = 0 ; k < 8 ; k++)

{

if( ( buffer[j] >> (7 - k)) & 0x01 == 0x01)

{

LCD_ColorPoint(x + 8 * (j) + k,y + i,Color);

}

}

}

}

}

3、写汉字

unsigned char yuan[]=

{

/*------------------------------------------------------------------------------

;若数据乱码,请检查字模格式设置,注意选择正确的取模方向和字节位顺序。

;源文件/文字:袁

;宽×高(像素): 48×48

;字模格式

上一篇:stm32学习之九
下一篇:stm32的RTC操作

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top