首先在官网上下载 u8glib for arm 下载之后解压
新建 u8g_arm.c 这是u8g的接口文件
需要实现的函数:
- u8g_Delay(uint16_t)为延时n毫秒函数:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
void u8g_Delay(uint16_t val)
{
//put your code here
}
void u8g_MicroDelay()
{
//put your code here
}
void u8g_10MicroDelay()
{
//put your code here
}
uint8_t u8g_com_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr)
{
switch(msg)
{
case U8G_COM_MSG_STOP:
//STOP THE DEVICE
break;
case U8G_COM_MSG_INIT:
//INIT HARDWARE INTERFACES, TIMERS, GPIOS...
break;
case U8G_COM_MSG_ADDRESS:
//SWITCH FROM DATA TO COMMAND MODE (arg_val == 0 for command mode)
break;
case U8G_COM_MSG_RESET:
//TOGGLE THE RESET PIN ON THE DISPLAY BY THE VALUE IN arg_val
break;
case U8G_COM_MSG_WRITE_BYTE:
//WRITE BYTE TO DEVICE
break;
case U8G_COM_MSG_WRITE_SEQ:
case U8G_COM_MSG_WRITE_SEQ_P:
break;
}
return 1;
}
关于 case U8G_COM_MSG_WRITE_BYTE:
直接将control设置为0x00 即按照数据的格式发就行
这里用的是i2c通信协议,使用其他协议需要实现不同的函数
下面新建 u8g_arm.h
添加下面的代码
1
2
3
4
5
6
7
8
9
10
#ifndef _U8G_ARM_H
#define _U8G_ARM_H
//adjust this path:
#include "u8g.h"
//main com function. read on...
uint8_t u8g_com_hw_i2c_fn(u8g_t *u8g, uint8_t msg, uint8_t arg_val, void *arg_ptr);
#endif
具体就不加解释
这样就实现了u8g的接口
使用u8g时添加下面代码:
1
2
3
u8g_t u8g;//构造一个u8g
u8g_InitComFn(&u8g, &u8g_dev_ssd1306_128x64_i2c, u8g_com_hw_i2c_fn);//注意第三个参数为刚才实现的函数名字 第二个参数为驱动ic
之后就可以使用u8g了
然而在编译中出现一些问题,做一下整理:
出现symbol undefined :把不需要的.c文件删除即可
出现no space:打开options for target -> c/c++ -> optimization 设置为 level3 (-O3) 再编译不报错