前提:根据数据手册编写好OLED的IIC时序程序,有发送命令和发送数据的函数,OLED初始化后设置页模式,能成功显示一个点或者直线后再尝试显示文字,字母和数字
1.打开取模软件后先进行参数设置
2.主要是对软件的取模方式进行设置
当输入完文字后,可以按Ctrl+Enter表示想结束文字的输入,但由于要对每个文字单独取模,在把文字转化为图像的处理方法上有所不同,具体说来是如果您要横向取模的话则把输入的文字纵向排列成图像而纵向取模的话则把输入的文字横向排列成图像
主要是取模方式,根据需要选择,保留勾不勾选影响不大
3.在文字输入区输入文字后记得按下Ctrl+Enter组合键,才会将文字显示到点阵上
4.然后点击取模方式,C51格式,便可以在点阵生成区看到文字的点阵数据,复制到代码中,用数组装起来,如果数组太大导致keil编译不通过,则在声明数组前加上code,编译器会自动把数组放到ROM中,便能编译通过
code unsigned char bmp[] = {……};
1.将点阵数据用数组保存,可放在OLED.h头文件中,这里把数据分为两个数组存着是为了显示方便
/*-- 文字: 你 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
code char ni1[16] = {0x00,0x80,0x60,0xF8,0x07,0x40,0x20,0x18,0x0F,0x08,0xC8,0x08,0x08,0x28,0x18,0x00};
code char ni2[16] = {0x01,0x00,0x00,0xFF,0x00,0x10,0x0C,0x03,0x40,0x80,0x7F,0x00,0x01,0x06,0x18,0x00};
/*-- 文字: 好 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
code char hao1[16] = {0x10,0x10,0xF0,0x1F,0x10,0xF0,0x00,0x80,0x82,0x82,0xE2,0x92,0x8A,0x86,0x80,0x00};
code char hao2[16] = {0x40,0x22,0x15,0x08,0x16,0x61,0x00,0x00,0x40,0x80,0x7F,0x00,0x00,0x00,0x00,0x00};
//…………
2.将显示方法写成一个函数,文字的宽度是多少,循环次数就是多少,在某一列指定某一位亮起,组合起来就是一个文字了,取模软件的作用就是按列的顺序把一列中要亮起的位转为十六进制数据供程序使用
因为共有128列,显示几个文字数字还是够用的
/**
* @brief 显示文字,字母或数字
* @param num 循环次数,对应文字字母或数字的宽度
* @param Data 要显示的文字,字母或数字的数组
* @retval无
*/
void Show_Data(int num,char* Data)
{
unsigned int i;
for(i = 0;i<num;i++)
{
OLED_WritData(Data[i]);
}
}
3.main函数,因为一个文字、字母或数字的高都是16位的,而一个页才8位,放不下,所以要用两页来显示
把文字字母数字对半分为上部分和下部分,先在第一页显示上半部分,再在第二页显示下半部分,组合起来就是一个完整的文字字母数字
要显示完整就要求列的起始位置是同一列的,不然显示就会偏移
void main()
{
//1.OLED初始化
OLED_Init();
//2.确认页寻址模式
OLED_WritCommand(0x20); //设置内存地址
OLED_WritCommand(0x02); //设置页寻址模式
OLED_Clear(); //先清屏
//选择PAGE0
OLED_WritCommand(0xB0);
//选择列
OLED_WritCommand(0x00);
OLED_WritCommand(0x10);
//显示上半部分
Show_Data(16,ni1);
Show_Data(16,hao1);
Show_Data(16,A1);
Show_Data(16,one1);
Show_Data(16,two1);
Show_Data(16,three1);
//选择Page1
OLED_WritCommand(0xB1);
//选择列,要跟上半部分的列一致
OLED_WritCommand(0x00);
OLED_WritCommand(0x10);
//显示下半部分
Show_Data(16,ni2);
Show_Data(16,hao2);
Show_Data(16,A2);
Show_Data(16,one2);
Show_Data(16,two2);
Show_Data(16,three2);
while(1)
{
}
}