请教大家 OLED是如何显示字符串的?代码讲解一下
在学习OLED12864显示。其中显示字符串函数。const unsigned char code F8X16[]= //
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//!1
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"2
}更多的代码没有贴上,大家知道意思。
函数
void OLED_P8x16Str(unsigned char x,unsigned char y,unsigned char ch[])
{
unsigned char c=0,i=0,j=0;
while (ch!='\0')
{
c =ch-32;
if(x>122){x=0;y++;}
OLED_Set_Pos(x,y);
for(i=0;i<8;i++)
OLED_WrDat(F8X16);
OLED_Set_Pos(x,y+1);
for(i=0;i<8;i++)
OLED_WrDat(F8X16);
x+=8;
j++;
}
}
主程序
void main()
{
OLED_P8x16Str(1,1,"123ABC")
while(1)
}
现在研究了半天,OLED_P8x16Str(1,1,"123ABC")函数 如何识别我要显示的字符串正确显示出来
大致的思想是,根据你想显示的 字符串 从字库中找到字符串中每个字符的数据,按照屏幕驱动芯片的驱动写入到芯片对应的区域中,然后屏幕显示出来了。 试解释一下...
//西文ASCII字符的点阵模数组.下标从0开始...8X16点阵每字符占16字节点阵模数据...
const unsigned char code F8X16[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0这里的"0"姑且称为行计数,便于函数中变量c的解释.. 每行16字节点模数据.显示一个字符...
0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//!1
0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//"2
......
} //更多的代码没有贴上,大家知道意思。(原注释)
// 西文8x16点阵字符串显示函数
// 形式参数: x,y,字符串左上角显示坐标, ch[] 需要显示字符串数组...
// OLED是128*64像素映射到内存为 128*8字节显示缓存, 则x=0..127(横向128点),y=0..7(纵向8行,每行纵向8点像素,用一字节表达)
void OLED_P8x16Str(unsigned char x,unsigned char y,unsigned char ch[])
{
unsigned char c=0; //字符所在点模数组的行下标
unsigned char i=0; //8像素点计数器
unsigned char j=0; //字符串数组下标计数器,初始化为0,如实例"123ABC", 即 j=0..5
while (ch!='\0') //C语言中字符串结尾标志为0, 如果ch不等于0,则循环... 每一循环j+1
{
c =ch-32; //计算待显示字符的点阵模数组的行计数下标...
//取字符串中的一个字符..将其ASCII码减32,即为点阵模行下标,
//例如'1'的ASCII为0x31(就是49),减0x20(就是减32),即得'1'所在数组的行下标0x11(就是17)
if( x>122){ x=0; y++; } //如果x点坐标大于122, 即无法再显示一个宽度为8点的字符了,需要换行...
OLED_Set_Pos(x,y); //显示定位点坐标(每一字符上半部的左上角位置)
for(i=0;i<8;i++) //循环显示8字节(即一个字符的上半部分)
OLED_WrDat(F8X16); //写点阵模数据...一字节显示纵向8个像素点...
//实例"123ABC", 以首字符'1'来解释点模取法: F8X16,
//由以上解释可知'1'所在为第16行,即'1'的点模数据,从F8X16[]数组偏移17*16字节起始取数16字节点模数据...上半部分取前8字节...
OLED_Set_Pos(x,y+1); //显示定位点坐标(已下移一行(8点))(即每字符下半部的左上角位置)
for(i=0;i<8;i++) //循环显示8字节(即一个字符的下半部分)
OLED_WrDat(F8X16); //写点阵模数据...一字节显示纵向8个像素点...//下半部分取后8字节...表示再偏移8字节
x+=8; //经过两次8字节的循环, 一个字符16字节显示完毕, x坐标要右移8点了...
j++; //字符串中一个字符显示完毕,右移下一字符(如果下一字符为0,即字符串显示结束)
}
}
//主程序
void main()
{
OLED_P8x16Str(1,1,"123ABC")
while(1)
}
以上解释只是针对所给出的函数的本人理解的解释, 仅供参考... 当然, 显示字符串函数, 这不是唯一的算法...
非常感谢 看到你的回复 有点茅塞顿开!
页:
[1]