GeBalanceBot/GeBalanceBot_Firmware v1.0 .../HARDWARE/OLED/oled.c

303 lines
8.4 KiB
C
Raw Normal View History

2024-01-18 01:55:04 +08:00
///******************** (C) COPYRIGHT 2023 GeekRebot *****************************
//* File Name : oled.c
//* Current Version : V1.0 & ST 3.5.0
//* Author : zhanli 719901725@qq.com
//* Date of Issued : 2024.01.09
//* Comments : oled的iic方式驱动
// SCL -> PA10SDA -> PA11
//********************************************************************************/
//#include "oled.h"
//#include "stdlib.h"
//#include "oledfont.h"
//#include "delay.h"
//#include "bsp_iic.h"
//// OLED的显存
//// 存放格式如下.
////[0]0 1 2 3 ... 127
////[1]0 1 2 3 ... 127
////[2]0 1 2 3 ... 127
////[3]0 1 2 3 ... 127
////[4]0 1 2 3 ... 127
////[5]0 1 2 3 ... 127
////[6]0 1 2 3 ... 127
////[7]0 1 2 3 ... 127
//void Write_IIC_Command(unsigned char IIC_Command)
//{
// IIC_Start();
// IIC_Send_Byte(0x78); // Slave address,SA0=0
// IIC_Wait_Ack();
// IIC_Send_Byte(0x00); // write command
// IIC_Wait_Ack();
// IIC_Send_Byte(IIC_Command);
// IIC_Wait_Ack();
// IIC_Stop();
//}
///**********************************************
//// IIC Write Data
//**********************************************/
//void Write_IIC_Data(unsigned char IIC_Data)
//{
// IIC_Start();
// IIC_Send_Byte(0x78); // D/C#=0; R/W#=0
// IIC_Wait_Ack();
// IIC_Send_Byte(0x40); // write data
// IIC_Wait_Ack();
// IIC_Send_Byte(IIC_Data);
// IIC_Wait_Ack();
// IIC_Stop();
//}
//void OLED_WR_Byte(unsigned dat, unsigned cmd)
//{
// if (cmd)
// {
// Write_IIC_Data(dat);
// }
// else
// {
// Write_IIC_Command(dat);
// }
//}
///********************************************
//// fill_Picture
//********************************************/
//void fill_picture(unsigned char fill_Data)
//{
// unsigned char m, n;
// for (m = 0; m < 8; m++)
// {
// OLED_WR_Byte(0xb0 + m, 0); // page0-page1
// OLED_WR_Byte(0x00, 0); // low column start address
// OLED_WR_Byte(0x10, 0); // high column start address
// for (n = 0; n < 128; n++)
// {
// OLED_WR_Byte(fill_Data, 1);
// }
// }
//}
///***********************Delay****************************************/
//void Delay_50ms(unsigned int Del_50ms)
//{
// unsigned int m;
// for (; Del_50ms > 0; Del_50ms--)
// for (m = 6245; m > 0; m--);
//}
//void Delay_1ms(unsigned int Del_1ms)
//{
// unsigned char j;
// while (Del_1ms--)
// {
// for (j = 0; j < 123; j++);
// }
//}
//// 坐标设置
//void OLED_Set_Pos(unsigned char x, unsigned char y)
//{
// OLED_WR_Byte(0xb0 + y, OLED_CMD);
// OLED_WR_Byte(((x & 0xf0) >> 4) | 0x10, OLED_CMD);
// OLED_WR_Byte((x & 0x0f), OLED_CMD);
//}
//// 开启OLED显示
//void OLED_Display_On(void)
//{
// OLED_WR_Byte(0X8D, OLED_CMD); // SET DCDC命令
// OLED_WR_Byte(0X14, OLED_CMD); // DCDC ON
// OLED_WR_Byte(0XAF, OLED_CMD); // DISPLAY ON
//}
//// 关闭OLED显示
//void OLED_Display_Off(void)
//{
// OLED_WR_Byte(0X8D, OLED_CMD); // SET DCDC命令
// OLED_WR_Byte(0X10, OLED_CMD); // DCDC OFF
// OLED_WR_Byte(0XAE, OLED_CMD); // DISPLAY OFF
//}
//// 清屏函数,清完屏,整个屏幕是黑色的!和没点亮一样!!!
//void OLED_Clear(void)
//{
// u8 i, n;
// for (i = 0; i < 8; i++)
// {
// OLED_WR_Byte(0xb0 + i, OLED_CMD); // 设置页地址0~7
// OLED_WR_Byte(0x00, OLED_CMD); // 设置显示位置—列低地址
// OLED_WR_Byte(0x10, OLED_CMD); // 设置显示位置—列高地址
// for (n = 0; n < 128; n++)
// OLED_WR_Byte(0, OLED_DATA);
// } // 更新显示
//}
//void OLED_On(void)
//{
// u8 i, n;
// for (i = 0; i < 8; i++)
// {
// OLED_WR_Byte(0xb0 + i, OLED_CMD); // 设置页地址0~7
// OLED_WR_Byte(0x00, OLED_CMD); // 设置显示位置—列低地址
// OLED_WR_Byte(0x10, OLED_CMD); // 设置显示位置—列高地址
// for (n = 0; n < 128; n++)
// OLED_WR_Byte(1, OLED_DATA);
// } // 更新显示
//}
//// 在指定位置显示一个字符,包括部分字符
//// x:0~127
//// y:0~63
//// mode:0,反白显示;1,正常显示
//// size:选择字体 16/12
//void OLED_ShowChar(u8 x, u8 y, u8 chr, u8 Char_Size)
//{
// unsigned char c = 0, i = 0;
// c = chr - ' '; // 得到偏移后的值
// if (x > Max_Column - 1)
// {
// x = 0;
// y = y + 2;
// }
// if (Char_Size == 16)
// {
// OLED_Set_Pos(x, y);
// for (i = 0; i < 8; i++)
// OLED_WR_Byte(F8X16[c * 16 + i], OLED_DATA);
// OLED_Set_Pos(x, y + 1);
// for (i = 0; i < 8; i++)
// OLED_WR_Byte(F8X16[c * 16 + i + 8], OLED_DATA);
// }
// else
// {
// OLED_Set_Pos(x, y);
// for (i = 0; i < 6; i++)
// OLED_WR_Byte(F6x8[c][i], OLED_DATA);
// }
//}
//// m^n函数
//u32 oled_pow(u8 m, u8 n)
//{
// u32 result = 1;
// while (n--)
// result *= m;
// return result;
//}
//// 显示2个数字
//// x,y :起点坐标
//// len :数字的位数
//// size:字体大小
//// mode:模式 0,填充模式;1,叠加模式
//// num:数值(0~4294967295);
//void OLED_ShowNum(u8 x, u8 y, u32 num, u8 len, u8 size2)
//{
// u8 t, temp;
// u8 enshow = 0;
// for (t = 0; t < len; t++)
// {
// temp = (num / oled_pow(10, len - t - 1)) % 10;
// if (enshow == 0 && t < (len - 1))
// {
// if (temp == 0)
// {
// OLED_ShowChar(x + (size2 / 2) * t, y, ' ', size2);
// continue;
// }
// else
// enshow = 1;
// }
// OLED_ShowChar(x + (size2 / 2) * t, y, temp + '0', size2);
// }
//}
//// 显示一个字符号串
//void OLED_ShowString(u8 x, u8 y, u8 *chr, u8 Char_Size)
//{
// unsigned char j = 0;
// while (chr[j] != '\0')
// {
// OLED_ShowChar(x, y, chr[j], Char_Size);
// x += 8;
// if (x > 120)
// {
// x = 0;
// y += 2;
// }
// j++;
// }
//}
//// 显示汉字
//void OLED_ShowCHinese(u8 x, u8 y, u8 no)
//{
// u8 t, adder = 0;
// OLED_Set_Pos(x, y);
// for (t = 0; t < 16; t++)
// {
// OLED_WR_Byte(Hzk[2 * no][t], OLED_DATA);
// adder += 1;
// }
// OLED_Set_Pos(x, y + 1);
// for (t = 0; t < 16; t++)
// {
// OLED_WR_Byte(Hzk[2 * no + 1][t], OLED_DATA);
// adder += 1;
// }
//}
///***********功能描述显示显示BMP图片128×64起始点坐标(x,y),x的范围0127y为页的范围07*****************/
//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_Set_Pos(x0, y);
// for (x = x0; x < x1; x++)
// {
// OLED_WR_Byte(BMP[j++], OLED_DATA);
// }
// }
//}
//// 初始化SSD1306
//void OLED_Init(void)
//{
// IIC_Init();
// Delay_ms(800);
// OLED_WR_Byte(0xAE, OLED_CMD); // Display off
// OLED_WR_Byte(0x00, OLED_CMD); // set low column address
// OLED_WR_Byte(0x10, OLED_CMD); // set high column address
// OLED_WR_Byte(0x40, OLED_CMD); // set start line address
// OLED_WR_Byte(0xB0, OLED_CMD); // set page address
// OLED_WR_Byte(0x81, OLED_CMD); // contract control
// OLED_WR_Byte(0xFF, OLED_CMD); // 128
// OLED_WR_Byte(0xA1, OLED_CMD); // set segment remap
// OLED_WR_Byte(0xA6, OLED_CMD); // normal / reverse
// OLED_WR_Byte(0xA8, OLED_CMD); // set multiplex ratio(1 to 64)
// OLED_WR_Byte(0x3F, OLED_CMD); // 1/32 duty
// OLED_WR_Byte(0xC8, OLED_CMD); // Com scan direction
// OLED_WR_Byte(0xD3, OLED_CMD); // Set display offset
// OLED_WR_Byte(0x00, OLED_CMD);
// OLED_WR_Byte(0xD5, OLED_CMD); // set osc division
// OLED_WR_Byte(0x80, OLED_CMD); //
// OLED_WR_Byte(0xD8, OLED_CMD); // set area color mode off
// OLED_WR_Byte(0x05, OLED_CMD); //
// OLED_WR_Byte(0xD9, OLED_CMD); // Set Pre-Charge Period
// OLED_WR_Byte(0xF1, OLED_CMD); //
// OLED_WR_Byte(0xDA, OLED_CMD); // set com pin configuartion
// OLED_WR_Byte(0x12, OLED_CMD); //
// OLED_WR_Byte(0xDB, OLED_CMD); // set Vcomh
// OLED_WR_Byte(0x30, OLED_CMD); //
// OLED_WR_Byte(0x8D, OLED_CMD); // set charge pump enable
// OLED_WR_Byte(0x14, OLED_CMD);
// OLED_WR_Byte(0xAF, OLED_CMD); // turn on oled panel
//}