OLED显示字符串(用厂商代码)
OLED买来后,在商家给的参考资料中找到范例代码,打开51版本的,参考里面现有的代码进一步完善OLED的使用开发
1.添加厂商函数
在LQ12864.h文件中可以找到OLED的一些使用函数,如初始化、写数据、写命令等函数,可以看到有OLED 设置坐标的函数,显示8*16一组标准ASCII字符串函数,可以拿这两个出来用用
设置坐标就是找出参数与页和列的关系,再调用写命令设置想要显示的坐标即可
显示8*16标准ASCII字符串函数暂时看不懂,可用着先
/*********************OLED 设置坐标************************************/
void OLED_Set_Pos(unsigned char x, unsigned char y)
{
OLED_WrCmd(0xb0+y);
OLED_WrCmd(((x&0xf0)>>4)|0x10);
OLED_WrCmd((x&0x0f)|0x01);
}
/*******************功能描述:显示8*16一组标准ASCII字符串 显示的坐标(x,y),y为页范围0~7****************/
void OLED_P8x16Str(unsigned char x, y,unsigned char ch[])
{
unsigned char c=0,i=0,j=0;
while (ch[j]!='\0')
{
c =ch[j]-32;
if(x>120){x=0;y++;}
OLED_Set_Pos(x,y);
for(i=0;i<8;i++)
OLED_WrDat(F8X16[c*16+i]);
OLED_Set_Pos(x,y+1);
for(i=0;i<8;i++)
OLED_WrDat(F8X16[c*16+i+8]);
x+=8;
j++;
}
}
2.添加ASCII 8*16点阵
因为上面使用了显示8*16的函数,所以点阵也用8 * 16的才行
先新建一个头文件OLEDASCII.h来放点阵数据,在codetab.h头文件中找到8*16的点阵,然后复制过来
/****************************************8*16的点阵************************************/
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
………………………………
};
3.main函数中先调用清屏,然后直接调用函数显示字符串即可
unsigned char show[10];
void main()
{
int i;
//1.OLED初始化
OLED_Init();
//2.确认页寻址模式
OLED_WritCommand(0x20); //设置内存地址
OLED_WritCommand(0x02); //设置页寻址模式
OLED_Clear(); //先清屏
//直接调用函数即可显示字符,第二个参数是页
OLED_P8x16Str(1,2,"hello");
//动态显示,先组装字符串,然后调用函数发送
for(i = 0;i<100;i++)
{
sprintf(show,"speed:%dcm/s",i);
OLED_P8x16Str(1,5,show);
}
while(1)
{
}
}