嵌入式之路,贵在日常点滴
---阿杰在线送代码
我们可以直接拿商家的初始化程序来用
https://pan.baidu.com/s/1J57Izsv-PKmbwVrA2ynDzg 提取码:vktz
这里我使用的是优信电子的4P 0.96寸白色的OLED
对比程序更改初始化函数,一般SCL和SDA引脚需要改变一下。
我使用的是C8T6最小板来开发这个项目,所以我得引脚为
SCL--PC14
SDA--PC15
一、修改OLED_Init() 函数 -》(修改引脚)
二、修改oled.h中的宏
三、 调用初始化函数
四、在main使用显示函数
显示字符串
//x:0-127 列(即一行有128个点可用于显示) y :0-63 行(即一列有64个点可用于显示)
//u8 *chr :想要显示的字符串内容
//size:字体大小
//显示一个字符号串
void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 Char_Size)
{
unsigned char j=0;
while (chr[j]!='\0')
{ OLED_ShowChar(x,y,chr[j],Char_Size);
x+=8;
if(x>120){x=0;y+=2;}
j++;
}
}
OLED_ShowString(6,3,"ABCDSDKJF",16);//显示一个字符号串
OLED_ShowString(0,6,"GFGFGF:",16);
OLED_ShowString(63,6,"FGFGFG:",16);
显示数据的一种方法
比如:我们要显示温度数据等等 带有小数点
数据转字符串函数
sprintf((char *)string,"Pitch:%.2f",pitch);
u8 string[16] = {0};
int main(void)
{
float pitch = 1.2;
OLED_Init(); //初始化OLED
OLED_Clear(); //清屏
while(1)
{
sprintf(string,"Pitch:%.2f",pitch);//将数据转换为字符串.存放在string中
OLED_ShowString(6,6,string,16);//显示字符串,“string只能是字符串”
//如果显示大小为16,y最多只能从0到6
//如果显示大小位8,y可以从0到7
}
}
显示汉字
补充知识:
没有行的概念 一页=八行 按页写
字符:两页八列 (一个字节)
汉字:两页十六列(两个字节)
图片:自己设定(不能大于128*64)
//显示汉字
//x:0-127 列(即一行有128个点可用于显示) 必须是16的倍数
//y :y每递增1代表8个位(即一列有64个点可用于显示)
//一个汉字所占的点数:行16个点,列16个点
//no:显示汉字序号
void OLED_ShowCHinese(u8 x,u8 y,u8 no)
{
u8 t,adder=0;
OLED_Set_Pos(x,y);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no][t],OLED_DATA);
adder+=1;
}
OLED_Set_Pos(x,y+1);
for(t=0;t<16;t++)
{
OLED_WR_Byte(Hzk[2*no+1][t],OLED_DATA);
adder+=1;
}
}
int main(void)
{
float pitch = 1.2;
OLED_Init(); //初始化OLED
OLED_Clear();
while(1)
{
OLED_ShowCHinese(0,0,0);//遥
OLED_ShowCHinese(0,2,1);//控
OLED_ShowCHinese(0,4,2);//模
OLED_ShowCHinese(0,6,3);//式 y最多只能到6,在递增就溢出了
}
}
oledfont.h
char Hzk[][32]={
{0x40,0x40,0x42,0xCC,0x00,0x00,0x4A,0x32,0x22,0x2A,0xF1,0x21,0x31,0x2D,0x00,0x00},
{0x00,0x80,0x40,0x3F,0x40,0x80,0x81,0xBD,0xA1,0xA1,0xBF,0xA1,0xA1,0xBD,0x81,0x00},/*"遥",0*/
/* (16 X 16 , 宋体 )*/
{0x10,0x10,0x10,0xFF,0x90,0x20,0x98,0x48,0x28,0x09,0x0E,0x28,0x48,0xA8,0x18,0x00},
{0x02,0x42,0x81,0x7F,0x00,0x40,0x40,0x42,0x42,0x42,0x7E,0x42,0x42,0x42,0x40,0x00},/*"控",1*/
/* (16 X 16 , 宋体 )*/
{0x10,0x10,0xD0,0xFF,0x90,0x14,0xE4,0xAF,0xA4,0xA4,0xA4,0xAF,0xE4,0x04,0x00,0x00},
{0x04,0x03,0x00,0xFF,0x00,0x89,0x4B,0x2A,0x1A,0x0E,0x1A,0x2A,0x4B,0x88,0x80,0x00},/*"模",2*/
/* (16 X 16 , 宋体 )*/
{0x10,0x10,0x90,0x90,0x90,0x90,0x90,0x10,0x10,0xFF,0x10,0x10,0x11,0x16,0x10,0x00},
{0x00,0x20,0x60,0x20,0x3F,0x10,0x10,0x10,0x00,0x03,0x0C,0x10,0x20,0x40,0xF8,0x00},/*"式",3*/
/* (16 X 16 , 宋体 )*/
};
oledfont.h可通过取模软件来生成, 需要简单的配置
若上一次调用字符或汉字后屏幕被点亮的范围(即哪一行那一列的点比本次点亮的多)比本次大。
需要一次清屏 OLED_Clear(); //即将所有的点熄灭 (只让清一次即可 太多次会出事)
评论(0)
您还未登录,请登录后发表或查看评论