显示字符函数,该函数代码如下:
- /**********************************************/
- /* 函数功能:显示8*16点阵英文字符 */
- /* 入口参数:x,y :起点坐标 */
- /* num:字母或符号 */
- /* 注 意:x,y的取值要在240到320范围内 */
- /**********************************************/
- void LCD_ShowChar(uint16_t x,uint16_t y,uint16_t num)
- {
- uint8_t temp;
- uint8_t pos,t;
- LCD_WR_REG_DATA(0x0020,x);//设置X坐标位置
- LCD_WR_REG_DATA(0x0021,y);//设置Y坐标位置
- /*开辟显存区域*/
- LCD_XYRAM(x,y,x+7,y+15); // 设置GRAM坐标
- LCD_WR_REG(0x0022); //指向RAM寄存器,准备写数据到RAM
- num=num-' ';//得到偏移后的值
- for(pos=0;pos<16;pos++)
- {
- temp=ascii_16[num][pos];
- for(t=0;t<8;t++)
- {
- if(temp&0x80) LCD_WR_DATA(POINT_COLOR);
- else LCD_WR_DATA(BACK_COLOR);
- temp<<=1;
- }
- }
- /* 恢复显存显示区域240*320 */
- LCD_XYRAM(0x0000 ,0x0000 ,0x00EF ,0X013F); // 恢复GRAM整屏显示
- return;
- }
复制代码该函数的参数有3个x,y和num。其中s和y用于定义起始点坐标,num是ascii表的对应序号。例如我们将参数取为(100,100,100),则会以(100,100)为起始点(左上定点)开辟一个8*16的矩形,在此矩形的区域中显示出ascii码为100的字符’d’。 下面来看是如何实现的。首先: - uint8_t temp;
- uint8_t pos,t;
- LCD_WR_REG_DATA(0x0020,x);//设置X坐标位置
- LCD_WR_REG_DATA(0x0021,y);//设置Y坐标位置
- /*开辟显存区域*/
- LCD_XYRAM(x,y,x+7,y+15); // 设置GRAM坐标
- LCD_WR_REG(0x0022); //指向RAM寄存器,准备写数据到RAM
复制代码这一部分比较简单,就是根据读/写函数确定起始点坐标并开辟矩形显示区域。 然后要注意以下这行代码: 这行代码的意思是这样的。因为在完整的ascii码中,序号为0~31的字符都是些控制字符,这些在液晶屏上都是无法显示的,因此我们要将其剔除。而序号为32的字符时space,也就是’ ’(空字符)。所以用num减去空字符的ascii码序号得到实际程序中使用的查表序号(见ili9328.c文件)。 接下来是两个for循环,代码如下: - for(pos=0;pos<16;pos++)
- {
- temp=ascii_16[num][pos];
- for(t=0;t<8;t++)
- {
- if(temp&0x80) LCD_WR_DATA(POINT_COLOR);
- else LCD_WR_DATA(BACK_COLOR);
- temp<<=1;
- }
- }
复制代码这里还是拿ascii码序号为100的字符’d’来做例子加以说明。该字符的实际显示如下图:
它对应的取模数组(高位在前)为: {0x00,0x00,0x00,0x06,0x02,0x02,0x02,0x1E,0x22,0x42,0x42,0x42,0x26,0x1B,0x00,0x00} 由于矩形显示区域尺寸为8*16,因此上面数组中每一个元素都代表着一行,再因为高位在前的设置关系,因此第0个元素代表第0行,第1个元素代表第1行,……第15个元素代表第15行。两个for循环分别对应了16行和8列的逐个扫描。 另外需要说明的是: - if(temp&0x80) LCD_WR_DATA(POINT_COLOR);
- else LCD_WR_DATA(BACK_COLOR);
- temp<<=1;
复制代码temp&0x80因为显示设置为高位在前,像其他人编写的程序中有些是使用低位在前的,那么这里就需要temp&0x01了。通过移位将行中的每一个像素进行扫描,if部分判断当前像素需要被点亮,满足则填入POINT_COLOR的颜色(此处设置为黑);else部分则判断当前像素不需要被点亮,满足则填入BACK_COLOR的颜色(此处设置为白)。
这个函数就是这样了!
|