0.96寸oled显示屏4针程序初始化
时间: 2023-09-25 09:09:26 浏览: 100
以下是0.96寸OLED显示屏4针程序初始化的示例代码:
```c
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // 初始化OLED显示屏
display.clearDisplay(); // 清空显示屏
display.setTextColor(WHITE); // 设置文本颜色为白色
display.setTextSize(1); // 设置文本尺寸为1
display.setCursor(0,0); // 设置光标位置为(0,0)
display.println("Hello, World!"); // 输出文本
display.display(); // 显示文本
}
void loop() {
}
```
在这个示例代码中,我们使用了Adafruit_SSD1306库来控制OLED显示屏,并且使用了Wire库来进行通信。在setup()函数中,我们初始化了显示屏,清空了显示屏,并且输出了"Hello, World!"文本。最后,我们调用了display.display()方法来显示文本。在loop()函数中,我们不需要做任何事情,因为我们只需要在程序初始化时输出一次文本即可。
相关问题
0.96寸oled显示屏4针51的程序
以下是0.96寸OLED显示屏4针51的程序示例:
```c
#include <reg51.h>
#define SCL P1_0
#define SDA P1_1
void delay(unsigned int x)
{
unsigned int i, j;
for (i = 0; i < x; i++)
for (j = 0; j < 120; j++);
}
void start(void)
{
SDA = 1;
SCL = 1;
delay(50);
SDA = 0;
delay(50);
SCL = 0;
}
void stop(void)
{
SDA = 0;
SCL = 1;
delay(50);
SDA = 1;
delay(50);
}
void write_byte(unsigned char dat)
{
unsigned char i;
for (i = 0; i < 8; i++)
{
SDA = dat & 0x80;
SCL = 1;
dat <<= 1;
SCL = 0;
}
}
void write_cmd(unsigned char cmd)
{
start();
write_byte(0x78);
write_byte(0x00);
write_byte(cmd);
stop();
}
void write_dat(unsigned char dat)
{
start();
write_byte(0x78);
write_byte(0x40);
write_byte(dat);
stop();
}
void init(void)
{
write_cmd(0xAE); // 关闭显示
write_cmd(0xD5); // 设置显示时钟分频因子和振荡器频率
write_cmd(0x80);
write_cmd(0xA8); // 设置驱动路数
write_cmd(0x3F); // 设置131像素点
write_cmd(0xD3); // 设置显示偏移
write_cmd(0x00);
write_cmd(0x40); // 设置显示起始行
write_cmd(0x8D); // 开启电荷泵
write_cmd(0x14);
write_cmd(0x20); // 设置内存地址模式
write_cmd(0x00);
write_cmd(0xA1); // 设置段重映射
write_cmd(0xC8); // 设置列重映射
write_cmd(0xDA); // 设置COM硬件引脚配置
write_cmd(0x12);
write_cmd(0x81); // 设置对比度控制
write_cmd(0xCF);
write_cmd(0xD9); // 设置预充电周期
write_cmd(0xF1);
write_cmd(0xDB); // 设置VCOMH电压倍率
write_cmd(0x40);
write_cmd(0xA4); // 关闭全局显示开启显示
write_cmd(0xA6); // 设置正常/反色显示
write_cmd(0xAF); // 打开显示
}
void main(void)
{
init();
write_dat(0xFF);
while (1);
}
```
以上代码使用51单片机控制OLED显示屏,使用4针(SCL、SDA、VCC、GND)连接。其中,start()、stop()、write_byte(unsigned char dat)、write_cmd(unsigned char cmd)、write_dat(unsigned char dat) 函数是I2C通信相关的函数,init()函数用于初始化OLED显示屏。在main()函数中,先进行初始化,然后使用write_dat(unsigned char dat)函数向OLED显示屏写入数据。
0.96寸oled显示屏4针51单片机的程序
以下是一个使用51单片机控制0.96寸OLED显示屏的简单程序,需要使用4针OLED连接方式。
```c
#include <reg52.h>
#define SCL P1_0 //时钟线
#define SDA P1_1 //数据线
void delay(unsigned int t) //延时函数
{
while (t--)
{
int i = 1000;
while (i--);
}
}
void IIC_Start() //起始信号
{
SDA = 1;
SCL = 1;
delay(1);
SDA = 0;
delay(1);
SCL = 0;
}
void IIC_Stop() //结束信号
{
SDA = 0;
SCL = 1;
delay(1);
SDA = 1;
delay(1);
}
void Write_IIC_Byte(unsigned char dat) //写数据
{
unsigned char i;
for (i = 0; i < 8; i++)
{
SDA = dat & 0x80;
SCL = 1;
delay(1);
SCL = 0;
dat <<= 1;
}
}
void OLED_WriteCmd(unsigned char cmd) //写指令
{
IIC_Start();
Write_IIC_Byte(0x78);
Write_IIC_Byte(0x00);
Write_IIC_Byte(cmd);
IIC_Stop();
}
void OLED_WriteDat(unsigned char dat) //写数据
{
IIC_Start();
Write_IIC_Byte(0x78);
Write_IIC_Byte(0x40);
Write_IIC_Byte(dat);
IIC_Stop();
}
void OLED_Init() //OLED初始化
{
OLED_WriteCmd(0xAE); //关闭显示
OLED_WriteCmd(0x20); //设置内存地址模式
OLED_WriteCmd(0x02); //设置内存地址模式为页地址模式
OLED_WriteCmd(0x8D); //开启电荷泵
OLED_WriteCmd(0x14); //设置电荷泵倍数
OLED_WriteCmd(0xA1); //设置段重映射
OLED_WriteCmd(0xC8); //设置行重映射
OLED_WriteCmd(0xDA); //设置COM硬件配置
OLED_WriteCmd(0x12); //设置COM硬件配置
OLED_WriteCmd(0x81); //设置对比度
OLED_WriteCmd(0xCF); //设置对比度
OLED_WriteCmd(0xD9); //设置预充电周期
OLED_WriteCmd(0xF1); //设置预充电周期
OLED_WriteCmd(0xDB); //设置VCOMH
OLED_WriteCmd(0x40); //设置VCOMH
OLED_WriteCmd(0xA4); //设置显示全部点亮
OLED_WriteCmd(0xA6); //设置正常显示
OLED_WriteCmd(0xAF); //开启显示
}
void OLED_Clear() //清屏
{
unsigned char i, j;
for (i = 0; i < 8; i++)
{
OLED_WriteCmd(0xb0 + i); //设置页地址
OLED_WriteCmd(0x00); //设置列地址低4位
OLED_WriteCmd(0x10); //设置列地址高4位
for (j = 0; j < 128; j++)
{
OLED_WriteDat(0); //清空该页的所有像素点
}
}
}
void OLED_ShowString(unsigned char x, unsigned char y, unsigned char *str) //显示字符串
{
unsigned char i = 0;
while (str[i] != '\0')
{
OLED_ShowChar(x, y, str[i]);
x += 8;
i++;
}
}
void OLED_ShowChar(unsigned char x, unsigned char y, unsigned char chr) //显示字符
{
unsigned char i = 0;
unsigned char j = 0;
chr = chr - 32;
OLED_WriteCmd(0xb0 + y); //设置页地址
OLED_WriteCmd(((x & 0xf0) >> 4) | 0x10); //设置列地址高4位
OLED_WriteCmd(x & 0x0f); //设置列地址低4位
for (i = 0; i < 8; i++)
{
OLED_WriteDat(F8X16[chr * 16 + i]); //写入字符的上半部分
}
OLED_WriteCmd(0xb0 + y + 1); //设置页地址
OLED_WriteCmd(((x & 0xf0) >> 4) | 0x10); //设置列地址高4位
OLED_WriteCmd(x & 0x0f); //设置列地址低4位
for (i = 0; i < 8; i++)
{
OLED_WriteDat(F8X16[chr * 16 + i + 8]); //写入字符的下半部分
}
}
void main()
{
OLED_Init(); //OLED初始化
OLED_Clear(); //清屏
OLED_ShowString(0, 0, "Hello, world!"); //显示字符串
while (1);
}
```
需要注意的是,以上程序中使用了一个字库数组 `F8X16`,需要在程序中定义该数组或者从外部调用该数组。该字库数组中包含了ASCII码字符的点阵数据,可以用于在OLED屏幕上显示字符。
阅读全文