树莓派使用wiringpi驱动oled屏幕
时间: 2023-09-11 09:04:51 浏览: 55
好的,树莓派使用wiringpi驱动oled屏幕的具体步骤如下:
1.安装wiringpi库
在终端中输入以下命令进行安装:
```
sudo apt-get update
sudo apt-get install wiringpi
```
2.连接oled屏幕
将oled屏幕的SDA和SCL引脚分别连接到树莓派的GPIO2和GPIO3引脚上。
3.编写代码
使用wiringpi库编写代码来控制oled屏幕的显示。以下是一个简单的示例:
```
#include <wiringPi.h>
#include <wiringPiI2C.h>
#define OLED_ADDR 0x3c
int fd;
void write_cmd(unsigned char cmd)
{
wiringPiI2CWriteReg8(fd, 0x00, cmd);
}
void write_data(unsigned char data)
{
wiringPiI2CWriteReg8(fd, 0x40, data);
}
void OLED_Init()
{
write_cmd(0xAE); // display off
write_cmd(0x20); // set memory addressing mode
write_cmd(0x00); // horizontal addressing mode
write_cmd(0x21); // set column address
write_cmd(0x00); // start column
write_cmd(0x7F); // end column
write_cmd(0x22); // set page address
write_cmd(0x00); // start page
write_cmd(0x07); // end page
write_cmd(0xB0); // set page start address
write_cmd(0xC8); // flip vertically
write_cmd(0x00); // set low column address
write_cmd(0x10); // set high column address
write_cmd(0x40); // set display start line
write_cmd(0x81); // set contrast control
write_cmd(0xFF); // set maximum contrast
write_cmd(0xA1); // set segment remap
write_cmd(0xA6); // set normal display
write_cmd(0xA8); // set multiplex ratio
write_cmd(0x3F); // set maximum multiplex ratio
write_cmd(0xA4); // set display mode
write_cmd(0xD3); // set display offset
write_cmd(0x00); // set offset to 0
write_cmd(0xD5); // set display clock divide ratio/oscillator frequency
write_cmd(0xF0); // set divide ratio and oscillator frequency
write_cmd(0xD9); // set pre-charge period
write_cmd(0x22); // set pre-charge period to 2 DCLKs
write_cmd(0xDA); // set COM pins hardware configuration
write_cmd(0x12); // set alternate COM pins
write_cmd(0xDB); // set VCOMH
write_cmd(0x40); // set VCOMH to 0.83 VCC
write_cmd(0x8D); // set charge pump
write_cmd(0x14); // enable charge pump
write_cmd(0xAF); // display on
}
void OLED_Clear()
{
int i, j;
for (i = 0; i < 8; i++)
{
write_cmd(0xB0 + i);
write_cmd(0x00);
write_cmd(0x10);
for (j = 0; j < 128; j++)
{
write_data(0x00);
}
}
}
void OLED_ShowString(unsigned char x, unsigned char y, unsigned char *str)
{
unsigned char c = 0, i = 0, j = 0;
while (str[j] != '\0')
{
c = str[j] - 32;
if (x > 120)
{
x = 0;
y++;
}
write_cmd(0xB0 + y);
write_cmd((x & 0x0F) | 0x10);
write_cmd((x >> 4) | 0x00);
for (i = 0; i < 8; i++)
{
write_data(pgm_read_byte(font8x16 + c * 16 + i));
}
write_cmd(0xB0 + y);
write_cmd((x & 0x0F) | 0x10);
write_cmd((x >> 4) | 0x00);
for (i = 8; i < 16; i++)
{
write_data(pgm_read_byte(font8x16 + c * 16 + i));
}
x += 8;
j++;
}
}
int main(int argc, char **argv)
{
if (wiringPiSetup() < 0)
{
fprintf(stderr, "Failed to setup wiringPi\n");
return 1;
}
if ((fd = wiringPiI2CSetup(OLED_ADDR)) < 0)
{
fprintf(stderr, "Failed to setup I2C device: %s\n", strerror(errno));
return 1;
}
OLED_Init();
OLED_Clear();
OLED_ShowString(0, 0, "Hello, world!");
return 0;
}
```
这段代码实现了oled屏幕的初始化、清屏和显示字符串等功能。
4.编译运行
在终端中输入以下命令进行编译:
```
gcc -o oled oled.c -lwiringPi
```
然后运行程序:
```
sudo ./oled
```
此时,oled屏幕应该可以显示出“Hello, world!”这个字符串了。