#include "OLED_I2C.h"
#include "codetab.h"
#include "i2c.h"
#include "delay.h"
void I2C_WriteByte(uint8_t addr, uint8_t data)
{
// while(I2C_GetFlagStatus(I2C1, I2C_FLAG_BUSY));
//
// I2C_GenerateSTART(I2C1, ENABLE);//开启I2C1
// while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));/*EV5,主模式*/
// I2C_Send7bitAddress(I2C1, OLED_ADDRESS, I2C_Direction_Transmitter);//器件地址 -- 默认0x78
// while(!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
// I2C_SendData(I2C1, addr);//寄存器地址
// while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
// I2C_SendData(I2C1, data);//发送数据
// while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
//
// I2C_GenerateSTOP(I2C1, ENABLE);//关闭I2C1总线
// I2C_MasterWrite(I2C2, 0x78, addr, data);
}
void WriteCmd(unsigned char I2C_Command) // 写命令
{
// I2C_WriteByte(0x00, I2C_Command);
uint8_t *cmd;
cmd = &I2C_Command;
HAL_I2C_Mem_Write(&hi2c1, 0x78, 0x00, I2C_MEMADD_SIZE_8BIT, cmd, 1, 100);
}
void Write_IIC_Command(unsigned char I2C_Command)
{
uint8_t *cmd;
cmd = &I2C_Command;
HAL_I2C_Mem_Write(&hi2c1, 0x78, 0x00, I2C_MEMADD_SIZE_8BIT, cmd, 1, 100);
}
void WriteDat(unsigned char I2C_Data) // 写数据
{
// I2C_WriteByte(0x40, I2C_Data);
uint8_t *data;
data = &I2C_Data;
HAL_I2C_Mem_Write(&hi2c1, 0x78, 0x40, I2C_MEMADD_SIZE_8BIT, data, 1, 100);
}
void OLED_Init(void)
{
delay_ms(100); // 这里的延时很重要
Write_IIC_Command(0xAE); // display off
Write_IIC_Command(0x00); // set lower column address
Write_IIC_Command(0x10); // set higher column address
Write_IIC_Command(0x40); // set display start line
Write_IIC_Command(0xB0); // set page address
Write_IIC_Command(0x81); // 对比度设置
Write_IIC_Command(0xCF); // 0~255(对比度值……效果不是特别明显)
Write_IIC_Command(0xA1); // set segment remap
Write_IIC_Command(0xA6); // normal / reverse
Write_IIC_Command(0xA8); // multiplex ratio
Write_IIC_Command(0x3F); // duty = 1/64
Write_IIC_Command(0xC8); // Com scan direction
Write_IIC_Command(0xD3); // set display offset
Write_IIC_Command(0x00);
Write_IIC_Command(0xD5); // set osc division
Write_IIC_Command(0x80);
Write_IIC_Command(0xD9); // set pre-charge period
Write_IIC_Command(0xF1);
Write_IIC_Command(0xDA); // set COM pins
Write_IIC_Command(0x12);
Write_IIC_Command(0xDB); // set vcomh
Write_IIC_Command(0x40);
Write_IIC_Command(0x8D); // set charge pump enable
Write_IIC_Command(0x14);
Write_IIC_Command(0xAF); // display ON
}
void OLED_SetPos(unsigned char x, unsigned char y) // 设置起始点坐标
{
WriteCmd(0xb0 + y);
WriteCmd(((x & 0xf0) >> 4) | 0x10);
WriteCmd((x & 0x0f) | 0x01);
}
void OLED_Fill(unsigned char fill_Data) // 全屏填充
{
unsigned char m, n;
for (m = 0; m < 8; m++)
{
WriteCmd(0xb0 + m); // page0-page1
WriteCmd(0x00); // low column start address
WriteCmd(0x10); // high column start address
for (n = 0; n < 128; n++)
{
WriteDat(fill_Data);
}
}
}
void OLED_CLS(void) // 清屏
{
OLED_Fill(0x00);
}
//--------------------------------------------------------------
// Prototype : void OLED_ON(void)
// Calls :
// Parameters : none
// Description : 将OLED从休眠中唤醒
//--------------------------------------------------------------
void OLED_ON(void)
{
WriteCmd(0X8D); // 设置电荷泵
WriteCmd(0X14); // 开启电荷泵
WriteCmd(0XAF); // OLED唤醒
}
//--------------------------------------------------------------
// Prototype : void OLED_OFF(void)
// Calls :
// Parameters : none
// Description : 让OLED休眠 -- 休眠模式下,OLED功耗不到10uA
//--------------------------------------------------------------
void OLED_OFF(void)
{
WriteCmd(0X8D); // 设置电荷泵
WriteCmd(0X10); // 关闭电荷泵
WriteCmd(0XAE); // OLED休眠
}
void OLED_ShowByte(unsigned char x, unsigned char y, unsigned char N)
{
unsigned char wm = 0;
unsigned int adder = 16 * N;
OLED_SetPos(x, y);
for (wm = 0; wm < 8; wm++)
{
WriteDat(F8X16[adder]);
adder += 1;
}
OLED_SetPos(x, y + 1);
for (wm = 0; wm < 8; wm++)
{
WriteDat(F8X16[adder]);
adder += 1;
}
}
void OLED_ShowNum(unsigned char x, unsigned char y, unsigned int Num)
{
unsigned int temp_Num = Num;
unsigned char temp, temp_x, temp_y;
int temp2 = 100000;
int temp1 = 0;
int flag = 0;
unsigned char temp_z = 8;
static unsigned char last_ws = 0;
temp_x = x;
temp_y = y;
while (temp2)
{
temp = temp_Num / temp2;
if (temp || flag)
{
flag = 1;
OLED_ShowByte(temp_x, temp_y, temp);
temp_x += 8;
temp_Num -= temp * temp2;
temp_z--;
}
temp2 /= 10;
}
OLED_ShowByte(temp_x,temp_y,10);
OLED_ShowByte(temp_x + 8,temp_y,11);
temp += 16;
if(temp_z > last_ws)
{
for(temp1 = 0;temp1 < temp_z;temp1++)
{
OLED_ShowByte(temp_x + temp1*8,temp_y,12);
}
}
last_ws = temp_z;
}
//--------------------------------------------------------------
// Prototype : void OLED_ShowChar(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
// Calls :
// Parameters : x,y -- 起始点坐标(x:0~127, y:0~7); ch[] -- 要显示的字符串; TextSize -- 字符大小(1:6*8 ; 2:8*16)
// Description : 显示codetab.h中的ASCII字符,有6*8和8*16可选择
//--------------------------------------------------------------
void OLED_ShowStr(unsigned char x, unsigned char y, unsigned char ch[], unsigned char TextSize)
{
unsigned char c = 0, i = 0, j = 0;
switch (TextSize)
{
case 1:
{
while (ch[j] != '\0')
{
c = ch[j] - 32;
if (x > 126)
{
x = 0;
y++;
}
OLED_SetPos(x, y);
for (i = 0; i < 6; i++)
WriteDat(F6x8[c][i]);
x += 6;
j++;
}
}
break;
case 2:
{
while (ch[j] != '\0')
{
c = ch[j] - 32;
if (x > 120)
{
x = 0;
y++;
}
OLED_SetPos(x, y);
for (i = 0; i < 8; i++)
WriteDat(F8X16[c * 16 + i]);
OLED_SetPos(x, y + 1);
for (i = 0; i < 8; i++)
WriteDat(F8X16[c * 16 + i + 8]);
x += 8;
j++;
}
}
break;
}
}
//--------------------------------------------------------------
// Prototype : void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
// Calls :
// Parameters : x,y -- 起始点坐标(x:0~127, y:0~7); N:汉字在codetab.h中的索引
// Description : 显示codetab.h中的汉字,16*16点阵
//--------------------------------------------------------------
void OLED_ShowCN(unsigned char x, unsigned char y, unsigned char N)
{
unsigned char wm = 0;
unsigned int adder = 32 * N;
OLED_SetPos(x, y);
for (wm = 0; wm < 16; wm++)
{
WriteDat(F16x16[adder]);
adder += 1;
}
OLED_SetPos(x, y + 1);
for (wm = 0; wm < 16; wm++)
{
WriteDat(F16x16[adder]);
adder += 1;
}
}
//--------------------------------------------------------------
// Prototype : void OLED_DrawBMP(unsigned char x0,unsigned char y0,unsigned char x1,unsigned char y1,unsigned char BMP[]);
// Calls :
// Parameters : x0,y0 -- 起始点坐标(x0:0~127, y0:0~7); x1,y1 -- 起点对角线(结束点)的坐标(x1:1~128,y1:1~8)
// Description : 显示BMP位图
//--------------------------------------------------------------
void OLED_DrawBMP(unsigned char x0, unsigned char y0, unsigned char x1, unsigned char y1, unsigned char BMP[])
{
unsigned int j = 0;
unsigned char x, y;
if (y1 % 8 == 0)
y = y1 / 8;
else
y = y1 / 8 + 1;
for (y = y0; y < y1; y++)
{
OLED_SetPos(x0, y);
for (x = x0; x < x1; x++)
{
WriteDat(BMP[j++]);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
oledc语言驱动.rar
共3个文件
rar:1个
h:1个
c:1个
需积分: 1 0 下载量 8 浏览量
2024-04-24
10:30:25
上传
评论
收藏 29KB RAR 举报
温馨提示
oled显示模块 在嵌入式系统领域,OLED屏幕作为一种显示技术,已经因其出色的显示质量、低功耗和轻薄的特性而被广泛采用。随着技术的不断进步,对OLED屏幕的控制和驱动也提出了更高的要求。为了满足这些需求,开发了专门针对OLED屏幕的编程语言和驱动库,这些工具简化了与OLED屏幕的交互过程,使得开发者可以更轻松地实现复杂的图形用户界面(GUI)和动态显示效果。这些语言驱动通常支持高级功能,如多色彩显示、触摸输入、动画播放等,极大地丰富了OLED屏幕在各类应用中的表现力。随着物联网(IoT)和可穿戴设备市场的增长,预计对OLED屏幕的需求将继续增长,这将进一步推动OLED编程语言和驱动技术的发展。
资源推荐
资源详情
资源评论
收起资源包目录
oledc语言驱动.rar (3个子文件)
文档说明.rar 26KB
OLED_I2C.c 8KB
OLED_I2C.h 952B
共 3 条
- 1
资源评论
saltedfish404
- 粉丝: 946
- 资源: 412
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功